diff --git a/base/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.c b/head/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.c
index 7557795..a1b125d 100644
--- a/base/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.c
+++ b/head/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.c
@@ -14990,6 +14990,61 @@ void cJSON_DeleteRight(struct Right * x) {
     }
 }
 
+struct S * cJSON_ParseS(const char * s) {
+    struct S * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetSValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct S * cJSON_GetSValue(const cJSON * j) {
+    struct S * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct S)))) {
+            memset(x, 0, sizeof(struct S));
+            if (!cJSON_HasObjectItem(j, "s")) { cJSON_DeleteS(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "s")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "s"))) { cJSON_DeleteS(x); return NULL; }
+                x->s = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "s"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateS(const struct S * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "s", x->s);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintS(const struct S * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateS(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteS(struct S * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
+
 struct Sbyte * cJSON_ParseSbyte(const char * s) {
     struct Sbyte * x = NULL;
     if (NULL != s) {
@@ -16621,6 +16676,12 @@ struct Obj4 * cJSON_GetObj4Value(const cJSON * j) {
                 x->right = cJSON_GetRightValue(cJSON_GetObjectItemCaseSensitive(j, "right"));
                 if (NULL == x->right) { cJSON_DeleteObj4(x); return NULL; }
             }
+            if (!cJSON_HasObjectItem(j, "s")) { cJSON_DeleteObj4(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "s")) {
+                if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "s"))) { cJSON_DeleteObj4(x); return NULL; }
+                x->s = cJSON_GetSValue(cJSON_GetObjectItemCaseSensitive(j, "s"));
+                if (NULL == x->s) { cJSON_DeleteObj4(x); return NULL; }
+            }
             if (!cJSON_HasObjectItem(j, "sbyte")) { cJSON_DeleteObj4(x); return NULL; }
             if (cJSON_HasObjectItem(j, "sbyte")) {
                 if (!cJSON_IsObject(cJSON_GetObjectItemCaseSensitive(j, "sbyte"))) { cJSON_DeleteObj4(x); return NULL; }
@@ -16820,6 +16881,7 @@ cJSON * cJSON_CreateObj4(const struct Obj4 * x) {
             cJSON_AddItemToObject(j, "retain", cJSON_CreateRetain(x->retain));
             cJSON_AddItemToObject(j, "rethrows", cJSON_CreateRethrows(x->rethrows));
             cJSON_AddItemToObject(j, "right", cJSON_CreateRight(x->right));
+            cJSON_AddItemToObject(j, "s", cJSON_CreateS(x->s));
             cJSON_AddItemToObject(j, "sbyte", cJSON_CreateSbyte(x->sbyte));
             cJSON_AddItemToObject(j, "sealed", cJSON_CreateSealed(x->sealed));
             cJSON_AddItemToObject(j, "SEL", cJSON_CreateSel(x->sel));
@@ -16981,6 +17043,9 @@ void cJSON_DeleteObj4(struct Obj4 * x) {
         if (NULL != x->right) {
             cJSON_DeleteRight(x->right);
         }
+        if (NULL != x->s) {
+            cJSON_DeleteS(x->s);
+        }
         if (NULL != x->sbyte) {
             cJSON_DeleteSbyte(x->sbyte);
         }
diff --git a/base/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.h b/head/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.h
index 42b25a3..a3eabe3 100644
--- a/base/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.h
+++ b/head/cjson/test/inputs/json/priority/keywords.json/default/TopLevel.h
@@ -1181,6 +1181,10 @@ struct Right {
     int64_t right;
 };
 
+struct S {
+    int64_t s;
+};
+
 struct Sbyte {
     int64_t sbyte;
 };
@@ -1322,6 +1326,7 @@ struct Obj4 {
     struct Retain * retain;
     struct Rethrows * rethrows;
     struct Right * right;
+    struct S * s;
     struct Sbyte * sbyte;
     struct Sealed * sealed;
     struct Sel * sel;
@@ -2884,6 +2889,12 @@ cJSON * cJSON_CreateRight(const struct Right * x);
 char * cJSON_PrintRight(const struct Right * x);
 void cJSON_DeleteRight(struct Right * x);
 
+struct S * cJSON_ParseS(const char * s);
+struct S * cJSON_GetSValue(const cJSON * j);
+cJSON * cJSON_CreateS(const struct S * x);
+char * cJSON_PrintS(const struct S * x);
+void cJSON_DeleteS(struct S * x);
+
 struct Sbyte * cJSON_ParseSbyte(const char * s);
 struct Sbyte * cJSON_GetSbyteValue(const cJSON * j);
 cJSON * cJSON_CreateSbyte(const struct Sbyte * x);
diff --git a/head/cjson/test/inputs/json/samples/copy-with-property.json/default/TopLevel.c b/head/cjson/test/inputs/json/samples/copy-with-property.json/default/TopLevel.c
new file mode 100644
index 0000000..9925ff1
--- /dev/null
+++ b/head/cjson/test/inputs/json/samples/copy-with-property.json/default/TopLevel.c
@@ -0,0 +1,80 @@
+/**
+ * TopLevel.c
+ * This file has been autogenerated using quicktype https://github.com/quicktype/quicktype - DO NOT EDIT
+ */
+
+#include "TopLevel.h"
+
+struct TopLevel * cJSON_ParseTopLevel(const char * s) {
+    struct TopLevel * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetTopLevelValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct TopLevel * cJSON_GetTopLevelValue(const cJSON * j) {
+    struct TopLevel * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct TopLevel)))) {
+            memset(x, 0, sizeof(struct TopLevel));
+            if (!cJSON_HasObjectItem(j, "copyWith")) { cJSON_DeleteTopLevel(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "copyWith")) {
+                if (!quicktype_cJSON_IsInteger(cJSON_GetObjectItemCaseSensitive(j, "copyWith"))) { cJSON_DeleteTopLevel(x); return NULL; }
+                x->copy_with = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "copyWith"));
+            }
+            if (!cJSON_HasObjectItem(j, "name")) { cJSON_DeleteTopLevel(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "name")) {
+                if (!cJSON_IsString(cJSON_GetObjectItemCaseSensitive(j, "name"))) { cJSON_DeleteTopLevel(x); return NULL; }
+                x->name = strdup(cJSON_GetStringValue(cJSON_GetObjectItemCaseSensitive(j, "name")));
+            }
+            else {
+                if (NULL != (x->name = cJSON_malloc(sizeof(char)))) {
+                    x->name[0] = '\0';
+                }
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateTopLevel(const struct TopLevel * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "copyWith", x->copy_with);
+            if (NULL != x->name) {
+                cJSON_AddStringToObject(j, "name", x->name);
+            }
+            else {
+                cJSON_AddStringToObject(j, "name", "");
+            }
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintTopLevel(const struct TopLevel * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateTopLevel(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteTopLevel(struct TopLevel * x) {
+    if (NULL != x) {
+        if (NULL != x->name) {
+            cJSON_free(x->name);
+        }
+        cJSON_free(x);
+    }
+}
diff --git a/head/cjson/test/inputs/json/samples/copy-with-property.json/default/TopLevel.h b/head/cjson/test/inputs/json/samples/copy-with-property.json/default/TopLevel.h
new file mode 100644
index 0000000..72a739a
--- /dev/null
+++ b/head/cjson/test/inputs/json/samples/copy-with-property.json/default/TopLevel.h
@@ -0,0 +1,56 @@
+/**
+ * TopLevel.h
+ * This file has been autogenerated using quicktype https://github.com/quicktype/quicktype - DO NOT EDIT
+ * This file depends of https://github.com/DaveGamble/cJSON, https://github.com/joelguittet/c-list and https://github.com/joelguittet/c-hashtable
+ * To parse json data from json string use the following: struct <type> * data = cJSON_Parse<type>(<string>);
+ * To get json data from cJSON object use the following: struct <type> * data = cJSON_Get<type>Value(<cjson>);
+ * To get cJSON object from json data use the following: cJSON * cjson = cJSON_Create<type>(<data>);
+ * To print json string from json data use the following: char * string = cJSON_Print<type>(<data>);
+ * To delete json data use the following: cJSON_Delete<type>(<data>);
+ */
+
+#ifndef __TOPLEVEL_H__
+#define __TOPLEVEL_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+#include <regex.h>
+#include <cJSON.h>
+#include <hashtable.h>
+#include <list.h>
+
+#define quicktype_cJSON_Duplicate(j) cJSON_Duplicate(j, true)
+#define cJSON_Integer (1 << 18)
+#define quicktype_cJSON_IsInteger(j) (cJSON_IsNumber(j) && (j)->valuedouble == (int64_t)(j)->valuedouble)
+#ifndef cJSON_Bool
+#define cJSON_Bool (cJSON_True | cJSON_False)
+#endif
+#ifndef cJSON_Map
+#define cJSON_Map (1 << 16)
+#endif
+#ifndef cJSON_Enum
+#define cJSON_Enum (1 << 17)
+#endif
+
+struct TopLevel {
+    int64_t copy_with;
+    char * name;
+};
+
+struct TopLevel * cJSON_ParseTopLevel(const char * s);
+struct TopLevel * cJSON_GetTopLevelValue(const cJSON * j);
+cJSON * cJSON_CreateTopLevel(const struct TopLevel * x);
+char * cJSON_PrintTopLevel(const struct TopLevel * x);
+void cJSON_DeleteTopLevel(struct TopLevel * x);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TOPLEVEL_H__ */
diff --git a/head/cjson/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.c b/head/cjson/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.c
new file mode 100644
index 0000000..7d645e8
--- /dev/null
+++ b/head/cjson/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.c
@@ -0,0 +1,130 @@
+/**
+ * TopLevel.c
+ * This file has been autogenerated using quicktype https://github.com/quicktype/quicktype - DO NOT EDIT
+ */
+
+#include "TopLevel.h"
+
+enum Value cJSON_GetValueValue(const cJSON * j) {
+    enum Value x = 0;
+    if (NULL != j) {
+        if (!strcmp(cJSON_GetStringValue(j), "c0\001\033\037")) x = VALUE_C0;
+        else if (!strcmp(cJSON_GetStringValue(j), "c1\177\302\200\302\205\302\237")) x = VALUE_C1;
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateValue(const enum Value x) {
+    cJSON * j = NULL;
+    switch (x) {
+        case VALUE_C0: j = cJSON_CreateString("c0\001\033\037"); break;
+        case VALUE_C1: j = cJSON_CreateString("c1\177\302\200\302\205\302\237"); break;
+    }
+    return j;
+}
+
+struct TopLevel * cJSON_ParseTopLevel(const char * s) {
+    struct TopLevel * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetTopLevelValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct TopLevel * cJSON_GetTopLevelValue(const cJSON * j) {
+    struct TopLevel * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct TopLevel)))) {
+            memset(x, 0, sizeof(struct TopLevel));
+            if (!cJSON_HasObjectItem(j, "literal")) { cJSON_DeleteTopLevel(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "literal")) {
+                if (!cJSON_IsString(cJSON_GetObjectItemCaseSensitive(j, "literal"))) { cJSON_DeleteTopLevel(x); return NULL; }
+                x->literal = strdup(cJSON_GetStringValue(cJSON_GetObjectItemCaseSensitive(j, "literal")));
+            }
+            else {
+                if (NULL != (x->literal = cJSON_malloc(sizeof(char)))) {
+                    x->literal[0] = '\0';
+                }
+            }
+            if (!cJSON_HasObjectItem(j, "values")) { cJSON_DeleteTopLevel(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "values")) {
+                if (!cJSON_IsArray(cJSON_GetObjectItemCaseSensitive(j, "values"))) { cJSON_DeleteTopLevel(x); return NULL; }
+                list_t * x1 = list_create(false, NULL);
+                if (NULL != x1) {
+                    cJSON * e1 = NULL;
+                    cJSON * j1 = cJSON_GetObjectItemCaseSensitive(j, "values");
+                    cJSON_ArrayForEach(e1, j1) {
+                        enum Value * tmp = cJSON_malloc(sizeof(enum Value));
+                        if (NULL != tmp) {
+                            * tmp = cJSON_GetValueValue(e1);
+                            list_add_tail(x1, tmp, sizeof(enum Value *));
+                        }
+                    }
+                    x->values = x1;
+                }
+            }
+            else {
+                x->values = list_create(false, NULL);
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateTopLevel(const struct TopLevel * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            if (NULL != x->literal) {
+                cJSON_AddStringToObject(j, "literal", x->literal);
+            }
+            else {
+                cJSON_AddStringToObject(j, "literal", "");
+            }
+            if (NULL != x->values) {
+                cJSON * j1 = cJSON_AddArrayToObject(j, "values");
+                if (NULL != j1) {
+                    enum Value * x1 = list_get_head(x->values);
+                    while (NULL != x1) {
+                        cJSON_AddItemToArray(j1, cJSON_CreateValue(*x1));
+                        x1 = list_get_next(x->values);
+                    }
+                }
+            }
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintTopLevel(const struct TopLevel * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateTopLevel(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteTopLevel(struct TopLevel * x) {
+    if (NULL != x) {
+        if (NULL != x->literal) {
+            cJSON_free(x->literal);
+        }
+        if (NULL != x->values) {
+            enum Value * x1 = list_get_head(x->values);
+            while (NULL != x1) {
+                cJSON_free(x1);
+                x1 = list_get_next(x->values);
+            }
+            list_release(x->values);
+        }
+        cJSON_free(x);
+    }
+}
diff --git a/head/cjson/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.h b/head/cjson/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.h
new file mode 100644
index 0000000..9e7df70
--- /dev/null
+++ b/head/cjson/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.h
@@ -0,0 +1,64 @@
+/**
+ * TopLevel.h
+ * This file has been autogenerated using quicktype https://github.com/quicktype/quicktype - DO NOT EDIT
+ * This file depends of https://github.com/DaveGamble/cJSON, https://github.com/joelguittet/c-list and https://github.com/joelguittet/c-hashtable
+ * To parse json data from json string use the following: struct <type> * data = cJSON_Parse<type>(<string>);
+ * To get json data from cJSON object use the following: struct <type> * data = cJSON_Get<type>Value(<cjson>);
+ * To get cJSON object from json data use the following: cJSON * cjson = cJSON_Create<type>(<data>);
+ * To print json string from json data use the following: char * string = cJSON_Print<type>(<data>);
+ * To delete json data use the following: cJSON_Delete<type>(<data>);
+ */
+
+#ifndef __TOPLEVEL_H__
+#define __TOPLEVEL_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+#include <regex.h>
+#include <cJSON.h>
+#include <hashtable.h>
+#include <list.h>
+
+#define quicktype_cJSON_Duplicate(j) cJSON_Duplicate(j, true)
+#define cJSON_Integer (1 << 18)
+#define quicktype_cJSON_IsInteger(j) (cJSON_IsNumber(j) && (j)->valuedouble == (int64_t)(j)->valuedouble)
+#ifndef cJSON_Bool
+#define cJSON_Bool (cJSON_True | cJSON_False)
+#endif
+#ifndef cJSON_Map
+#define cJSON_Map (1 << 16)
+#endif
+#ifndef cJSON_Enum
+#define cJSON_Enum (1 << 17)
+#endif
+
+enum Value {
+    VALUE_C0 = 1,
+    VALUE_C1,
+};
+
+struct TopLevel {
+    char * literal;
+    list_t * values;
+};
+
+enum Value cJSON_GetValueValue(const cJSON * j);
+cJSON * cJSON_CreateValue(const enum Value x);
+
+struct TopLevel * cJSON_ParseTopLevel(const char * s);
+struct TopLevel * cJSON_GetTopLevelValue(const cJSON * j);
+cJSON * cJSON_CreateTopLevel(const struct TopLevel * x);
+char * cJSON_PrintTopLevel(const struct TopLevel * x);
+void cJSON_DeleteTopLevel(struct TopLevel * x);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TOPLEVEL_H__ */
diff --git a/base/comment-injection-typescript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.ts b/head/comment-injection-typescript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.ts
index b5db30e..5ea43d9 100644
--- a/base/comment-injection-typescript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.ts
+++ b/head/comment-injection-typescript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.ts
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/comment-injection-typescript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.ts b/head/comment-injection-typescript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.ts
index 2efa565..e3731c5 100644
--- a/base/comment-injection-typescript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.ts
+++ b/head/comment-injection-typescript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.ts
@@ -155,7 +155,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/comment-injection-typescript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.ts b/head/comment-injection-typescript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.ts
index f804896..6f0ae2d 100644
--- a/base/comment-injection-typescript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.ts
+++ b/head/comment-injection-typescript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.ts
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/comment-injection-typescript/test/inputs/schema/comment-injection.schema/default/TopLevel.ts b/head/comment-injection-typescript/test/inputs/schema/comment-injection.schema/default/TopLevel.ts
index 615f083..4a0a168 100644
--- a/base/comment-injection-typescript/test/inputs/schema/comment-injection.schema/default/TopLevel.ts
+++ b/head/comment-injection-typescript/test/inputs/schema/comment-injection.schema/default/TopLevel.ts
@@ -175,7 +175,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/cplusplus/test/inputs/json/priority/keywords.json/default/quicktype.hpp b/head/cplusplus/test/inputs/json/priority/keywords.json/default/quicktype.hpp
index c3aa09a..07becbf 100644
--- a/base/cplusplus/test/inputs/json/priority/keywords.json/default/quicktype.hpp
+++ b/head/cplusplus/test/inputs/json/priority/keywords.json/default/quicktype.hpp
@@ -4310,6 +4310,20 @@ namespace quicktype {
         void set_right(const int64_t & value) { this->right = value; }
     };
 
+    class S {
+        public:
+        S() = default;
+        virtual ~S() = default;
+
+        private:
+        int64_t s;
+
+        public:
+        const int64_t & get_s() const { return s; }
+        int64_t & get_mutable_s() { return s; }
+        void set_s(const int64_t & value) { this->s = value; }
+    };
+
     class Sbyte {
         public:
         Sbyte() = default;
@@ -4719,6 +4733,7 @@ namespace quicktype {
         Retain retain;
         Rethrows rethrows;
         Right right;
+        S s;
         Sbyte sbyte;
         Sealed sealed;
         Sel sel;
@@ -4903,6 +4918,10 @@ namespace quicktype {
         Right & get_mutable_right() { return right; }
         void set_right(const Right & value) { this->right = value; }
 
+        const S & get_s() const { return s; }
+        S & get_mutable_s() { return s; }
+        void set_s(const S & value) { this->s = value; }
+
         const Sbyte & get_sbyte() const { return sbyte; }
         Sbyte & get_mutable_sbyte() { return sbyte; }
         void set_sbyte(const Sbyte & value) { this->sbyte = value; }
@@ -6151,6 +6170,9 @@ namespace quicktype {
     void from_json(const json & j, Right & x);
     void to_json(json & j, const Right & x);
 
+    void from_json(const json & j, S & x);
+    void to_json(json & j, const S & x);
+
     void from_json(const json & j, Sbyte & x);
     void to_json(json & j, const Sbyte & x);
 
@@ -9284,6 +9306,17 @@ namespace quicktype {
         j["right"] = x.get_right();
     }
 
+    inline void from_json(const json & j, S& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("s") != j.end() && !j.at("s").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_s(j.at("s").get<int64_t>());
+    }
+
+    inline void to_json(json & j, const S & x) {
+        j = json::object();
+        j["s"] = x.get_s();
+    }
+
     inline void from_json(const json & j, Sbyte& x) {
         if (!j.is_object()) throw std::runtime_error("Expected object");
         if (j.find("sbyte") != j.end() && !j.at("sbyte").is_number_integer()) throw std::runtime_error("Expected integer");
@@ -9612,6 +9645,7 @@ namespace quicktype {
         x.set_retain(j.at("retain").get<Retain>());
         x.set_rethrows(j.at("rethrows").get<Rethrows>());
         x.set_right(j.at("right").get<Right>());
+        x.set_s(j.at("s").get<S>());
         x.set_sbyte(j.at("sbyte").get<Sbyte>());
         x.set_sealed(j.at("sealed").get<Sealed>());
         x.set_sel(j.at("SEL").get<Sel>());
@@ -9681,6 +9715,7 @@ namespace quicktype {
         j["retain"] = x.get_retain();
         j["rethrows"] = x.get_rethrows();
         j["right"] = x.get_right();
+        j["s"] = x.get_s();
         j["sbyte"] = x.get_sbyte();
         j["sealed"] = x.get_sealed();
         j["SEL"] = x.get_sel();
diff --git a/head/cplusplus/test/inputs/json/samples/copy-with-property.json/default/quicktype.hpp b/head/cplusplus/test/inputs/json/samples/copy-with-property.json/default/quicktype.hpp
new file mode 100644
index 0000000..0bf1bd6
--- /dev/null
+++ b/head/cplusplus/test/inputs/json/samples/copy-with-property.json/default/quicktype.hpp
@@ -0,0 +1,70 @@
+//  To parse this JSON data, first install
+//
+//      json.hpp  https://github.com/nlohmann/json
+//
+//  Then include this file, and then do
+//
+//     TopLevel data = nlohmann::json::parse(jsonString);
+
+#pragma once
+
+#include "json.hpp"
+
+#include <optional>
+#include <stdexcept>
+#include <regex>
+
+namespace quicktype {
+    using nlohmann::json;
+
+    #ifndef NLOHMANN_UNTYPED_quicktype_HELPER
+    #define NLOHMANN_UNTYPED_quicktype_HELPER
+    inline json get_untyped(const json & j, const char * property) {
+        if (j.find(property) != j.end()) {
+            return j.at(property).get<json>();
+        }
+        return json();
+    }
+
+    inline json get_untyped(const json & j, std::string property) {
+        return get_untyped(j, property.data());
+    }
+    #endif
+
+    class TopLevel {
+        public:
+        TopLevel() = default;
+        virtual ~TopLevel() = default;
+
+        private:
+        int64_t copy_with;
+        std::string name;
+
+        public:
+        const int64_t & get_copy_with() const { return copy_with; }
+        int64_t & get_mutable_copy_with() { return copy_with; }
+        void set_copy_with(const int64_t & value) { this->copy_with = value; }
+
+        const std::string & get_name() const { return name; }
+        std::string & get_mutable_name() { return name; }
+        void set_name(const std::string & value) { this->name = value; }
+    };
+}
+
+namespace quicktype {
+    void from_json(const json & j, TopLevel & x);
+    void to_json(json & j, const TopLevel & x);
+
+    inline void from_json(const json & j, TopLevel& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        if (j.find("copyWith") != j.end() && !j.at("copyWith").is_number_integer()) throw std::runtime_error("Expected integer");
+        x.set_copy_with(j.at("copyWith").get<int64_t>());
+        x.set_name(j.at("name").get<std::string>());
+    }
+
+    inline void to_json(json & j, const TopLevel & x) {
+        j = json::object();
+        j["copyWith"] = x.get_copy_with();
+        j["name"] = x.get_name();
+    }
+}
diff --git a/head/cplusplus/test/inputs/json/samples/objc-control-characters.json/default/quicktype.hpp b/head/cplusplus/test/inputs/json/samples/objc-control-characters.json/default/quicktype.hpp
new file mode 100644
index 0000000..d28e4b5
--- /dev/null
+++ b/head/cplusplus/test/inputs/json/samples/objc-control-characters.json/default/quicktype.hpp
@@ -0,0 +1,88 @@
+//  To parse this JSON data, first install
+//
+//      json.hpp  https://github.com/nlohmann/json
+//
+//  Then include this file, and then do
+//
+//     TopLevel data = nlohmann::json::parse(jsonString);
+
+#pragma once
+
+#include "json.hpp"
+
+#include <optional>
+#include <stdexcept>
+#include <regex>
+
+namespace quicktype {
+    using nlohmann::json;
+
+    #ifndef NLOHMANN_UNTYPED_quicktype_HELPER
+    #define NLOHMANN_UNTYPED_quicktype_HELPER
+    inline json get_untyped(const json & j, const char * property) {
+        if (j.find(property) != j.end()) {
+            return j.at(property).get<json>();
+        }
+        return json();
+    }
+
+    inline json get_untyped(const json & j, std::string property) {
+        return get_untyped(j, property.data());
+    }
+    #endif
+
+    enum class Value : int { C0, C1 };
+
+    class TopLevel {
+        public:
+        TopLevel() = default;
+        virtual ~TopLevel() = default;
+
+        private:
+        std::string literal;
+        std::vector<Value> values;
+
+        public:
+        const std::string & get_literal() const { return literal; }
+        std::string & get_mutable_literal() { return literal; }
+        void set_literal(const std::string & value) { this->literal = value; }
+
+        const std::vector<Value> & get_values() const { return values; }
+        std::vector<Value> & get_mutable_values() { return values; }
+        void set_values(const std::vector<Value> & value) { this->values = value; }
+    };
+}
+
+namespace quicktype {
+    void from_json(const json & j, TopLevel & x);
+    void to_json(json & j, const TopLevel & x);
+
+    void from_json(const json & j, Value & x);
+    void to_json(json & j, const Value & x);
+
+    inline void from_json(const json & j, TopLevel& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        x.set_literal(j.at("literal").get<std::string>());
+        x.set_values(j.at("values").get<std::vector<Value>>());
+    }
+
+    inline void to_json(json & j, const TopLevel & x) {
+        j = json::object();
+        j["literal"] = x.get_literal();
+        j["values"] = x.get_values();
+    }
+
+    inline void from_json(const json & j, Value & x) {
+        if (j == "c0\u0001\u001b\u001f") x = Value::C0;
+        else if (j == "c1\u007f\u0080\u0085\u009f") x = Value::C1;
+        else { throw std::runtime_error("Cannot deserialize to enumeration \"Value\""); }
+    }
+
+    inline void to_json(json & j, const Value & x) {
+        switch (x) {
+            case Value::C0: j = "c0\u0001\u001b\u001f"; break;
+            case Value::C1: j = "c1\u007f\u0080\u0085\u009f"; break;
+            default: throw std::runtime_error("Unexpected value in enumeration \"Value\": " + std::to_string(static_cast<int>(x)));
+        }
+    }
+}
diff --git a/base/crystal/test/inputs/json/priority/keywords.json/default/TopLevel.cr b/head/crystal/test/inputs/json/priority/keywords.json/default/TopLevel.cr
index b92d91e..2667c39 100644
--- a/base/crystal/test/inputs/json/priority/keywords.json/default/TopLevel.cr
+++ b/head/crystal/test/inputs/json/priority/keywords.json/default/TopLevel.cr
@@ -1755,6 +1755,8 @@ class Obj4
 
   property right : Right
 
+  property s : S
+
   property sbyte : Sbyte
 
   property sealed : Sealed
@@ -2020,6 +2022,12 @@ class Right
   property right : Int64
 end
 
+class S
+  include JSON::Serializable
+
+  property s : Int64
+end
+
 class Sbyte
   include JSON::Serializable
 
diff --git a/head/crystal/test/inputs/json/samples/copy-with-property.json/default/TopLevel.cr b/head/crystal/test/inputs/json/samples/copy-with-property.json/default/TopLevel.cr
new file mode 100644
index 0000000..cf21dc0
--- /dev/null
+++ b/head/crystal/test/inputs/json/samples/copy-with-property.json/default/TopLevel.cr
@@ -0,0 +1,10 @@
+require "json"
+
+class TopLevel
+  include JSON::Serializable
+
+  @[JSON::Field(key: "copyWith")]
+  property copy_with : Int64
+
+  property name : String
+end
diff --git a/head/crystal/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.cr b/head/crystal/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.cr
new file mode 100644
index 0000000..21467e4
--- /dev/null
+++ b/head/crystal/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.cr
@@ -0,0 +1,9 @@
+require "json"
+
+class TopLevel
+  include JSON::Serializable
+
+  property literal : String
+
+  property values : Array(String)
+end
diff --git a/base/csharp/test/inputs/json/priority/keywords.json/default/QuickType.cs b/head/csharp/test/inputs/json/priority/keywords.json/default/QuickType.cs
index dd675f2..d88524a 100644
--- a/base/csharp/test/inputs/json/priority/keywords.json/default/QuickType.cs
+++ b/head/csharp/test/inputs/json/priority/keywords.json/default/QuickType.cs
@@ -1885,6 +1885,9 @@ namespace QuickType
         [JsonProperty("right", Required = Required.Always)]
         public Right Right { get; set; }
 
+        [JsonProperty("s", Required = Required.Always)]
+        public S S { get; set; }
+
         [JsonProperty("sbyte", Required = Required.Always)]
         public Sbyte Sbyte { get; set; }
 
@@ -2141,6 +2144,12 @@ namespace QuickType
         public long RightRight { get; set; }
     }
 
+    public partial class S
+    {
+        [JsonProperty("s", Required = Required.Always)]
+        public long SS { get; set; }
+    }
+
     public partial class Sbyte
     {
         [JsonProperty("sbyte", Required = Required.Always)]
diff --git a/head/csharp/test/inputs/json/samples/copy-with-property.json/default/QuickType.cs b/head/csharp/test/inputs/json/samples/copy-with-property.json/default/QuickType.cs
new file mode 100644
index 0000000..9f84e3c
--- /dev/null
+++ b/head/csharp/test/inputs/json/samples/copy-with-property.json/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial class TopLevel
+    {
+        [JsonProperty("copyWith", Required = Required.Always)]
+        public long CopyWith { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial class TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp/test/inputs/json/samples/objc-control-characters.json/default/QuickType.cs b/head/csharp/test/inputs/json/samples/objc-control-characters.json/default/QuickType.cs
new file mode 100644
index 0000000..b115800
--- /dev/null
+++ b/head/csharp/test/inputs/json/samples/objc-control-characters.json/default/QuickType.cs
@@ -0,0 +1,108 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial class TopLevel
+    {
+        [JsonProperty("literal", Required = Required.Always)]
+        public string Literal { get; set; }
+
+        [JsonProperty("values", Required = Required.Always)]
+        public Value[] Values { get; set; }
+    }
+
+    public enum Value { C0, C1 };
+
+    public partial class TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                ValueConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ValueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Value) || t == typeof(Value?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "c0\u0001\u001b\u001f":
+                    return Value.C0;
+                case "c1\u007f\u0080\u0085\u009f":
+                    return Value.C1;
+            }
+            throw new Exception("Cannot unmarshal type Value");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Value)untypedValue;
+            switch (value)
+            {
+                case Value.C0:
+                    serializer.Serialize(writer, "c0\u0001\u001b\u001f");
+                    return;
+                case Value.C1:
+                    serializer.Serialize(writer, "c1\u007f\u0080\u0085\u009f");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Value");
+        }
+
+        public static readonly ValueConverter Singleton = new ValueConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/base/csharp-SystemTextJson/test/inputs/json/priority/keywords.json/default/QuickType.cs b/head/csharp-SystemTextJson/test/inputs/json/priority/keywords.json/default/QuickType.cs
index eed1117..1e333ba 100644
--- a/base/csharp-SystemTextJson/test/inputs/json/priority/keywords.json/default/QuickType.cs
+++ b/head/csharp-SystemTextJson/test/inputs/json/priority/keywords.json/default/QuickType.cs
@@ -2303,6 +2303,10 @@ namespace QuickType
         [JsonPropertyName("right")]
         public Right Right { get; set; }
 
+        [JsonRequired]
+        [JsonPropertyName("s")]
+        public S S { get; set; }
+
         [JsonRequired]
         [JsonPropertyName("sbyte")]
         public Sbyte Sbyte { get; set; }
@@ -2623,6 +2627,13 @@ namespace QuickType
         public long RightRight { get; set; }
     }
 
+    public partial class S
+    {
+        [JsonRequired]
+        [JsonPropertyName("s")]
+        public long SS { get; set; }
+    }
+
     public partial class Sbyte
     {
         [JsonRequired]
diff --git a/head/csharp-SystemTextJson/test/inputs/json/samples/copy-with-property.json/default/QuickType.cs b/head/csharp-SystemTextJson/test/inputs/json/samples/copy-with-property.json/default/QuickType.cs
new file mode 100644
index 0000000..fbca3e8
--- /dev/null
+++ b/head/csharp-SystemTextJson/test/inputs/json/samples/copy-with-property.json/default/QuickType.cs
@@ -0,0 +1,170 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'System.Text.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Text.Json;
+    using System.Text.Json.Serialization;
+    using System.Globalization;
+
+    public partial class TopLevel
+    {
+        [JsonRequired]
+        [JsonPropertyName("copyWith")]
+        public long CopyWith { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("name")]
+        public string Name { get; set; }
+    }
+
+    public partial class TopLevel
+    {
+        public static TopLevel FromJson(string json) => global::System.Text.Json.JsonSerializer.Deserialize<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonSerializer.Serialize(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerOptions Settings = new(JsonSerializerDefaults.General)
+        {
+            Converters =
+            {
+                new DateOnlyConverter(),
+                new TimeOnlyConverter(),
+                IsoDateTimeOffsetConverter.Singleton
+            },
+        };
+    }
+    
+    public class DateOnlyConverter : JsonConverter<DateOnly>
+    {
+        private readonly string serializationFormat;
+        public DateOnlyConverter() : this(null) { }
+
+        public DateOnlyConverter(string? serializationFormat)
+        {
+                this.serializationFormat = serializationFormat ?? "yyyy-MM-dd";
+        }
+
+        public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                var value = reader.GetString();
+                return DateOnly.Parse(value!);
+        }
+
+        public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options)
+                => writer.WriteStringValue(value.ToString(serializationFormat));
+    }
+
+    public class TimeOnlyConverter : JsonConverter<TimeOnly>
+    {
+        private readonly string serializationFormat;
+
+        public TimeOnlyConverter() : this(null) { }
+
+        public TimeOnlyConverter(string? serializationFormat)
+        {
+                this.serializationFormat = serializationFormat ?? "HH:mm:ss.fff";
+        }
+
+        public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                var value = reader.GetString();
+                return TimeOnly.Parse(value!);
+        }
+
+        public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options)
+                => writer.WriteStringValue(value.ToString(serializationFormat));
+    }
+
+    internal class IsoDateTimeOffsetConverter : JsonConverter<DateTimeOffset>
+    {
+        public override bool CanConvert(Type t) => t == typeof(DateTimeOffset);
+
+        private const string DefaultDateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK";
+
+        private DateTimeStyles _dateTimeStyles = DateTimeStyles.RoundtripKind;
+        private string? _dateTimeFormat;
+        private CultureInfo? _culture;
+
+        public DateTimeStyles DateTimeStyles
+        {
+                get => _dateTimeStyles;
+                set => _dateTimeStyles = value;
+        }
+
+        public string? DateTimeFormat
+        {
+                get => _dateTimeFormat ?? string.Empty;
+                set => _dateTimeFormat = (string.IsNullOrEmpty(value)) ? null : value;
+        }
+
+        public CultureInfo Culture
+        {
+                get => _culture ?? CultureInfo.CurrentCulture;
+                set => _culture = value;
+        }
+
+        public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options)
+        {
+                string text;
+
+
+                if ((_dateTimeStyles & DateTimeStyles.AdjustToUniversal) == DateTimeStyles.AdjustToUniversal
+                        || (_dateTimeStyles & DateTimeStyles.AssumeUniversal) == DateTimeStyles.AssumeUniversal)
+                {
+                        value = value.ToUniversalTime();
+                }
+
+                text = value.ToString(_dateTimeFormat ?? DefaultDateTimeFormat, Culture);
+
+                writer.WriteStringValue(text);
+        }
+
+        public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                string? dateText = reader.GetString();
+
+                if (string.IsNullOrEmpty(dateText) == false)
+                {
+                        if (!string.IsNullOrEmpty(_dateTimeFormat))
+                        {
+                                return DateTimeOffset.ParseExact(dateText, _dateTimeFormat, Culture, _dateTimeStyles);
+                        }
+                        else
+                        {
+                                return DateTimeOffset.Parse(dateText, Culture, _dateTimeStyles);
+                        }
+                }
+                else
+                {
+                        return default(DateTimeOffset);
+                }
+        }
+
+
+        public static readonly IsoDateTimeOffsetConverter Singleton = new IsoDateTimeOffsetConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
diff --git a/head/csharp-SystemTextJson/test/inputs/json/samples/objc-control-characters.json/default/QuickType.cs b/head/csharp-SystemTextJson/test/inputs/json/samples/objc-control-characters.json/default/QuickType.cs
new file mode 100644
index 0000000..77687c5
--- /dev/null
+++ b/head/csharp-SystemTextJson/test/inputs/json/samples/objc-control-characters.json/default/QuickType.cs
@@ -0,0 +1,207 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'System.Text.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Text.Json;
+    using System.Text.Json.Serialization;
+    using System.Globalization;
+
+    public partial class TopLevel
+    {
+        [JsonRequired]
+        [JsonPropertyName("literal")]
+        public string Literal { get; set; }
+
+        [JsonRequired]
+        [JsonPropertyName("values")]
+        public Value[] Values { get; set; }
+    }
+
+    public enum Value { C0, C1 };
+
+    public partial class TopLevel
+    {
+        public static TopLevel FromJson(string json) => global::System.Text.Json.JsonSerializer.Deserialize<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonSerializer.Serialize(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerOptions Settings = new(JsonSerializerDefaults.General)
+        {
+            Converters =
+            {
+                ValueConverter.Singleton,
+                new DateOnlyConverter(),
+                new TimeOnlyConverter(),
+                IsoDateTimeOffsetConverter.Singleton
+            },
+        };
+    }
+
+    internal class ValueConverter : JsonConverter<Value>
+    {
+        public override bool CanConvert(Type t) => t == typeof(Value);
+
+        public override Value Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetString();
+            switch (value)
+            {
+                case "c0\u0001\u001b\u001f":
+                    return Value.C0;
+                case "c1\u007f\u0080\u0085\u009f":
+                    return Value.C1;
+            }
+            throw new JsonException("Cannot unmarshal type Value");
+        }
+
+        public override void Write(Utf8JsonWriter writer, Value value, JsonSerializerOptions options)
+        {
+            switch (value)
+            {
+                case Value.C0:
+                    JsonSerializer.Serialize(writer, "c0\u0001\u001b\u001f", options);
+                    return;
+                case Value.C1:
+                    JsonSerializer.Serialize(writer, "c1\u007f\u0080\u0085\u009f", options);
+                    return;
+            }
+            throw new NotSupportedException("Cannot marshal type Value");
+        }
+
+        public static readonly ValueConverter Singleton = new ValueConverter();
+    }
+    
+    public class DateOnlyConverter : JsonConverter<DateOnly>
+    {
+        private readonly string serializationFormat;
+        public DateOnlyConverter() : this(null) { }
+
+        public DateOnlyConverter(string? serializationFormat)
+        {
+                this.serializationFormat = serializationFormat ?? "yyyy-MM-dd";
+        }
+
+        public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                var value = reader.GetString();
+                return DateOnly.Parse(value!);
+        }
+
+        public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options)
+                => writer.WriteStringValue(value.ToString(serializationFormat));
+    }
+
+    public class TimeOnlyConverter : JsonConverter<TimeOnly>
+    {
+        private readonly string serializationFormat;
+
+        public TimeOnlyConverter() : this(null) { }
+
+        public TimeOnlyConverter(string? serializationFormat)
+        {
+                this.serializationFormat = serializationFormat ?? "HH:mm:ss.fff";
+        }
+
+        public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                var value = reader.GetString();
+                return TimeOnly.Parse(value!);
+        }
+
+        public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options)
+                => writer.WriteStringValue(value.ToString(serializationFormat));
+    }
+
+    internal class IsoDateTimeOffsetConverter : JsonConverter<DateTimeOffset>
+    {
+        public override bool CanConvert(Type t) => t == typeof(DateTimeOffset);
+
+        private const string DefaultDateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK";
+
+        private DateTimeStyles _dateTimeStyles = DateTimeStyles.RoundtripKind;
+        private string? _dateTimeFormat;
+        private CultureInfo? _culture;
+
+        public DateTimeStyles DateTimeStyles
+        {
+                get => _dateTimeStyles;
+                set => _dateTimeStyles = value;
+        }
+
+        public string? DateTimeFormat
+        {
+                get => _dateTimeFormat ?? string.Empty;
+                set => _dateTimeFormat = (string.IsNullOrEmpty(value)) ? null : value;
+        }
+
+        public CultureInfo Culture
+        {
+                get => _culture ?? CultureInfo.CurrentCulture;
+                set => _culture = value;
+        }
+
+        public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options)
+        {
+                string text;
+
+
+                if ((_dateTimeStyles & DateTimeStyles.AdjustToUniversal) == DateTimeStyles.AdjustToUniversal
+                        || (_dateTimeStyles & DateTimeStyles.AssumeUniversal) == DateTimeStyles.AssumeUniversal)
+                {
+                        value = value.ToUniversalTime();
+                }
+
+                text = value.ToString(_dateTimeFormat ?? DefaultDateTimeFormat, Culture);
+
+                writer.WriteStringValue(text);
+        }
+
+        public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                string? dateText = reader.GetString();
+
+                if (string.IsNullOrEmpty(dateText) == false)
+                {
+                        if (!string.IsNullOrEmpty(_dateTimeFormat))
+                        {
+                                return DateTimeOffset.ParseExact(dateText, _dateTimeFormat, Culture, _dateTimeStyles);
+                        }
+                        else
+                        {
+                                return DateTimeOffset.Parse(dateText, Culture, _dateTimeStyles);
+                        }
+                }
+                else
+                {
+                        return default(DateTimeOffset);
+                }
+        }
+
+
+        public static readonly IsoDateTimeOffsetConverter Singleton = new IsoDateTimeOffsetConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
diff --git a/base/csharp-records/test/inputs/json/priority/keywords.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/priority/keywords.json/default/QuickType.cs
index 65c63fd..eec1680 100644
--- a/base/csharp-records/test/inputs/json/priority/keywords.json/default/QuickType.cs
+++ b/head/csharp-records/test/inputs/json/priority/keywords.json/default/QuickType.cs
@@ -1885,6 +1885,9 @@ namespace QuickType
         [JsonProperty("right", Required = Required.Always)]
         public Right Right { get; set; }
 
+        [JsonProperty("s", Required = Required.Always)]
+        public S S { get; set; }
+
         [JsonProperty("sbyte", Required = Required.Always)]
         public Sbyte Sbyte { get; set; }
 
@@ -2141,6 +2144,12 @@ namespace QuickType
         public long RightRight { get; set; }
     }
 
+    public partial record S
+    {
+        [JsonProperty("s", Required = Required.Always)]
+        public long SS { get; set; }
+    }
+
     public partial record Sbyte
     {
         [JsonProperty("sbyte", Required = Required.Always)]
diff --git a/head/csharp-records/test/inputs/json/samples/copy-with-property.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/samples/copy-with-property.json/default/QuickType.cs
new file mode 100644
index 0000000..08a659d
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/samples/copy-with-property.json/default/QuickType.cs
@@ -0,0 +1,64 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("copyWith", Required = Required.Always)]
+        public long CopyWith { get; set; }
+
+        [JsonProperty("name", Required = Required.Always)]
+        public string Name { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/csharp-records/test/inputs/json/samples/objc-control-characters.json/default/QuickType.cs b/head/csharp-records/test/inputs/json/samples/objc-control-characters.json/default/QuickType.cs
new file mode 100644
index 0000000..07f1710
--- /dev/null
+++ b/head/csharp-records/test/inputs/json/samples/objc-control-characters.json/default/QuickType.cs
@@ -0,0 +1,108 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("literal", Required = Required.Always)]
+        public string Literal { get; set; }
+
+        [JsonProperty("values", Required = Required.Always)]
+        public Value[] Values { get; set; }
+    }
+
+    public enum Value { C0, C1 };
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                ValueConverter.Singleton,
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class ValueConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(Value) || t == typeof(Value?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<string>(reader);
+            switch (value)
+            {
+                case "c0\u0001\u001b\u001f":
+                    return Value.C0;
+                case "c1\u007f\u0080\u0085\u009f":
+                    return Value.C1;
+            }
+            throw new Exception("Cannot unmarshal type Value");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (Value)untypedValue;
+            switch (value)
+            {
+                case Value.C0:
+                    serializer.Serialize(writer, "c0\u0001\u001b\u001f");
+                    return;
+                case Value.C1:
+                    serializer.Serialize(writer, "c1\u007f\u0080\u0085\u009f");
+                    return;
+            }
+            throw new Exception("Cannot marshal type Value");
+        }
+
+        public static readonly ValueConverter Singleton = new ValueConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/base/dart/test/inputs/json/misc/0b91a.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/0b91a.json/default/TopLevel.dart
index eba9f87..e6c633a 100644
--- a/base/dart/test/inputs/json/misc/0b91a.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/0b91a.json/default/TopLevel.dart
@@ -142,8 +142,8 @@ class Result {
         title: json["title"],
         topic: List<dynamic>.from(json["topic"].map((x) => x)),
         url: json["url"],
-        uuid: json["uuid"],
-        vuuid: json["vuuid"],
+        uuid: ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(json["uuid"]),
+        vuuid: ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(json["vuuid"]),
     );
 
     Map<String, dynamic> toJson() => {
@@ -175,7 +175,7 @@ class Component {
 
     factory Component.fromJson(Map<String, dynamic> json) => Component(
         name: json["name"],
-        uuid: json["uuid"],
+        uuid: ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(json["uuid"]),
     );
 
     Map<String, dynamic> toJson() => {
diff --git a/base/dart/test/inputs/json/misc/458db.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/458db.json/default/TopLevel.dart
index ac0e1c4..c8831b4 100644
--- a/base/dart/test/inputs/json/misc/458db.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/458db.json/default/TopLevel.dart
@@ -139,8 +139,8 @@ class Result {
         title: json["title"],
         topic: List<dynamic>.from(json["topic"].map((x) => x)),
         url: json["url"],
-        uuid: json["uuid"],
-        vuuid: json["vuuid"],
+        uuid: ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(json["uuid"]),
+        vuuid: ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(json["vuuid"]),
     );
 
     Map<String, dynamic> toJson() => {
@@ -171,7 +171,7 @@ class Component {
 
     factory Component.fromJson(Map<String, dynamic> json) => Component(
         name: nameValues.map[json["name"]]!,
-        uuid: json["uuid"],
+        uuid: ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(json["uuid"]),
     );
 
     Map<String, dynamic> toJson() => {
diff --git a/base/dart/test/inputs/json/misc/6c155.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/6c155.json/default/TopLevel.dart
index 6590fcb..209dfae 100644
--- a/base/dart/test/inputs/json/misc/6c155.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/6c155.json/default/TopLevel.dart
@@ -142,8 +142,8 @@ class Result {
         title: json["title"],
         topic: List<dynamic>.from(json["topic"].map((x) => x)),
         url: json["url"],
-        uuid: json["uuid"],
-        vuuid: json["vuuid"],
+        uuid: ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(json["uuid"]),
+        vuuid: ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(json["vuuid"]),
     );
 
     Map<String, dynamic> toJson() => {
@@ -175,7 +175,7 @@ class Component {
 
     factory Component.fromJson(Map<String, dynamic> json) => Component(
         name: json["name"],
-        uuid: json["uuid"],
+        uuid: ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(json["uuid"]),
     );
 
     Map<String, dynamic> toJson() => {
diff --git a/base/dart/test/inputs/json/misc/dec3a.json/default/TopLevel.dart b/head/dart/test/inputs/json/misc/dec3a.json/default/TopLevel.dart
index 0b5156b..3bd43d7 100644
--- a/base/dart/test/inputs/json/misc/dec3a.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/misc/dec3a.json/default/TopLevel.dart
@@ -166,8 +166,8 @@ class Result {
         title: json["title"],
         travel: json["travel"],
         url: json["url"],
-        uuid: json["uuid"],
-        vuuid: json["vuuid"],
+        uuid: ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(json["uuid"]),
+        vuuid: ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(json["vuuid"]),
     );
 
     Map<String, dynamic> toJson() => {
@@ -207,7 +207,7 @@ class HiringOrg {
 
     factory HiringOrg.fromJson(Map<String, dynamic> json) => HiringOrg(
         name: json["name"],
-        uuid: json["uuid"],
+        uuid: ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(json["uuid"]),
     );
 
     Map<String, dynamic> toJson() => {
diff --git a/head/dart/test/inputs/json/priority/combinations1.json/copy-with-true--bb7e994c05fe/TopLevel.dart b/head/dart/test/inputs/json/priority/combinations1.json/copy-with-true--bb7e994c05fe/TopLevel.dart
new file mode 100644
index 0000000..e1aba1e
--- /dev/null
+++ b/head/dart/test/inputs/json/priority/combinations1.json/copy-with-true--bb7e994c05fe/TopLevel.dart
@@ -0,0 +1,1975 @@
+// To parse this JSON data, do
+//
+//     final topLevel = topLevelFromJson(jsonString);
+
+import 'dart:convert';
+
+TopLevel topLevelFromJson(String str) => TopLevel.fromJson(json.decode(str));
+
+String topLevelToJson(TopLevel data) => json.encode(data.toJson());
+
+class TopLevel {
+    final String centrodesmose;
+    final List<dynamic> cerograph;
+    final List<dynamic> chemotherapeutics;
+    final List<dynamic> cimelia;
+    final int citrated;
+    final List<dynamic> clinodome;
+    final List<dynamic> coadjust;
+    final List<dynamic> consilience;
+    final List<dynamic> constructor;
+    final List<dynamic> continuative;
+    final List<dynamic> credulity;
+    final List<dynamic> creviced;
+    final List<List<int?>> cubiculum;
+    final List<dynamic> deruralize;
+    final List<dynamic> diaereses;
+    final List<List<dynamic>?> dissolution;
+    final List<dynamic> downstroke;
+    final List<double?> electrotautomerism;
+    final List<dynamic> eleutheromania;
+    final Encrust encrust;
+    final List<dynamic> entomoid;
+    final List<dynamic> epipaleolithic;
+    final List<dynamic> expropriable;
+    final List<dynamic> faggingly;
+    final List<dynamic> fenks;
+    final List<dynamic> flagmaking;
+    final List<dynamic> fluorometer;
+    final List<int?> fulsome;
+    final List<dynamic> fuzzy;
+    final List<dynamic> gardenwards;
+    final List<dynamic> generalissimo;
+    final List<Map<String, int>?> habeas;
+    final List<dynamic> hemicrystalline;
+    final List<dynamic> hemocoele;
+    final List<dynamic> hoister;
+    final List<dynamic> hyperpiesis;
+    final List<dynamic> hyppish;
+    final List<dynamic> idealizer;
+    final List<dynamic> incrustator;
+    final List<dynamic> intentiveness;
+    final Interacinar interacinar;
+    final List<List<int>?> intercorrelation;
+    final List<dynamic> jacutinga;
+
+    TopLevel({
+        required this.centrodesmose,
+        required this.cerograph,
+        required this.chemotherapeutics,
+        required this.cimelia,
+        required this.citrated,
+        required this.clinodome,
+        required this.coadjust,
+        required this.consilience,
+        required this.constructor,
+        required this.continuative,
+        required this.credulity,
+        required this.creviced,
+        required this.cubiculum,
+        required this.deruralize,
+        required this.diaereses,
+        required this.dissolution,
+        required this.downstroke,
+        required this.electrotautomerism,
+        required this.eleutheromania,
+        required this.encrust,
+        required this.entomoid,
+        required this.epipaleolithic,
+        required this.expropriable,
+        required this.faggingly,
+        required this.fenks,
+        required this.flagmaking,
+        required this.fluorometer,
+        required this.fulsome,
+        required this.fuzzy,
+        required this.gardenwards,
+        required this.generalissimo,
+        required this.habeas,
+        required this.hemicrystalline,
+        required this.hemocoele,
+        required this.hoister,
+        required this.hyperpiesis,
+        required this.hyppish,
+        required this.idealizer,
+        required this.incrustator,
+        required this.intentiveness,
+        required this.interacinar,
+        required this.intercorrelation,
+        required this.jacutinga,
+    });
+
+    TopLevel copyWith({
+        String? centrodesmose,
+        List<dynamic>? cerograph,
+        List<dynamic>? chemotherapeutics,
+        List<dynamic>? cimelia,
+        int? citrated,
+        List<dynamic>? clinodome,
+        List<dynamic>? coadjust,
+        List<dynamic>? consilience,
+        List<dynamic>? constructor,
+        List<dynamic>? continuative,
+        List<dynamic>? credulity,
+        List<dynamic>? creviced,
+        List<List<int?>>? cubiculum,
+        List<dynamic>? deruralize,
+        List<dynamic>? diaereses,
+        List<List<dynamic>?>? dissolution,
+        List<dynamic>? downstroke,
+        List<double?>? electrotautomerism,
+        List<dynamic>? eleutheromania,
+        Encrust? encrust,
+        List<dynamic>? entomoid,
+        List<dynamic>? epipaleolithic,
+        List<dynamic>? expropriable,
+        List<dynamic>? faggingly,
+        List<dynamic>? fenks,
+        List<dynamic>? flagmaking,
+        List<dynamic>? fluorometer,
+        List<int?>? fulsome,
+        List<dynamic>? fuzzy,
+        List<dynamic>? gardenwards,
+        List<dynamic>? generalissimo,
+        List<Map<String, int>?>? habeas,
+        List<dynamic>? hemicrystalline,
+        List<dynamic>? hemocoele,
+        List<dynamic>? hoister,
+        List<dynamic>? hyperpiesis,
+        List<dynamic>? hyppish,
+        List<dynamic>? idealizer,
+        List<dynamic>? incrustator,
+        List<dynamic>? intentiveness,
+        Interacinar? interacinar,
+        List<List<int>?>? intercorrelation,
+        List<dynamic>? jacutinga,
+    }) => 
+        TopLevel(
+            centrodesmose: centrodesmose ?? this.centrodesmose,
+            cerograph: cerograph ?? this.cerograph,
+            chemotherapeutics: chemotherapeutics ?? this.chemotherapeutics,
+            cimelia: cimelia ?? this.cimelia,
+            citrated: citrated ?? this.citrated,
+            clinodome: clinodome ?? this.clinodome,
+            coadjust: coadjust ?? this.coadjust,
+            consilience: consilience ?? this.consilience,
+            constructor: constructor ?? this.constructor,
+            continuative: continuative ?? this.continuative,
+            credulity: credulity ?? this.credulity,
+            creviced: creviced ?? this.creviced,
+            cubiculum: cubiculum ?? this.cubiculum,
+            deruralize: deruralize ?? this.deruralize,
+            diaereses: diaereses ?? this.diaereses,
+            dissolution: dissolution ?? this.dissolution,
+            downstroke: downstroke ?? this.downstroke,
+            electrotautomerism: electrotautomerism ?? this.electrotautomerism,
+            eleutheromania: eleutheromania ?? this.eleutheromania,
+            encrust: encrust ?? this.encrust,
+            entomoid: entomoid ?? this.entomoid,
+            epipaleolithic: epipaleolithic ?? this.epipaleolithic,
+            expropriable: expropriable ?? this.expropriable,
+            faggingly: faggingly ?? this.faggingly,
+            fenks: fenks ?? this.fenks,
+            flagmaking: flagmaking ?? this.flagmaking,
+            fluorometer: fluorometer ?? this.fluorometer,
+            fulsome: fulsome ?? this.fulsome,
+            fuzzy: fuzzy ?? this.fuzzy,
+            gardenwards: gardenwards ?? this.gardenwards,
+            generalissimo: generalissimo ?? this.generalissimo,
+            habeas: habeas ?? this.habeas,
+            hemicrystalline: hemicrystalline ?? this.hemicrystalline,
+            hemocoele: hemocoele ?? this.hemocoele,
+            hoister: hoister ?? this.hoister,
+            hyperpiesis: hyperpiesis ?? this.hyperpiesis,
+            hyppish: hyppish ?? this.hyppish,
+            idealizer: idealizer ?? this.idealizer,
+            incrustator: incrustator ?? this.incrustator,
+            intentiveness: intentiveness ?? this.intentiveness,
+            interacinar: interacinar ?? this.interacinar,
+            intercorrelation: intercorrelation ?? this.intercorrelation,
+            jacutinga: jacutinga ?? this.jacutinga,
+        );
+
+    factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
+        centrodesmose: json["centrodesmose"],
+        cerograph: List<dynamic>.from(json["cerograph"].map((x) => x)),
+        chemotherapeutics: List<dynamic>.from(json["chemotherapeutics"].map((x) => x)),
+        cimelia: List<dynamic>.from(json["cimelia"].map((x) => x)),
+        citrated: json["citrated"],
+        clinodome: List<dynamic>.from(json["clinodome"].map((x) => x)),
+        coadjust: List<dynamic>.from(json["coadjust"].map((x) => x)),
+        consilience: List<dynamic>.from(json["consilience"].map((x) => x)),
+        constructor: List<dynamic>.from(json["constructor"].map((x) => x)),
+        continuative: List<dynamic>.from(json["continuative"].map((x) => x)),
+        credulity: List<dynamic>.from(json["credulity"].map((x) => x)),
+        creviced: List<dynamic>.from(json["creviced"].map((x) => x)),
+        cubiculum: List<List<int?>>.from(json["cubiculum"].map((x) => List<int?>.from(x.map((x) => x)))),
+        deruralize: List<dynamic>.from(json["deruralize"].map((x) => x)),
+        diaereses: List<dynamic>.from(json["diaereses"].map((x) => x)),
+        dissolution: List<List<dynamic>?>.from(json["dissolution"].map((x) => x == null ? null : List<dynamic>.from(x!.map((x) => x)))),
+        downstroke: List<dynamic>.from(json["downstroke"].map((x) => x)),
+        electrotautomerism: List<double?>.from(json["electrotautomerism"].map((x) => x?.toDouble())),
+        eleutheromania: List<dynamic>.from(json["eleutheromania"].map((x) => x)),
+        encrust: Encrust.fromJson(json["encrust"]),
+        entomoid: List<dynamic>.from(json["entomoid"].map((x) => x)),
+        epipaleolithic: List<dynamic>.from(json["epipaleolithic"].map((x) => x)),
+        expropriable: List<dynamic>.from(json["expropriable"].map((x) => x)),
+        faggingly: List<dynamic>.from(json["faggingly"].map((x) => x)),
+        fenks: List<dynamic>.from(json["fenks"].map((x) => x)),
+        flagmaking: List<dynamic>.from(json["flagmaking"].map((x) => x)),
+        fluorometer: List<dynamic>.from(json["fluorometer"].map((x) => x)),
+        fulsome: List<int?>.from(json["fulsome"].map((x) => x)),
+        fuzzy: List<dynamic>.from(json["fuzzy"].map((x) => x)),
+        gardenwards: List<dynamic>.from(json["gardenwards"].map((x) => x)),
+        generalissimo: List<dynamic>.from(json["generalissimo"].map((x) => x)),
+        habeas: List<Map<String, int>?>.from(json["habeas"].map((x) => x == null ? null : Map.from(x!).map((k, v) => MapEntry<String, int>(k, v)))),
+        hemicrystalline: List<dynamic>.from(json["hemicrystalline"].map((x) => x)),
+        hemocoele: List<dynamic>.from(json["hemocoele"].map((x) => x)),
+        hoister: List<dynamic>.from(json["hoister"].map((x) => x)),
+        hyperpiesis: List<dynamic>.from(json["hyperpiesis"].map((x) => x)),
+        hyppish: List<dynamic>.from(json["hyppish"].map((x) => x)),
+        idealizer: List<dynamic>.from(json["idealizer"].map((x) => x)),
+        incrustator: List<dynamic>.from(json["incrustator"].map((x) => x)),
+        intentiveness: List<dynamic>.from(json["intentiveness"].map((x) => x)),
+        interacinar: Interacinar.fromJson(json["interacinar"]),
+        intercorrelation: List<List<int>?>.from(json["intercorrelation"].map((x) => x == null ? null : List<int>.from(x!.map((x) => x)))),
+        jacutinga: List<dynamic>.from(json["jacutinga"].map((x) => x)),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "centrodesmose": centrodesmose,
+        "cerograph": List<dynamic>.from(cerograph.map((x) => x)),
+        "chemotherapeutics": List<dynamic>.from(chemotherapeutics.map((x) => x)),
+        "cimelia": List<dynamic>.from(cimelia.map((x) => x)),
+        "citrated": citrated,
+        "clinodome": List<dynamic>.from(clinodome.map((x) => x)),
+        "coadjust": List<dynamic>.from(coadjust.map((x) => x)),
+        "consilience": List<dynamic>.from(consilience.map((x) => x)),
+        "constructor": List<dynamic>.from(constructor.map((x) => x)),
+        "continuative": List<dynamic>.from(continuative.map((x) => x)),
+        "credulity": List<dynamic>.from(credulity.map((x) => x)),
+        "creviced": List<dynamic>.from(creviced.map((x) => x)),
+        "cubiculum": List<dynamic>.from(cubiculum.map((x) => List<dynamic>.from(x.map((x) => x)))),
+        "deruralize": List<dynamic>.from(deruralize.map((x) => x)),
+        "diaereses": List<dynamic>.from(diaereses.map((x) => x)),
+        "dissolution": List<dynamic>.from(dissolution.map((x) => x == null ? null : List<dynamic>.from(x!.map((x) => x)))),
+        "downstroke": List<dynamic>.from(downstroke.map((x) => x)),
+        "electrotautomerism": List<dynamic>.from(electrotautomerism.map((x) => x)),
+        "eleutheromania": List<dynamic>.from(eleutheromania.map((x) => x)),
+        "encrust": encrust.toJson(),
+        "entomoid": List<dynamic>.from(entomoid.map((x) => x)),
+        "epipaleolithic": List<dynamic>.from(epipaleolithic.map((x) => x)),
+        "expropriable": List<dynamic>.from(expropriable.map((x) => x)),
+        "faggingly": List<dynamic>.from(faggingly.map((x) => x)),
+        "fenks": List<dynamic>.from(fenks.map((x) => x)),
+        "flagmaking": List<dynamic>.from(flagmaking.map((x) => x)),
+        "fluorometer": List<dynamic>.from(fluorometer.map((x) => x)),
+        "fulsome": List<dynamic>.from(fulsome.map((x) => x)),
+        "fuzzy": List<dynamic>.from(fuzzy.map((x) => x)),
+        "gardenwards": List<dynamic>.from(gardenwards.map((x) => x)),
+        "generalissimo": List<dynamic>.from(generalissimo.map((x) => x)),
+        "habeas": List<dynamic>.from(habeas.map((x) => x == null ? null : Map.from(x!).map((k, v) => MapEntry<String, dynamic>(k, v)))),
+        "hemicrystalline": List<dynamic>.from(hemicrystalline.map((x) => x)),
+        "hemocoele": List<dynamic>.from(hemocoele.map((x) => x)),
+        "hoister": List<dynamic>.from(hoister.map((x) => x)),
+        "hyperpiesis": List<dynamic>.from(hyperpiesis.map((x) => x)),
+        "hyppish": List<dynamic>.from(hyppish.map((x) => x)),
+        "idealizer": List<dynamic>.from(idealizer.map((x) => x)),
+        "incrustator": List<dynamic>.from(incrustator.map((x) => x)),
+        "intentiveness": List<dynamic>.from(intentiveness.map((x) => x)),
+        "interacinar": interacinar.toJson(),
+        "intercorrelation": List<dynamic>.from(intercorrelation.map((x) => x == null ? null : List<dynamic>.from(x!.map((x) => x)))),
+        "jacutinga": List<dynamic>.from(jacutinga.map((x) => x)),
+    };
+}
+
+class CerographClass {
+    final dynamic apotropaion;
+    final dynamic casuary;
+    final dynamic creaker;
+    final dynamic disqualification;
+    final dynamic imperatorious;
+    final dynamic impermeabilize;
+    final dynamic metastoma;
+    final dynamic noctidiurnal;
+    final dynamic nonreserve;
+    final dynamic ophthalmotonometry;
+    final dynamic pailful;
+    final dynamic pigfish;
+    final dynamic pongee;
+    final dynamic prosodical;
+    final dynamic scrofuloderm;
+    final dynamic storekeeping;
+    final dynamic therologist;
+    final dynamic tolowa;
+    final dynamic tradeful;
+    final dynamic unriveting;
+
+    CerographClass({
+        required this.apotropaion,
+        required this.casuary,
+        required this.creaker,
+        required this.disqualification,
+        required this.imperatorious,
+        required this.impermeabilize,
+        required this.metastoma,
+        required this.noctidiurnal,
+        required this.nonreserve,
+        required this.ophthalmotonometry,
+        required this.pailful,
+        required this.pigfish,
+        required this.pongee,
+        required this.prosodical,
+        required this.scrofuloderm,
+        required this.storekeeping,
+        required this.therologist,
+        required this.tolowa,
+        required this.tradeful,
+        required this.unriveting,
+    });
+
+    CerographClass copyWith({
+        dynamic apotropaion,
+        dynamic casuary,
+        dynamic creaker,
+        dynamic disqualification,
+        dynamic imperatorious,
+        dynamic impermeabilize,
+        dynamic metastoma,
+        dynamic noctidiurnal,
+        dynamic nonreserve,
+        dynamic ophthalmotonometry,
+        dynamic pailful,
+        dynamic pigfish,
+        dynamic pongee,
+        dynamic prosodical,
+        dynamic scrofuloderm,
+        dynamic storekeeping,
+        dynamic therologist,
+        dynamic tolowa,
+        dynamic tradeful,
+        dynamic unriveting,
+    }) => 
+        CerographClass(
+            apotropaion: apotropaion ?? this.apotropaion,
+            casuary: casuary ?? this.casuary,
+            creaker: creaker ?? this.creaker,
+            disqualification: disqualification ?? this.disqualification,
+            imperatorious: imperatorious ?? this.imperatorious,
+            impermeabilize: impermeabilize ?? this.impermeabilize,
+            metastoma: metastoma ?? this.metastoma,
+            noctidiurnal: noctidiurnal ?? this.noctidiurnal,
+            nonreserve: nonreserve ?? this.nonreserve,
+            ophthalmotonometry: ophthalmotonometry ?? this.ophthalmotonometry,
+            pailful: pailful ?? this.pailful,
+            pigfish: pigfish ?? this.pigfish,
+            pongee: pongee ?? this.pongee,
+            prosodical: prosodical ?? this.prosodical,
+            scrofuloderm: scrofuloderm ?? this.scrofuloderm,
+            storekeeping: storekeeping ?? this.storekeeping,
+            therologist: therologist ?? this.therologist,
+            tolowa: tolowa ?? this.tolowa,
+            tradeful: tradeful ?? this.tradeful,
+            unriveting: unriveting ?? this.unriveting,
+        );
+
+    factory CerographClass.fromJson(Map<String, dynamic> json) => CerographClass(
+        apotropaion: (json.containsKey("apotropaion") ? json["apotropaion"] : throw FormatException('Missing required property')),
+        casuary: (json.containsKey("casuary") ? json["casuary"] : throw FormatException('Missing required property')),
+        creaker: (json.containsKey("creaker") ? json["creaker"] : throw FormatException('Missing required property')),
+        disqualification: (json.containsKey("disqualification") ? json["disqualification"] : throw FormatException('Missing required property')),
+        imperatorious: (json.containsKey("imperatorious") ? json["imperatorious"] : throw FormatException('Missing required property')),
+        impermeabilize: (json.containsKey("impermeabilize") ? json["impermeabilize"] : throw FormatException('Missing required property')),
+        metastoma: (json.containsKey("metastoma") ? json["metastoma"] : throw FormatException('Missing required property')),
+        noctidiurnal: (json.containsKey("noctidiurnal") ? json["noctidiurnal"] : throw FormatException('Missing required property')),
+        nonreserve: (json.containsKey("nonreserve") ? json["nonreserve"] : throw FormatException('Missing required property')),
+        ophthalmotonometry: (json.containsKey("ophthalmotonometry") ? json["ophthalmotonometry"] : throw FormatException('Missing required property')),
+        pailful: (json.containsKey("pailful") ? json["pailful"] : throw FormatException('Missing required property')),
+        pigfish: (json.containsKey("pigfish") ? json["pigfish"] : throw FormatException('Missing required property')),
+        pongee: (json.containsKey("pongee") ? json["pongee"] : throw FormatException('Missing required property')),
+        prosodical: (json.containsKey("prosodical") ? json["prosodical"] : throw FormatException('Missing required property')),
+        scrofuloderm: (json.containsKey("scrofuloderm") ? json["scrofuloderm"] : throw FormatException('Missing required property')),
+        storekeeping: (json.containsKey("storekeeping") ? json["storekeeping"] : throw FormatException('Missing required property')),
+        therologist: (json.containsKey("therologist") ? json["therologist"] : throw FormatException('Missing required property')),
+        tolowa: (json.containsKey("Tolowa") ? json["Tolowa"] : throw FormatException('Missing required property')),
+        tradeful: (json.containsKey("tradeful") ? json["tradeful"] : throw FormatException('Missing required property')),
+        unriveting: (json.containsKey("unriveting") ? json["unriveting"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "apotropaion": apotropaion,
+        "casuary": casuary,
+        "creaker": creaker,
+        "disqualification": disqualification,
+        "imperatorious": imperatorious,
+        "impermeabilize": impermeabilize,
+        "metastoma": metastoma,
+        "noctidiurnal": noctidiurnal,
+        "nonreserve": nonreserve,
+        "ophthalmotonometry": ophthalmotonometry,
+        "pailful": pailful,
+        "pigfish": pigfish,
+        "pongee": pongee,
+        "prosodical": prosodical,
+        "scrofuloderm": scrofuloderm,
+        "storekeeping": storekeeping,
+        "therologist": therologist,
+        "Tolowa": tolowa,
+        "tradeful": tradeful,
+        "unriveting": unriveting,
+    };
+}
+
+class ChemotherapeuticClass {
+    final dynamic angioneurotic;
+    final dynamic availment;
+    final dynamic bladelet;
+    final double? catharticalness;
+    final dynamic caulis;
+    final dynamic chalcus;
+    final int? chirotherium;
+    final String? disdiapason;
+    final dynamic enteradenological;
+    final bool? homocerc;
+    final dynamic imporosity;
+    final dynamic insistently;
+    final dynamic intraparietal;
+    final dynamic ivied;
+    final dynamic maureen;
+    final dynamic nonbookish;
+    final dynamic nostochine;
+    final dynamic nutcracker;
+    final dynamic ofttimes;
+    final dynamic phenocryst;
+    final dynamic precoincident;
+    final dynamic ramiferous;
+    final dynamic stagmometer;
+    final dynamic tetherball;
+    final dynamic unshy;
+
+    ChemotherapeuticClass({
+        this.angioneurotic,
+        this.availment,
+        this.bladelet,
+        this.catharticalness,
+        this.caulis,
+        this.chalcus,
+        this.chirotherium,
+        this.disdiapason,
+        this.enteradenological,
+        this.homocerc,
+        this.imporosity,
+        this.insistently,
+        this.intraparietal,
+        this.ivied,
+        this.maureen,
+        this.nonbookish,
+        this.nostochine,
+        this.nutcracker,
+        this.ofttimes,
+        this.phenocryst,
+        this.precoincident,
+        this.ramiferous,
+        this.stagmometer,
+        this.tetherball,
+        this.unshy,
+    });
+
+    ChemotherapeuticClass copyWith({
+        dynamic angioneurotic,
+        dynamic availment,
+        dynamic bladelet,
+        double? catharticalness,
+        dynamic caulis,
+        dynamic chalcus,
+        int? chirotherium,
+        String? disdiapason,
+        dynamic enteradenological,
+        bool? homocerc,
+        dynamic imporosity,
+        dynamic insistently,
+        dynamic intraparietal,
+        dynamic ivied,
+        dynamic maureen,
+        dynamic nonbookish,
+        dynamic nostochine,
+        dynamic nutcracker,
+        dynamic ofttimes,
+        dynamic phenocryst,
+        dynamic precoincident,
+        dynamic ramiferous,
+        dynamic stagmometer,
+        dynamic tetherball,
+        dynamic unshy,
+    }) => 
+        ChemotherapeuticClass(
+            angioneurotic: angioneurotic ?? this.angioneurotic,
+            availment: availment ?? this.availment,
+            bladelet: bladelet ?? this.bladelet,
+            catharticalness: catharticalness ?? this.catharticalness,
+            caulis: caulis ?? this.caulis,
+            chalcus: chalcus ?? this.chalcus,
+            chirotherium: chirotherium ?? this.chirotherium,
+            disdiapason: disdiapason ?? this.disdiapason,
+            enteradenological: enteradenological ?? this.enteradenological,
+            homocerc: homocerc ?? this.homocerc,
+            imporosity: imporosity ?? this.imporosity,
+            insistently: insistently ?? this.insistently,
+            intraparietal: intraparietal ?? this.intraparietal,
+            ivied: ivied ?? this.ivied,
+            maureen: maureen ?? this.maureen,
+            nonbookish: nonbookish ?? this.nonbookish,
+            nostochine: nostochine ?? this.nostochine,
+            nutcracker: nutcracker ?? this.nutcracker,
+            ofttimes: ofttimes ?? this.ofttimes,
+            phenocryst: phenocryst ?? this.phenocryst,
+            precoincident: precoincident ?? this.precoincident,
+            ramiferous: ramiferous ?? this.ramiferous,
+            stagmometer: stagmometer ?? this.stagmometer,
+            tetherball: tetherball ?? this.tetherball,
+            unshy: unshy ?? this.unshy,
+        );
+
+    factory ChemotherapeuticClass.fromJson(Map<String, dynamic> json) => ChemotherapeuticClass(
+        angioneurotic: json["angioneurotic"],
+        availment: json["availment"],
+        bladelet: json["bladelet"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        caulis: json["caulis"],
+        chalcus: json["chalcus"],
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        enteradenological: json["enteradenological"],
+        homocerc: json["homocerc"],
+        imporosity: json["imporosity"],
+        insistently: json["insistently"],
+        intraparietal: json["intraparietal"],
+        ivied: json["ivied"],
+        maureen: json["Maureen"],
+        nonbookish: json["nonbookish"],
+        nostochine: json["nostochine"],
+        nutcracker: json["nutcracker"],
+        ofttimes: json["ofttimes"],
+        phenocryst: json["phenocryst"],
+        precoincident: json["precoincident"],
+        ramiferous: json["ramiferous"],
+        stagmometer: json["stagmometer"],
+        tetherball: json["tetherball"],
+        unshy: json["unshy"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "angioneurotic": angioneurotic,
+        "availment": availment,
+        "bladelet": bladelet,
+        "catharticalness": catharticalness,
+        "caulis": caulis,
+        "chalcus": chalcus,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "enteradenological": enteradenological,
+        "homocerc": homocerc,
+        "imporosity": imporosity,
+        "insistently": insistently,
+        "intraparietal": intraparietal,
+        "ivied": ivied,
+        "Maureen": maureen,
+        "nonbookish": nonbookish,
+        "nostochine": nostochine,
+        "nutcracker": nutcracker,
+        "ofttimes": ofttimes,
+        "phenocryst": phenocryst,
+        "precoincident": precoincident,
+        "ramiferous": ramiferous,
+        "stagmometer": stagmometer,
+        "tetherball": tetherball,
+        "unshy": unshy,
+    };
+}
+
+class CimeliaClass {
+    final double catharticalness;
+    final int chirotherium;
+    final String disdiapason;
+    final bool homocerc;
+    final dynamic nonbookish;
+
+    CimeliaClass({
+        required this.catharticalness,
+        required this.chirotherium,
+        required this.disdiapason,
+        required this.homocerc,
+        required this.nonbookish,
+    });
+
+    CimeliaClass copyWith({
+        double? catharticalness,
+        int? chirotherium,
+        String? disdiapason,
+        bool? homocerc,
+        dynamic nonbookish,
+    }) => 
+        CimeliaClass(
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            disdiapason: disdiapason ?? this.disdiapason,
+            homocerc: homocerc ?? this.homocerc,
+            nonbookish: nonbookish ?? this.nonbookish,
+        );
+
+    factory CimeliaClass.fromJson(Map<String, dynamic> json) => CimeliaClass(
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        homocerc: json["homocerc"],
+        nonbookish: (json.containsKey("nonbookish") ? json["nonbookish"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "homocerc": homocerc,
+        "nonbookish": nonbookish,
+    };
+}
+
+class CoadjustClass {
+    final dynamic amidosulphonal;
+    final dynamic benny;
+    final double? catharticalness;
+    final int? chirotherium;
+    final String? disdiapason;
+    final dynamic ensnare;
+    final bool? homocerc;
+    final dynamic hybridizer;
+    final dynamic leastwise;
+    final dynamic lof;
+    final dynamic monkhood;
+    final dynamic netherlandish;
+    final dynamic nonbookish;
+    final dynamic peonism;
+    final dynamic phonelescope;
+    final dynamic porphyrogeniture;
+    final dynamic preindemnify;
+    final dynamic rosal;
+    final dynamic scalenous;
+    final dynamic scopine;
+    final dynamic sedaceae;
+    final dynamic suberinize;
+    final dynamic symbiot;
+    final dynamic tablefellow;
+    final dynamic unchargeable;
+
+    CoadjustClass({
+        this.amidosulphonal,
+        this.benny,
+        this.catharticalness,
+        this.chirotherium,
+        this.disdiapason,
+        this.ensnare,
+        this.homocerc,
+        this.hybridizer,
+        this.leastwise,
+        this.lof,
+        this.monkhood,
+        this.netherlandish,
+        this.nonbookish,
+        this.peonism,
+        this.phonelescope,
+        this.porphyrogeniture,
+        this.preindemnify,
+        this.rosal,
+        this.scalenous,
+        this.scopine,
+        this.sedaceae,
+        this.suberinize,
+        this.symbiot,
+        this.tablefellow,
+        this.unchargeable,
+    });
+
+    CoadjustClass copyWith({
+        dynamic amidosulphonal,
+        dynamic benny,
+        double? catharticalness,
+        int? chirotherium,
+        String? disdiapason,
+        dynamic ensnare,
+        bool? homocerc,
+        dynamic hybridizer,
+        dynamic leastwise,
+        dynamic lof,
+        dynamic monkhood,
+        dynamic netherlandish,
+        dynamic nonbookish,
+        dynamic peonism,
+        dynamic phonelescope,
+        dynamic porphyrogeniture,
+        dynamic preindemnify,
+        dynamic rosal,
+        dynamic scalenous,
+        dynamic scopine,
+        dynamic sedaceae,
+        dynamic suberinize,
+        dynamic symbiot,
+        dynamic tablefellow,
+        dynamic unchargeable,
+    }) => 
+        CoadjustClass(
+            amidosulphonal: amidosulphonal ?? this.amidosulphonal,
+            benny: benny ?? this.benny,
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            disdiapason: disdiapason ?? this.disdiapason,
+            ensnare: ensnare ?? this.ensnare,
+            homocerc: homocerc ?? this.homocerc,
+            hybridizer: hybridizer ?? this.hybridizer,
+            leastwise: leastwise ?? this.leastwise,
+            lof: lof ?? this.lof,
+            monkhood: monkhood ?? this.monkhood,
+            netherlandish: netherlandish ?? this.netherlandish,
+            nonbookish: nonbookish ?? this.nonbookish,
+            peonism: peonism ?? this.peonism,
+            phonelescope: phonelescope ?? this.phonelescope,
+            porphyrogeniture: porphyrogeniture ?? this.porphyrogeniture,
+            preindemnify: preindemnify ?? this.preindemnify,
+            rosal: rosal ?? this.rosal,
+            scalenous: scalenous ?? this.scalenous,
+            scopine: scopine ?? this.scopine,
+            sedaceae: sedaceae ?? this.sedaceae,
+            suberinize: suberinize ?? this.suberinize,
+            symbiot: symbiot ?? this.symbiot,
+            tablefellow: tablefellow ?? this.tablefellow,
+            unchargeable: unchargeable ?? this.unchargeable,
+        );
+
+    factory CoadjustClass.fromJson(Map<String, dynamic> json) => CoadjustClass(
+        amidosulphonal: json["amidosulphonal"],
+        benny: json["Benny"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        ensnare: json["ensnare"],
+        homocerc: json["homocerc"],
+        hybridizer: json["hybridizer"],
+        leastwise: json["leastwise"],
+        lof: json["lof"],
+        monkhood: json["monkhood"],
+        netherlandish: json["Netherlandish"],
+        nonbookish: json["nonbookish"],
+        peonism: json["peonism"],
+        phonelescope: json["Phonelescope"],
+        porphyrogeniture: json["porphyrogeniture"],
+        preindemnify: json["preindemnify"],
+        rosal: json["rosal"],
+        scalenous: json["scalenous"],
+        scopine: json["scopine"],
+        sedaceae: json["Sedaceae"],
+        suberinize: json["suberinize"],
+        symbiot: json["symbiot"],
+        tablefellow: json["tablefellow"],
+        unchargeable: json["unchargeable"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "amidosulphonal": amidosulphonal,
+        "Benny": benny,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "ensnare": ensnare,
+        "homocerc": homocerc,
+        "hybridizer": hybridizer,
+        "leastwise": leastwise,
+        "lof": lof,
+        "monkhood": monkhood,
+        "Netherlandish": netherlandish,
+        "nonbookish": nonbookish,
+        "peonism": peonism,
+        "Phonelescope": phonelescope,
+        "porphyrogeniture": porphyrogeniture,
+        "preindemnify": preindemnify,
+        "rosal": rosal,
+        "scalenous": scalenous,
+        "scopine": scopine,
+        "Sedaceae": sedaceae,
+        "suberinize": suberinize,
+        "symbiot": symbiot,
+        "tablefellow": tablefellow,
+        "unchargeable": unchargeable,
+    };
+}
+
+class CredulityClass {
+    final dynamic ammonolytic;
+    final dynamic bushmaster;
+    final dynamic considering;
+    final dynamic consuetudinary;
+    final dynamic embarras;
+    final dynamic fineness;
+    final dynamic flaithship;
+    final dynamic flavia;
+    final dynamic gruffly;
+    final dynamic hedychium;
+    final dynamic leadwort;
+    final dynamic overseriously;
+    final dynamic parabola;
+    final dynamic pectinatodenticulate;
+    final dynamic popean;
+    final dynamic pornocrat;
+    final dynamic quadrisect;
+    final dynamic seriality;
+    final dynamic vamphorn;
+    final dynamic wharp;
+
+    CredulityClass({
+        required this.ammonolytic,
+        required this.bushmaster,
+        required this.considering,
+        required this.consuetudinary,
+        required this.embarras,
+        required this.fineness,
+        required this.flaithship,
+        required this.flavia,
+        required this.gruffly,
+        required this.hedychium,
+        required this.leadwort,
+        required this.overseriously,
+        required this.parabola,
+        required this.pectinatodenticulate,
+        required this.popean,
+        required this.pornocrat,
+        required this.quadrisect,
+        required this.seriality,
+        required this.vamphorn,
+        required this.wharp,
+    });
+
+    CredulityClass copyWith({
+        dynamic ammonolytic,
+        dynamic bushmaster,
+        dynamic considering,
+        dynamic consuetudinary,
+        dynamic embarras,
+        dynamic fineness,
+        dynamic flaithship,
+        dynamic flavia,
+        dynamic gruffly,
+        dynamic hedychium,
+        dynamic leadwort,
+        dynamic overseriously,
+        dynamic parabola,
+        dynamic pectinatodenticulate,
+        dynamic popean,
+        dynamic pornocrat,
+        dynamic quadrisect,
+        dynamic seriality,
+        dynamic vamphorn,
+        dynamic wharp,
+    }) => 
+        CredulityClass(
+            ammonolytic: ammonolytic ?? this.ammonolytic,
+            bushmaster: bushmaster ?? this.bushmaster,
+            considering: considering ?? this.considering,
+            consuetudinary: consuetudinary ?? this.consuetudinary,
+            embarras: embarras ?? this.embarras,
+            fineness: fineness ?? this.fineness,
+            flaithship: flaithship ?? this.flaithship,
+            flavia: flavia ?? this.flavia,
+            gruffly: gruffly ?? this.gruffly,
+            hedychium: hedychium ?? this.hedychium,
+            leadwort: leadwort ?? this.leadwort,
+            overseriously: overseriously ?? this.overseriously,
+            parabola: parabola ?? this.parabola,
+            pectinatodenticulate: pectinatodenticulate ?? this.pectinatodenticulate,
+            popean: popean ?? this.popean,
+            pornocrat: pornocrat ?? this.pornocrat,
+            quadrisect: quadrisect ?? this.quadrisect,
+            seriality: seriality ?? this.seriality,
+            vamphorn: vamphorn ?? this.vamphorn,
+            wharp: wharp ?? this.wharp,
+        );
+
+    factory CredulityClass.fromJson(Map<String, dynamic> json) => CredulityClass(
+        ammonolytic: (json.containsKey("ammonolytic") ? json["ammonolytic"] : throw FormatException('Missing required property')),
+        bushmaster: (json.containsKey("bushmaster") ? json["bushmaster"] : throw FormatException('Missing required property')),
+        considering: (json.containsKey("considering") ? json["considering"] : throw FormatException('Missing required property')),
+        consuetudinary: (json.containsKey("consuetudinary") ? json["consuetudinary"] : throw FormatException('Missing required property')),
+        embarras: (json.containsKey("embarras") ? json["embarras"] : throw FormatException('Missing required property')),
+        fineness: (json.containsKey("fineness") ? json["fineness"] : throw FormatException('Missing required property')),
+        flaithship: (json.containsKey("flaithship") ? json["flaithship"] : throw FormatException('Missing required property')),
+        flavia: (json.containsKey("Flavia") ? json["Flavia"] : throw FormatException('Missing required property')),
+        gruffly: (json.containsKey("gruffly") ? json["gruffly"] : throw FormatException('Missing required property')),
+        hedychium: (json.containsKey("Hedychium") ? json["Hedychium"] : throw FormatException('Missing required property')),
+        leadwort: (json.containsKey("leadwort") ? json["leadwort"] : throw FormatException('Missing required property')),
+        overseriously: (json.containsKey("overseriously") ? json["overseriously"] : throw FormatException('Missing required property')),
+        parabola: (json.containsKey("parabola") ? json["parabola"] : throw FormatException('Missing required property')),
+        pectinatodenticulate: (json.containsKey("pectinatodenticulate") ? json["pectinatodenticulate"] : throw FormatException('Missing required property')),
+        popean: (json.containsKey("Popean") ? json["Popean"] : throw FormatException('Missing required property')),
+        pornocrat: (json.containsKey("pornocrat") ? json["pornocrat"] : throw FormatException('Missing required property')),
+        quadrisect: (json.containsKey("quadrisect") ? json["quadrisect"] : throw FormatException('Missing required property')),
+        seriality: (json.containsKey("seriality") ? json["seriality"] : throw FormatException('Missing required property')),
+        vamphorn: (json.containsKey("vamphorn") ? json["vamphorn"] : throw FormatException('Missing required property')),
+        wharp: (json.containsKey("wharp") ? json["wharp"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "ammonolytic": ammonolytic,
+        "bushmaster": bushmaster,
+        "considering": considering,
+        "consuetudinary": consuetudinary,
+        "embarras": embarras,
+        "fineness": fineness,
+        "flaithship": flaithship,
+        "Flavia": flavia,
+        "gruffly": gruffly,
+        "Hedychium": hedychium,
+        "leadwort": leadwort,
+        "overseriously": overseriously,
+        "parabola": parabola,
+        "pectinatodenticulate": pectinatodenticulate,
+        "Popean": popean,
+        "pornocrat": pornocrat,
+        "quadrisect": quadrisect,
+        "seriality": seriality,
+        "vamphorn": vamphorn,
+        "wharp": wharp,
+    };
+}
+
+class DeruralizeClass {
+    final dynamic bockerel;
+    final dynamic boulder;
+    final dynamic churrus;
+    final dynamic counterdigged;
+    final dynamic dialogite;
+    final dynamic digenic;
+    final dynamic dunbird;
+    final dynamic ergatogyne;
+    final dynamic fiendful;
+    final dynamic jackrod;
+    final dynamic jehovistic;
+    final dynamic paninean;
+    final dynamic panther;
+    final dynamic placentigerous;
+    final dynamic romney;
+    final dynamic sparm;
+    final dynamic tocsin;
+    final dynamic unnicked;
+    final dynamic unstavable;
+    final dynamic windfirm;
+
+    DeruralizeClass({
+        required this.bockerel,
+        required this.boulder,
+        required this.churrus,
+        required this.counterdigged,
+        required this.dialogite,
+        required this.digenic,
+        required this.dunbird,
+        required this.ergatogyne,
+        required this.fiendful,
+        required this.jackrod,
+        required this.jehovistic,
+        required this.paninean,
+        required this.panther,
+        required this.placentigerous,
+        required this.romney,
+        required this.sparm,
+        required this.tocsin,
+        required this.unnicked,
+        required this.unstavable,
+        required this.windfirm,
+    });
+
+    DeruralizeClass copyWith({
+        dynamic bockerel,
+        dynamic boulder,
+        dynamic churrus,
+        dynamic counterdigged,
+        dynamic dialogite,
+        dynamic digenic,
+        dynamic dunbird,
+        dynamic ergatogyne,
+        dynamic fiendful,
+        dynamic jackrod,
+        dynamic jehovistic,
+        dynamic paninean,
+        dynamic panther,
+        dynamic placentigerous,
+        dynamic romney,
+        dynamic sparm,
+        dynamic tocsin,
+        dynamic unnicked,
+        dynamic unstavable,
+        dynamic windfirm,
+    }) => 
+        DeruralizeClass(
+            bockerel: bockerel ?? this.bockerel,
+            boulder: boulder ?? this.boulder,
+            churrus: churrus ?? this.churrus,
+            counterdigged: counterdigged ?? this.counterdigged,
+            dialogite: dialogite ?? this.dialogite,
+            digenic: digenic ?? this.digenic,
+            dunbird: dunbird ?? this.dunbird,
+            ergatogyne: ergatogyne ?? this.ergatogyne,
+            fiendful: fiendful ?? this.fiendful,
+            jackrod: jackrod ?? this.jackrod,
+            jehovistic: jehovistic ?? this.jehovistic,
+            paninean: paninean ?? this.paninean,
+            panther: panther ?? this.panther,
+            placentigerous: placentigerous ?? this.placentigerous,
+            romney: romney ?? this.romney,
+            sparm: sparm ?? this.sparm,
+            tocsin: tocsin ?? this.tocsin,
+            unnicked: unnicked ?? this.unnicked,
+            unstavable: unstavable ?? this.unstavable,
+            windfirm: windfirm ?? this.windfirm,
+        );
+
+    factory DeruralizeClass.fromJson(Map<String, dynamic> json) => DeruralizeClass(
+        bockerel: (json.containsKey("bockerel") ? json["bockerel"] : throw FormatException('Missing required property')),
+        boulder: (json.containsKey("boulder") ? json["boulder"] : throw FormatException('Missing required property')),
+        churrus: (json.containsKey("churrus") ? json["churrus"] : throw FormatException('Missing required property')),
+        counterdigged: (json.containsKey("counterdigged") ? json["counterdigged"] : throw FormatException('Missing required property')),
+        dialogite: (json.containsKey("dialogite") ? json["dialogite"] : throw FormatException('Missing required property')),
+        digenic: (json.containsKey("digenic") ? json["digenic"] : throw FormatException('Missing required property')),
+        dunbird: (json.containsKey("dunbird") ? json["dunbird"] : throw FormatException('Missing required property')),
+        ergatogyne: (json.containsKey("ergatogyne") ? json["ergatogyne"] : throw FormatException('Missing required property')),
+        fiendful: (json.containsKey("fiendful") ? json["fiendful"] : throw FormatException('Missing required property')),
+        jackrod: (json.containsKey("jackrod") ? json["jackrod"] : throw FormatException('Missing required property')),
+        jehovistic: (json.containsKey("Jehovistic") ? json["Jehovistic"] : throw FormatException('Missing required property')),
+        paninean: (json.containsKey("Paninean") ? json["Paninean"] : throw FormatException('Missing required property')),
+        panther: (json.containsKey("panther") ? json["panther"] : throw FormatException('Missing required property')),
+        placentigerous: (json.containsKey("placentigerous") ? json["placentigerous"] : throw FormatException('Missing required property')),
+        romney: (json.containsKey("Romney") ? json["Romney"] : throw FormatException('Missing required property')),
+        sparm: (json.containsKey("sparm") ? json["sparm"] : throw FormatException('Missing required property')),
+        tocsin: (json.containsKey("tocsin") ? json["tocsin"] : throw FormatException('Missing required property')),
+        unnicked: (json.containsKey("unnicked") ? json["unnicked"] : throw FormatException('Missing required property')),
+        unstavable: (json.containsKey("unstavable") ? json["unstavable"] : throw FormatException('Missing required property')),
+        windfirm: (json.containsKey("windfirm") ? json["windfirm"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "bockerel": bockerel,
+        "boulder": boulder,
+        "churrus": churrus,
+        "counterdigged": counterdigged,
+        "dialogite": dialogite,
+        "digenic": digenic,
+        "dunbird": dunbird,
+        "ergatogyne": ergatogyne,
+        "fiendful": fiendful,
+        "jackrod": jackrod,
+        "Jehovistic": jehovistic,
+        "Paninean": paninean,
+        "panther": panther,
+        "placentigerous": placentigerous,
+        "Romney": romney,
+        "sparm": sparm,
+        "tocsin": tocsin,
+        "unnicked": unnicked,
+        "unstavable": unstavable,
+        "windfirm": windfirm,
+    };
+}
+
+class DiaereseClass {
+    final dynamic amoreuxia;
+    final dynamic ani;
+    final dynamic bernicle;
+    final dynamic blackwasher;
+    final dynamic blowhard;
+    final dynamic broma;
+    final dynamic closecross;
+    final dynamic congregationalism;
+    final dynamic grayly;
+    final dynamic historically;
+    final dynamic hoast;
+    final dynamic irretentive;
+    final dynamic parcener;
+    final dynamic pedder;
+    final dynamic pseudoanatomic;
+    final dynamic rhizocarpian;
+    final dynamic samel;
+    final dynamic silker;
+    final dynamic subdentated;
+    final dynamic subobscure;
+
+    DiaereseClass({
+        required this.amoreuxia,
+        required this.ani,
+        required this.bernicle,
+        required this.blackwasher,
+        required this.blowhard,
+        required this.broma,
+        required this.closecross,
+        required this.congregationalism,
+        required this.grayly,
+        required this.historically,
+        required this.hoast,
+        required this.irretentive,
+        required this.parcener,
+        required this.pedder,
+        required this.pseudoanatomic,
+        required this.rhizocarpian,
+        required this.samel,
+        required this.silker,
+        required this.subdentated,
+        required this.subobscure,
+    });
+
+    DiaereseClass copyWith({
+        dynamic amoreuxia,
+        dynamic ani,
+        dynamic bernicle,
+        dynamic blackwasher,
+        dynamic blowhard,
+        dynamic broma,
+        dynamic closecross,
+        dynamic congregationalism,
+        dynamic grayly,
+        dynamic historically,
+        dynamic hoast,
+        dynamic irretentive,
+        dynamic parcener,
+        dynamic pedder,
+        dynamic pseudoanatomic,
+        dynamic rhizocarpian,
+        dynamic samel,
+        dynamic silker,
+        dynamic subdentated,
+        dynamic subobscure,
+    }) => 
+        DiaereseClass(
+            amoreuxia: amoreuxia ?? this.amoreuxia,
+            ani: ani ?? this.ani,
+            bernicle: bernicle ?? this.bernicle,
+            blackwasher: blackwasher ?? this.blackwasher,
+            blowhard: blowhard ?? this.blowhard,
+            broma: broma ?? this.broma,
+            closecross: closecross ?? this.closecross,
+            congregationalism: congregationalism ?? this.congregationalism,
+            grayly: grayly ?? this.grayly,
+            historically: historically ?? this.historically,
+            hoast: hoast ?? this.hoast,
+            irretentive: irretentive ?? this.irretentive,
+            parcener: parcener ?? this.parcener,
+            pedder: pedder ?? this.pedder,
+            pseudoanatomic: pseudoanatomic ?? this.pseudoanatomic,
+            rhizocarpian: rhizocarpian ?? this.rhizocarpian,
+            samel: samel ?? this.samel,
+            silker: silker ?? this.silker,
+            subdentated: subdentated ?? this.subdentated,
+            subobscure: subobscure ?? this.subobscure,
+        );
+
+    factory DiaereseClass.fromJson(Map<String, dynamic> json) => DiaereseClass(
+        amoreuxia: (json.containsKey("Amoreuxia") ? json["Amoreuxia"] : throw FormatException('Missing required property')),
+        ani: (json.containsKey("ani") ? json["ani"] : throw FormatException('Missing required property')),
+        bernicle: (json.containsKey("bernicle") ? json["bernicle"] : throw FormatException('Missing required property')),
+        blackwasher: (json.containsKey("blackwasher") ? json["blackwasher"] : throw FormatException('Missing required property')),
+        blowhard: (json.containsKey("blowhard") ? json["blowhard"] : throw FormatException('Missing required property')),
+        broma: (json.containsKey("broma") ? json["broma"] : throw FormatException('Missing required property')),
+        closecross: (json.containsKey("closecross") ? json["closecross"] : throw FormatException('Missing required property')),
+        congregationalism: (json.containsKey("congregationalism") ? json["congregationalism"] : throw FormatException('Missing required property')),
+        grayly: (json.containsKey("grayly") ? json["grayly"] : throw FormatException('Missing required property')),
+        historically: (json.containsKey("historically") ? json["historically"] : throw FormatException('Missing required property')),
+        hoast: (json.containsKey("hoast") ? json["hoast"] : throw FormatException('Missing required property')),
+        irretentive: (json.containsKey("irretentive") ? json["irretentive"] : throw FormatException('Missing required property')),
+        parcener: (json.containsKey("parcener") ? json["parcener"] : throw FormatException('Missing required property')),
+        pedder: (json.containsKey("pedder") ? json["pedder"] : throw FormatException('Missing required property')),
+        pseudoanatomic: (json.containsKey("pseudoanatomic") ? json["pseudoanatomic"] : throw FormatException('Missing required property')),
+        rhizocarpian: (json.containsKey("rhizocarpian") ? json["rhizocarpian"] : throw FormatException('Missing required property')),
+        samel: (json.containsKey("samel") ? json["samel"] : throw FormatException('Missing required property')),
+        silker: (json.containsKey("silker") ? json["silker"] : throw FormatException('Missing required property')),
+        subdentated: (json.containsKey("subdentated") ? json["subdentated"] : throw FormatException('Missing required property')),
+        subobscure: (json.containsKey("subobscure") ? json["subobscure"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "Amoreuxia": amoreuxia,
+        "ani": ani,
+        "bernicle": bernicle,
+        "blackwasher": blackwasher,
+        "blowhard": blowhard,
+        "broma": broma,
+        "closecross": closecross,
+        "congregationalism": congregationalism,
+        "grayly": grayly,
+        "historically": historically,
+        "hoast": hoast,
+        "irretentive": irretentive,
+        "parcener": parcener,
+        "pedder": pedder,
+        "pseudoanatomic": pseudoanatomic,
+        "rhizocarpian": rhizocarpian,
+        "samel": samel,
+        "silker": silker,
+        "subdentated": subdentated,
+        "subobscure": subobscure,
+    };
+}
+
+class Encrust {
+    final dynamic comradely;
+    final dynamic diacanthous;
+    final dynamic feminineness;
+    final dynamic gossamered;
+    final dynamic hibernia;
+    final dynamic hibiscus;
+    final dynamic lepidosauria;
+    final dynamic lollingly;
+    final dynamic manager;
+    final dynamic mechanic;
+    final dynamic overminuteness;
+    final dynamic papelonne;
+    final dynamic plebification;
+    final dynamic pugmiller;
+    final dynamic recoveror;
+    final dynamic spermatoblastic;
+    final dynamic syllidae;
+    final dynamic ungyved;
+    final dynamic whirlabout;
+    final dynamic woodenware;
+
+    Encrust({
+        required this.comradely,
+        required this.diacanthous,
+        required this.feminineness,
+        required this.gossamered,
+        required this.hibernia,
+        required this.hibiscus,
+        required this.lepidosauria,
+        required this.lollingly,
+        required this.manager,
+        required this.mechanic,
+        required this.overminuteness,
+        required this.papelonne,
+        required this.plebification,
+        required this.pugmiller,
+        required this.recoveror,
+        required this.spermatoblastic,
+        required this.syllidae,
+        required this.ungyved,
+        required this.whirlabout,
+        required this.woodenware,
+    });
+
+    Encrust copyWith({
+        dynamic comradely,
+        dynamic diacanthous,
+        dynamic feminineness,
+        dynamic gossamered,
+        dynamic hibernia,
+        dynamic hibiscus,
+        dynamic lepidosauria,
+        dynamic lollingly,
+        dynamic manager,
+        dynamic mechanic,
+        dynamic overminuteness,
+        dynamic papelonne,
+        dynamic plebification,
+        dynamic pugmiller,
+        dynamic recoveror,
+        dynamic spermatoblastic,
+        dynamic syllidae,
+        dynamic ungyved,
+        dynamic whirlabout,
+        dynamic woodenware,
+    }) => 
+        Encrust(
+            comradely: comradely ?? this.comradely,
+            diacanthous: diacanthous ?? this.diacanthous,
+            feminineness: feminineness ?? this.feminineness,
+            gossamered: gossamered ?? this.gossamered,
+            hibernia: hibernia ?? this.hibernia,
+            hibiscus: hibiscus ?? this.hibiscus,
+            lepidosauria: lepidosauria ?? this.lepidosauria,
+            lollingly: lollingly ?? this.lollingly,
+            manager: manager ?? this.manager,
+            mechanic: mechanic ?? this.mechanic,
+            overminuteness: overminuteness ?? this.overminuteness,
+            papelonne: papelonne ?? this.papelonne,
+            plebification: plebification ?? this.plebification,
+            pugmiller: pugmiller ?? this.pugmiller,
+            recoveror: recoveror ?? this.recoveror,
+            spermatoblastic: spermatoblastic ?? this.spermatoblastic,
+            syllidae: syllidae ?? this.syllidae,
+            ungyved: ungyved ?? this.ungyved,
+            whirlabout: whirlabout ?? this.whirlabout,
+            woodenware: woodenware ?? this.woodenware,
+        );
+
+    factory Encrust.fromJson(Map<String, dynamic> json) => Encrust(
+        comradely: (json.containsKey("comradely") ? json["comradely"] : throw FormatException('Missing required property')),
+        diacanthous: (json.containsKey("diacanthous") ? json["diacanthous"] : throw FormatException('Missing required property')),
+        feminineness: (json.containsKey("feminineness") ? json["feminineness"] : throw FormatException('Missing required property')),
+        gossamered: (json.containsKey("gossamered") ? json["gossamered"] : throw FormatException('Missing required property')),
+        hibernia: (json.containsKey("Hibernia") ? json["Hibernia"] : throw FormatException('Missing required property')),
+        hibiscus: (json.containsKey("Hibiscus") ? json["Hibiscus"] : throw FormatException('Missing required property')),
+        lepidosauria: (json.containsKey("Lepidosauria") ? json["Lepidosauria"] : throw FormatException('Missing required property')),
+        lollingly: (json.containsKey("lollingly") ? json["lollingly"] : throw FormatException('Missing required property')),
+        manager: (json.containsKey("manager") ? json["manager"] : throw FormatException('Missing required property')),
+        mechanic: (json.containsKey("mechanic") ? json["mechanic"] : throw FormatException('Missing required property')),
+        overminuteness: (json.containsKey("overminuteness") ? json["overminuteness"] : throw FormatException('Missing required property')),
+        papelonne: (json.containsKey("papelonne") ? json["papelonne"] : throw FormatException('Missing required property')),
+        plebification: (json.containsKey("plebification") ? json["plebification"] : throw FormatException('Missing required property')),
+        pugmiller: (json.containsKey("pugmiller") ? json["pugmiller"] : throw FormatException('Missing required property')),
+        recoveror: (json.containsKey("recoveror") ? json["recoveror"] : throw FormatException('Missing required property')),
+        spermatoblastic: (json.containsKey("spermatoblastic") ? json["spermatoblastic"] : throw FormatException('Missing required property')),
+        syllidae: (json.containsKey("Syllidae") ? json["Syllidae"] : throw FormatException('Missing required property')),
+        ungyved: (json.containsKey("ungyved") ? json["ungyved"] : throw FormatException('Missing required property')),
+        whirlabout: (json.containsKey("whirlabout") ? json["whirlabout"] : throw FormatException('Missing required property')),
+        woodenware: (json.containsKey("woodenware") ? json["woodenware"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "comradely": comradely,
+        "diacanthous": diacanthous,
+        "feminineness": feminineness,
+        "gossamered": gossamered,
+        "Hibernia": hibernia,
+        "Hibiscus": hibiscus,
+        "Lepidosauria": lepidosauria,
+        "lollingly": lollingly,
+        "manager": manager,
+        "mechanic": mechanic,
+        "overminuteness": overminuteness,
+        "papelonne": papelonne,
+        "plebification": plebification,
+        "pugmiller": pugmiller,
+        "recoveror": recoveror,
+        "spermatoblastic": spermatoblastic,
+        "Syllidae": syllidae,
+        "ungyved": ungyved,
+        "whirlabout": whirlabout,
+        "woodenware": woodenware,
+    };
+}
+
+class FagginglyClass {
+    final dynamic abranchian;
+    final dynamic aculeiform;
+    final dynamic adiaphoristic;
+    final dynamic adoptionism;
+    final dynamic anglic;
+    final dynamic antrotomy;
+    final dynamic coerciveness;
+    final dynamic decorist;
+    final dynamic duckhood;
+    final dynamic heteromeri;
+    final dynamic hypochnose;
+    final dynamic lochage;
+    final dynamic melee;
+    final dynamic nonconformitant;
+    final dynamic poinsettia;
+    final dynamic putatively;
+    final dynamic semivolatile;
+    final dynamic soleas;
+    final dynamic unfastenable;
+    final dynamic unmillinered;
+
+    FagginglyClass({
+        required this.abranchian,
+        required this.aculeiform,
+        required this.adiaphoristic,
+        required this.adoptionism,
+        required this.anglic,
+        required this.antrotomy,
+        required this.coerciveness,
+        required this.decorist,
+        required this.duckhood,
+        required this.heteromeri,
+        required this.hypochnose,
+        required this.lochage,
+        required this.melee,
+        required this.nonconformitant,
+        required this.poinsettia,
+        required this.putatively,
+        required this.semivolatile,
+        required this.soleas,
+        required this.unfastenable,
+        required this.unmillinered,
+    });
+
+    FagginglyClass copyWith({
+        dynamic abranchian,
+        dynamic aculeiform,
+        dynamic adiaphoristic,
+        dynamic adoptionism,
+        dynamic anglic,
+        dynamic antrotomy,
+        dynamic coerciveness,
+        dynamic decorist,
+        dynamic duckhood,
+        dynamic heteromeri,
+        dynamic hypochnose,
+        dynamic lochage,
+        dynamic melee,
+        dynamic nonconformitant,
+        dynamic poinsettia,
+        dynamic putatively,
+        dynamic semivolatile,
+        dynamic soleas,
+        dynamic unfastenable,
+        dynamic unmillinered,
+    }) => 
+        FagginglyClass(
+            abranchian: abranchian ?? this.abranchian,
+            aculeiform: aculeiform ?? this.aculeiform,
+            adiaphoristic: adiaphoristic ?? this.adiaphoristic,
+            adoptionism: adoptionism ?? this.adoptionism,
+            anglic: anglic ?? this.anglic,
+            antrotomy: antrotomy ?? this.antrotomy,
+            coerciveness: coerciveness ?? this.coerciveness,
+            decorist: decorist ?? this.decorist,
+            duckhood: duckhood ?? this.duckhood,
+            heteromeri: heteromeri ?? this.heteromeri,
+            hypochnose: hypochnose ?? this.hypochnose,
+            lochage: lochage ?? this.lochage,
+            melee: melee ?? this.melee,
+            nonconformitant: nonconformitant ?? this.nonconformitant,
+            poinsettia: poinsettia ?? this.poinsettia,
+            putatively: putatively ?? this.putatively,
+            semivolatile: semivolatile ?? this.semivolatile,
+            soleas: soleas ?? this.soleas,
+            unfastenable: unfastenable ?? this.unfastenable,
+            unmillinered: unmillinered ?? this.unmillinered,
+        );
+
+    factory FagginglyClass.fromJson(Map<String, dynamic> json) => FagginglyClass(
+        abranchian: (json.containsKey("abranchian") ? json["abranchian"] : throw FormatException('Missing required property')),
+        aculeiform: (json.containsKey("aculeiform") ? json["aculeiform"] : throw FormatException('Missing required property')),
+        adiaphoristic: (json.containsKey("adiaphoristic") ? json["adiaphoristic"] : throw FormatException('Missing required property')),
+        adoptionism: (json.containsKey("adoptionism") ? json["adoptionism"] : throw FormatException('Missing required property')),
+        anglic: (json.containsKey("Anglic") ? json["Anglic"] : throw FormatException('Missing required property')),
+        antrotomy: (json.containsKey("antrotomy") ? json["antrotomy"] : throw FormatException('Missing required property')),
+        coerciveness: (json.containsKey("coerciveness") ? json["coerciveness"] : throw FormatException('Missing required property')),
+        decorist: (json.containsKey("decorist") ? json["decorist"] : throw FormatException('Missing required property')),
+        duckhood: (json.containsKey("duckhood") ? json["duckhood"] : throw FormatException('Missing required property')),
+        heteromeri: (json.containsKey("Heteromeri") ? json["Heteromeri"] : throw FormatException('Missing required property')),
+        hypochnose: (json.containsKey("hypochnose") ? json["hypochnose"] : throw FormatException('Missing required property')),
+        lochage: (json.containsKey("lochage") ? json["lochage"] : throw FormatException('Missing required property')),
+        melee: (json.containsKey("melee") ? json["melee"] : throw FormatException('Missing required property')),
+        nonconformitant: (json.containsKey("nonconformitant") ? json["nonconformitant"] : throw FormatException('Missing required property')),
+        poinsettia: (json.containsKey("Poinsettia") ? json["Poinsettia"] : throw FormatException('Missing required property')),
+        putatively: (json.containsKey("putatively") ? json["putatively"] : throw FormatException('Missing required property')),
+        semivolatile: (json.containsKey("semivolatile") ? json["semivolatile"] : throw FormatException('Missing required property')),
+        soleas: (json.containsKey("soleas") ? json["soleas"] : throw FormatException('Missing required property')),
+        unfastenable: (json.containsKey("unfastenable") ? json["unfastenable"] : throw FormatException('Missing required property')),
+        unmillinered: (json.containsKey("unmillinered") ? json["unmillinered"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "abranchian": abranchian,
+        "aculeiform": aculeiform,
+        "adiaphoristic": adiaphoristic,
+        "adoptionism": adoptionism,
+        "Anglic": anglic,
+        "antrotomy": antrotomy,
+        "coerciveness": coerciveness,
+        "decorist": decorist,
+        "duckhood": duckhood,
+        "Heteromeri": heteromeri,
+        "hypochnose": hypochnose,
+        "lochage": lochage,
+        "melee": melee,
+        "nonconformitant": nonconformitant,
+        "Poinsettia": poinsettia,
+        "putatively": putatively,
+        "semivolatile": semivolatile,
+        "soleas": soleas,
+        "unfastenable": unfastenable,
+        "unmillinered": unmillinered,
+    };
+}
+
+class FenkClass {
+    final dynamic apoise;
+    final dynamic astronomize;
+    final dynamic cockhorse;
+    final dynamic copular;
+    final dynamic dagomba;
+    final dynamic draffy;
+    final dynamic foreigner;
+    final dynamic guyandot;
+    final dynamic neurogliosis;
+    final dynamic osmious;
+    final dynamic palpitate;
+    final dynamic rebukeable;
+    final dynamic reinwardtia;
+    final dynamic reservatory;
+    final dynamic scalt;
+    final dynamic scripturalize;
+    final dynamic tintometer;
+    final dynamic tritoness;
+    final dynamic undergrade;
+    final dynamic undermountain;
+
+    FenkClass({
+        required this.apoise,
+        required this.astronomize,
+        required this.cockhorse,
+        required this.copular,
+        required this.dagomba,
+        required this.draffy,
+        required this.foreigner,
+        required this.guyandot,
+        required this.neurogliosis,
+        required this.osmious,
+        required this.palpitate,
+        required this.rebukeable,
+        required this.reinwardtia,
+        required this.reservatory,
+        required this.scalt,
+        required this.scripturalize,
+        required this.tintometer,
+        required this.tritoness,
+        required this.undergrade,
+        required this.undermountain,
+    });
+
+    FenkClass copyWith({
+        dynamic apoise,
+        dynamic astronomize,
+        dynamic cockhorse,
+        dynamic copular,
+        dynamic dagomba,
+        dynamic draffy,
+        dynamic foreigner,
+        dynamic guyandot,
+        dynamic neurogliosis,
+        dynamic osmious,
+        dynamic palpitate,
+        dynamic rebukeable,
+        dynamic reinwardtia,
+        dynamic reservatory,
+        dynamic scalt,
+        dynamic scripturalize,
+        dynamic tintometer,
+        dynamic tritoness,
+        dynamic undergrade,
+        dynamic undermountain,
+    }) => 
+        FenkClass(
+            apoise: apoise ?? this.apoise,
+            astronomize: astronomize ?? this.astronomize,
+            cockhorse: cockhorse ?? this.cockhorse,
+            copular: copular ?? this.copular,
+            dagomba: dagomba ?? this.dagomba,
+            draffy: draffy ?? this.draffy,
+            foreigner: foreigner ?? this.foreigner,
+            guyandot: guyandot ?? this.guyandot,
+            neurogliosis: neurogliosis ?? this.neurogliosis,
+            osmious: osmious ?? this.osmious,
+            palpitate: palpitate ?? this.palpitate,
+            rebukeable: rebukeable ?? this.rebukeable,
+            reinwardtia: reinwardtia ?? this.reinwardtia,
+            reservatory: reservatory ?? this.reservatory,
+            scalt: scalt ?? this.scalt,
+            scripturalize: scripturalize ?? this.scripturalize,
+            tintometer: tintometer ?? this.tintometer,
+            tritoness: tritoness ?? this.tritoness,
+            undergrade: undergrade ?? this.undergrade,
+            undermountain: undermountain ?? this.undermountain,
+        );
+
+    factory FenkClass.fromJson(Map<String, dynamic> json) => FenkClass(
+        apoise: (json.containsKey("apoise") ? json["apoise"] : throw FormatException('Missing required property')),
+        astronomize: (json.containsKey("astronomize") ? json["astronomize"] : throw FormatException('Missing required property')),
+        cockhorse: (json.containsKey("cockhorse") ? json["cockhorse"] : throw FormatException('Missing required property')),
+        copular: (json.containsKey("copular") ? json["copular"] : throw FormatException('Missing required property')),
+        dagomba: (json.containsKey("Dagomba") ? json["Dagomba"] : throw FormatException('Missing required property')),
+        draffy: (json.containsKey("draffy") ? json["draffy"] : throw FormatException('Missing required property')),
+        foreigner: (json.containsKey("foreigner") ? json["foreigner"] : throw FormatException('Missing required property')),
+        guyandot: (json.containsKey("Guyandot") ? json["Guyandot"] : throw FormatException('Missing required property')),
+        neurogliosis: (json.containsKey("neurogliosis") ? json["neurogliosis"] : throw FormatException('Missing required property')),
+        osmious: (json.containsKey("osmious") ? json["osmious"] : throw FormatException('Missing required property')),
+        palpitate: (json.containsKey("palpitate") ? json["palpitate"] : throw FormatException('Missing required property')),
+        rebukeable: (json.containsKey("rebukeable") ? json["rebukeable"] : throw FormatException('Missing required property')),
+        reinwardtia: (json.containsKey("Reinwardtia") ? json["Reinwardtia"] : throw FormatException('Missing required property')),
+        reservatory: (json.containsKey("reservatory") ? json["reservatory"] : throw FormatException('Missing required property')),
+        scalt: (json.containsKey("scalt") ? json["scalt"] : throw FormatException('Missing required property')),
+        scripturalize: (json.containsKey("scripturalize") ? json["scripturalize"] : throw FormatException('Missing required property')),
+        tintometer: (json.containsKey("tintometer") ? json["tintometer"] : throw FormatException('Missing required property')),
+        tritoness: (json.containsKey("Tritoness") ? json["Tritoness"] : throw FormatException('Missing required property')),
+        undergrade: (json.containsKey("undergrade") ? json["undergrade"] : throw FormatException('Missing required property')),
+        undermountain: (json.containsKey("undermountain") ? json["undermountain"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "apoise": apoise,
+        "astronomize": astronomize,
+        "cockhorse": cockhorse,
+        "copular": copular,
+        "Dagomba": dagomba,
+        "draffy": draffy,
+        "foreigner": foreigner,
+        "Guyandot": guyandot,
+        "neurogliosis": neurogliosis,
+        "osmious": osmious,
+        "palpitate": palpitate,
+        "rebukeable": rebukeable,
+        "Reinwardtia": reinwardtia,
+        "reservatory": reservatory,
+        "scalt": scalt,
+        "scripturalize": scripturalize,
+        "tintometer": tintometer,
+        "Tritoness": tritoness,
+        "undergrade": undergrade,
+        "undermountain": undermountain,
+    };
+}
+
+class FlagmakingClass {
+    final dynamic albarco;
+    final dynamic bunodonta;
+    final dynamic hornify;
+    final dynamic hydrocorisae;
+    final dynamic hypoglossus;
+    final dynamic inexpiably;
+    final dynamic ingratitude;
+    final dynamic ladyfly;
+    final dynamic medicament;
+    final dynamic monogrammatic;
+    final dynamic nobbut;
+    final dynamic notacanthidae;
+    final dynamic polyplacophore;
+    final dynamic proexercise;
+    final dynamic protoplast;
+    final dynamic puzzling;
+    final dynamic splanchnoskeleton;
+    final dynamic unloveliness;
+    final dynamic unquarantined;
+    final dynamic unrenounceable;
+
+    FlagmakingClass({
+        required this.albarco,
+        required this.bunodonta,
+        required this.hornify,
+        required this.hydrocorisae,
+        required this.hypoglossus,
+        required this.inexpiably,
+        required this.ingratitude,
+        required this.ladyfly,
+        required this.medicament,
+        required this.monogrammatic,
+        required this.nobbut,
+        required this.notacanthidae,
+        required this.polyplacophore,
+        required this.proexercise,
+        required this.protoplast,
+        required this.puzzling,
+        required this.splanchnoskeleton,
+        required this.unloveliness,
+        required this.unquarantined,
+        required this.unrenounceable,
+    });
+
+    FlagmakingClass copyWith({
+        dynamic albarco,
+        dynamic bunodonta,
+        dynamic hornify,
+        dynamic hydrocorisae,
+        dynamic hypoglossus,
+        dynamic inexpiably,
+        dynamic ingratitude,
+        dynamic ladyfly,
+        dynamic medicament,
+        dynamic monogrammatic,
+        dynamic nobbut,
+        dynamic notacanthidae,
+        dynamic polyplacophore,
+        dynamic proexercise,
+        dynamic protoplast,
+        dynamic puzzling,
+        dynamic splanchnoskeleton,
+        dynamic unloveliness,
+        dynamic unquarantined,
+        dynamic unrenounceable,
+    }) => 
+        FlagmakingClass(
+            albarco: albarco ?? this.albarco,
+            bunodonta: bunodonta ?? this.bunodonta,
+            hornify: hornify ?? this.hornify,
+            hydrocorisae: hydrocorisae ?? this.hydrocorisae,
+            hypoglossus: hypoglossus ?? this.hypoglossus,
+            inexpiably: inexpiably ?? this.inexpiably,
+            ingratitude: ingratitude ?? this.ingratitude,
+            ladyfly: ladyfly ?? this.ladyfly,
+            medicament: medicament ?? this.medicament,
+            monogrammatic: monogrammatic ?? this.monogrammatic,
+            nobbut: nobbut ?? this.nobbut,
+            notacanthidae: notacanthidae ?? this.notacanthidae,
+            polyplacophore: polyplacophore ?? this.polyplacophore,
+            proexercise: proexercise ?? this.proexercise,
+            protoplast: protoplast ?? this.protoplast,
+            puzzling: puzzling ?? this.puzzling,
+            splanchnoskeleton: splanchnoskeleton ?? this.splanchnoskeleton,
+            unloveliness: unloveliness ?? this.unloveliness,
+            unquarantined: unquarantined ?? this.unquarantined,
+            unrenounceable: unrenounceable ?? this.unrenounceable,
+        );
+
+    factory FlagmakingClass.fromJson(Map<String, dynamic> json) => FlagmakingClass(
+        albarco: (json.containsKey("albarco") ? json["albarco"] : throw FormatException('Missing required property')),
+        bunodonta: (json.containsKey("Bunodonta") ? json["Bunodonta"] : throw FormatException('Missing required property')),
+        hornify: (json.containsKey("hornify") ? json["hornify"] : throw FormatException('Missing required property')),
+        hydrocorisae: (json.containsKey("Hydrocorisae") ? json["Hydrocorisae"] : throw FormatException('Missing required property')),
+        hypoglossus: (json.containsKey("hypoglossus") ? json["hypoglossus"] : throw FormatException('Missing required property')),
+        inexpiably: (json.containsKey("inexpiably") ? json["inexpiably"] : throw FormatException('Missing required property')),
+        ingratitude: (json.containsKey("ingratitude") ? json["ingratitude"] : throw FormatException('Missing required property')),
+        ladyfly: (json.containsKey("ladyfly") ? json["ladyfly"] : throw FormatException('Missing required property')),
+        medicament: (json.containsKey("medicament") ? json["medicament"] : throw FormatException('Missing required property')),
+        monogrammatic: (json.containsKey("monogrammatic") ? json["monogrammatic"] : throw FormatException('Missing required property')),
+        nobbut: (json.containsKey("nobbut") ? json["nobbut"] : throw FormatException('Missing required property')),
+        notacanthidae: (json.containsKey("Notacanthidae") ? json["Notacanthidae"] : throw FormatException('Missing required property')),
+        polyplacophore: (json.containsKey("polyplacophore") ? json["polyplacophore"] : throw FormatException('Missing required property')),
+        proexercise: (json.containsKey("proexercise") ? json["proexercise"] : throw FormatException('Missing required property')),
+        protoplast: (json.containsKey("protoplast") ? json["protoplast"] : throw FormatException('Missing required property')),
+        puzzling: (json.containsKey("puzzling") ? json["puzzling"] : throw FormatException('Missing required property')),
+        splanchnoskeleton: (json.containsKey("splanchnoskeleton") ? json["splanchnoskeleton"] : throw FormatException('Missing required property')),
+        unloveliness: (json.containsKey("unloveliness") ? json["unloveliness"] : throw FormatException('Missing required property')),
+        unquarantined: (json.containsKey("unquarantined") ? json["unquarantined"] : throw FormatException('Missing required property')),
+        unrenounceable: (json.containsKey("unrenounceable") ? json["unrenounceable"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "albarco": albarco,
+        "Bunodonta": bunodonta,
+        "hornify": hornify,
+        "Hydrocorisae": hydrocorisae,
+        "hypoglossus": hypoglossus,
+        "inexpiably": inexpiably,
+        "ingratitude": ingratitude,
+        "ladyfly": ladyfly,
+        "medicament": medicament,
+        "monogrammatic": monogrammatic,
+        "nobbut": nobbut,
+        "Notacanthidae": notacanthidae,
+        "polyplacophore": polyplacophore,
+        "proexercise": proexercise,
+        "protoplast": protoplast,
+        "puzzling": puzzling,
+        "splanchnoskeleton": splanchnoskeleton,
+        "unloveliness": unloveliness,
+        "unquarantined": unquarantined,
+        "unrenounceable": unrenounceable,
+    };
+}
+
+class HemocoeleClass {
+    final dynamic acrogamy;
+    final dynamic amelification;
+    final dynamic autobiographic;
+    final dynamic berat;
+    final double? catharticalness;
+    final int? chirotherium;
+    final String? disdiapason;
+    final dynamic disproportionably;
+    final dynamic erythrite;
+    final dynamic graphic;
+    final dynamic hepatological;
+    final bool? homocerc;
+    final dynamic incommensurably;
+    final dynamic misaffirm;
+    final dynamic nonbookish;
+    final dynamic pocketbook;
+    final dynamic sclerometric;
+    final dynamic stambouline;
+    final dynamic stickpin;
+    final dynamic tubulure;
+    final dynamic undelated;
+    final dynamic unsalt;
+    final dynamic untutelar;
+    final dynamic vagrant;
+    final dynamic walt;
+
+    HemocoeleClass({
+        this.acrogamy,
+        this.amelification,
+        this.autobiographic,
+        this.berat,
+        this.catharticalness,
+        this.chirotherium,
+        this.disdiapason,
+        this.disproportionably,
+        this.erythrite,
+        this.graphic,
+        this.hepatological,
+        this.homocerc,
+        this.incommensurably,
+        this.misaffirm,
+        this.nonbookish,
+        this.pocketbook,
+        this.sclerometric,
+        this.stambouline,
+        this.stickpin,
+        this.tubulure,
+        this.undelated,
+        this.unsalt,
+        this.untutelar,
+        this.vagrant,
+        this.walt,
+    });
+
+    HemocoeleClass copyWith({
+        dynamic acrogamy,
+        dynamic amelification,
+        dynamic autobiographic,
+        dynamic berat,
+        double? catharticalness,
+        int? chirotherium,
+        String? disdiapason,
+        dynamic disproportionably,
+        dynamic erythrite,
+        dynamic graphic,
+        dynamic hepatological,
+        bool? homocerc,
+        dynamic incommensurably,
+        dynamic misaffirm,
+        dynamic nonbookish,
+        dynamic pocketbook,
+        dynamic sclerometric,
+        dynamic stambouline,
+        dynamic stickpin,
+        dynamic tubulure,
+        dynamic undelated,
+        dynamic unsalt,
+        dynamic untutelar,
+        dynamic vagrant,
+        dynamic walt,
+    }) => 
+        HemocoeleClass(
+            acrogamy: acrogamy ?? this.acrogamy,
+            amelification: amelification ?? this.amelification,
+            autobiographic: autobiographic ?? this.autobiographic,
+            berat: berat ?? this.berat,
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            disdiapason: disdiapason ?? this.disdiapason,
+            disproportionably: disproportionably ?? this.disproportionably,
+            erythrite: erythrite ?? this.erythrite,
+            graphic: graphic ?? this.graphic,
+            hepatological: hepatological ?? this.hepatological,
+            homocerc: homocerc ?? this.homocerc,
+            incommensurably: incommensurably ?? this.incommensurably,
+            misaffirm: misaffirm ?? this.misaffirm,
+            nonbookish: nonbookish ?? this.nonbookish,
+            pocketbook: pocketbook ?? this.pocketbook,
+            sclerometric: sclerometric ?? this.sclerometric,
+            stambouline: stambouline ?? this.stambouline,
+            stickpin: stickpin ?? this.stickpin,
+            tubulure: tubulure ?? this.tubulure,
+            undelated: undelated ?? this.undelated,
+            unsalt: unsalt ?? this.unsalt,
+            untutelar: untutelar ?? this.untutelar,
+            vagrant: vagrant ?? this.vagrant,
+            walt: walt ?? this.walt,
+        );
+
+    factory HemocoeleClass.fromJson(Map<String, dynamic> json) => HemocoeleClass(
+        acrogamy: json["acrogamy"],
+        amelification: json["amelification"],
+        autobiographic: json["autobiographic"],
+        berat: json["berat"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        disproportionably: json["disproportionably"],
+        erythrite: json["erythrite"],
+        graphic: json["graphic"],
+        hepatological: json["hepatological"],
+        homocerc: json["homocerc"],
+        incommensurably: json["incommensurably"],
+        misaffirm: json["misaffirm"],
+        nonbookish: json["nonbookish"],
+        pocketbook: json["pocketbook"],
+        sclerometric: json["sclerometric"],
+        stambouline: json["stambouline"],
+        stickpin: json["stickpin"],
+        tubulure: json["tubulure"],
+        undelated: json["undelated"],
+        unsalt: json["unsalt"],
+        untutelar: json["untutelar"],
+        vagrant: json["vagrant"],
+        walt: json["Walt"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "acrogamy": acrogamy,
+        "amelification": amelification,
+        "autobiographic": autobiographic,
+        "berat": berat,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "disproportionably": disproportionably,
+        "erythrite": erythrite,
+        "graphic": graphic,
+        "hepatological": hepatological,
+        "homocerc": homocerc,
+        "incommensurably": incommensurably,
+        "misaffirm": misaffirm,
+        "nonbookish": nonbookish,
+        "pocketbook": pocketbook,
+        "sclerometric": sclerometric,
+        "stambouline": stambouline,
+        "stickpin": stickpin,
+        "tubulure": tubulure,
+        "undelated": undelated,
+        "unsalt": unsalt,
+        "untutelar": untutelar,
+        "vagrant": vagrant,
+        "Walt": walt,
+    };
+}
+
+class Interacinar {
+    final double assapan;
+    final bool benefactorship;
+    final String triseriatim;
+    final int tubbing;
+    final dynamic untrimmed;
+
+    Interacinar({
+        required this.assapan,
+        required this.benefactorship,
+        required this.triseriatim,
+        required this.tubbing,
+        required this.untrimmed,
+    });
+
+    Interacinar copyWith({
+        double? assapan,
+        bool? benefactorship,
+        String? triseriatim,
+        int? tubbing,
+        dynamic untrimmed,
+    }) => 
+        Interacinar(
+            assapan: assapan ?? this.assapan,
+            benefactorship: benefactorship ?? this.benefactorship,
+            triseriatim: triseriatim ?? this.triseriatim,
+            tubbing: tubbing ?? this.tubbing,
+            untrimmed: untrimmed ?? this.untrimmed,
+        );
+
+    factory Interacinar.fromJson(Map<String, dynamic> json) => Interacinar(
+        assapan: json["assapan"]?.toDouble(),
+        benefactorship: json["benefactorship"],
+        triseriatim: json["triseriatim"],
+        tubbing: json["tubbing"],
+        untrimmed: (json.containsKey("untrimmed") ? json["untrimmed"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "assapan": assapan,
+        "benefactorship": benefactorship,
+        "triseriatim": triseriatim,
+        "tubbing": tubbing,
+        "untrimmed": untrimmed,
+    };
+}
diff --git a/head/dart/test/inputs/json/priority/combinations1.json/from-map-true--d222f65b3fee/TopLevel.dart b/head/dart/test/inputs/json/priority/combinations1.json/from-map-true--d222f65b3fee/TopLevel.dart
new file mode 100644
index 0000000..37bf404
--- /dev/null
+++ b/head/dart/test/inputs/json/priority/combinations1.json/from-map-true--d222f65b3fee/TopLevel.dart
@@ -0,0 +1,1329 @@
+// To parse this JSON data, do
+//
+//     final topLevel = topLevelFromJson(jsonString);
+
+import 'dart:convert';
+
+TopLevel topLevelFromJson(String str) => TopLevel.fromMap(json.decode(str));
+
+String topLevelToJson(TopLevel data) => json.encode(data.toMap());
+
+class TopLevel {
+    final String centrodesmose;
+    final List<dynamic> cerograph;
+    final List<dynamic> chemotherapeutics;
+    final List<dynamic> cimelia;
+    final int citrated;
+    final List<dynamic> clinodome;
+    final List<dynamic> coadjust;
+    final List<dynamic> consilience;
+    final List<dynamic> constructor;
+    final List<dynamic> continuative;
+    final List<dynamic> credulity;
+    final List<dynamic> creviced;
+    final List<List<int?>> cubiculum;
+    final List<dynamic> deruralize;
+    final List<dynamic> diaereses;
+    final List<List<dynamic>?> dissolution;
+    final List<dynamic> downstroke;
+    final List<double?> electrotautomerism;
+    final List<dynamic> eleutheromania;
+    final Encrust encrust;
+    final List<dynamic> entomoid;
+    final List<dynamic> epipaleolithic;
+    final List<dynamic> expropriable;
+    final List<dynamic> faggingly;
+    final List<dynamic> fenks;
+    final List<dynamic> flagmaking;
+    final List<dynamic> fluorometer;
+    final List<int?> fulsome;
+    final List<dynamic> fuzzy;
+    final List<dynamic> gardenwards;
+    final List<dynamic> generalissimo;
+    final List<Map<String, int>?> habeas;
+    final List<dynamic> hemicrystalline;
+    final List<dynamic> hemocoele;
+    final List<dynamic> hoister;
+    final List<dynamic> hyperpiesis;
+    final List<dynamic> hyppish;
+    final List<dynamic> idealizer;
+    final List<dynamic> incrustator;
+    final List<dynamic> intentiveness;
+    final Interacinar interacinar;
+    final List<List<int>?> intercorrelation;
+    final List<dynamic> jacutinga;
+
+    TopLevel({
+        required this.centrodesmose,
+        required this.cerograph,
+        required this.chemotherapeutics,
+        required this.cimelia,
+        required this.citrated,
+        required this.clinodome,
+        required this.coadjust,
+        required this.consilience,
+        required this.constructor,
+        required this.continuative,
+        required this.credulity,
+        required this.creviced,
+        required this.cubiculum,
+        required this.deruralize,
+        required this.diaereses,
+        required this.dissolution,
+        required this.downstroke,
+        required this.electrotautomerism,
+        required this.eleutheromania,
+        required this.encrust,
+        required this.entomoid,
+        required this.epipaleolithic,
+        required this.expropriable,
+        required this.faggingly,
+        required this.fenks,
+        required this.flagmaking,
+        required this.fluorometer,
+        required this.fulsome,
+        required this.fuzzy,
+        required this.gardenwards,
+        required this.generalissimo,
+        required this.habeas,
+        required this.hemicrystalline,
+        required this.hemocoele,
+        required this.hoister,
+        required this.hyperpiesis,
+        required this.hyppish,
+        required this.idealizer,
+        required this.incrustator,
+        required this.intentiveness,
+        required this.interacinar,
+        required this.intercorrelation,
+        required this.jacutinga,
+    });
+
+    factory TopLevel.fromMap(Map<String, dynamic> json) => TopLevel(
+        centrodesmose: json["centrodesmose"],
+        cerograph: List<dynamic>.from(json["cerograph"].map((x) => x)),
+        chemotherapeutics: List<dynamic>.from(json["chemotherapeutics"].map((x) => x)),
+        cimelia: List<dynamic>.from(json["cimelia"].map((x) => x)),
+        citrated: json["citrated"],
+        clinodome: List<dynamic>.from(json["clinodome"].map((x) => x)),
+        coadjust: List<dynamic>.from(json["coadjust"].map((x) => x)),
+        consilience: List<dynamic>.from(json["consilience"].map((x) => x)),
+        constructor: List<dynamic>.from(json["constructor"].map((x) => x)),
+        continuative: List<dynamic>.from(json["continuative"].map((x) => x)),
+        credulity: List<dynamic>.from(json["credulity"].map((x) => x)),
+        creviced: List<dynamic>.from(json["creviced"].map((x) => x)),
+        cubiculum: List<List<int?>>.from(json["cubiculum"].map((x) => List<int?>.from(x.map((x) => x)))),
+        deruralize: List<dynamic>.from(json["deruralize"].map((x) => x)),
+        diaereses: List<dynamic>.from(json["diaereses"].map((x) => x)),
+        dissolution: List<List<dynamic>?>.from(json["dissolution"].map((x) => x == null ? null : List<dynamic>.from(x!.map((x) => x)))),
+        downstroke: List<dynamic>.from(json["downstroke"].map((x) => x)),
+        electrotautomerism: List<double?>.from(json["electrotautomerism"].map((x) => x?.toDouble())),
+        eleutheromania: List<dynamic>.from(json["eleutheromania"].map((x) => x)),
+        encrust: Encrust.fromMap(json["encrust"]),
+        entomoid: List<dynamic>.from(json["entomoid"].map((x) => x)),
+        epipaleolithic: List<dynamic>.from(json["epipaleolithic"].map((x) => x)),
+        expropriable: List<dynamic>.from(json["expropriable"].map((x) => x)),
+        faggingly: List<dynamic>.from(json["faggingly"].map((x) => x)),
+        fenks: List<dynamic>.from(json["fenks"].map((x) => x)),
+        flagmaking: List<dynamic>.from(json["flagmaking"].map((x) => x)),
+        fluorometer: List<dynamic>.from(json["fluorometer"].map((x) => x)),
+        fulsome: List<int?>.from(json["fulsome"].map((x) => x)),
+        fuzzy: List<dynamic>.from(json["fuzzy"].map((x) => x)),
+        gardenwards: List<dynamic>.from(json["gardenwards"].map((x) => x)),
+        generalissimo: List<dynamic>.from(json["generalissimo"].map((x) => x)),
+        habeas: List<Map<String, int>?>.from(json["habeas"].map((x) => x == null ? null : Map.from(x!).map((k, v) => MapEntry<String, int>(k, v)))),
+        hemicrystalline: List<dynamic>.from(json["hemicrystalline"].map((x) => x)),
+        hemocoele: List<dynamic>.from(json["hemocoele"].map((x) => x)),
+        hoister: List<dynamic>.from(json["hoister"].map((x) => x)),
+        hyperpiesis: List<dynamic>.from(json["hyperpiesis"].map((x) => x)),
+        hyppish: List<dynamic>.from(json["hyppish"].map((x) => x)),
+        idealizer: List<dynamic>.from(json["idealizer"].map((x) => x)),
+        incrustator: List<dynamic>.from(json["incrustator"].map((x) => x)),
+        intentiveness: List<dynamic>.from(json["intentiveness"].map((x) => x)),
+        interacinar: Interacinar.fromMap(json["interacinar"]),
+        intercorrelation: List<List<int>?>.from(json["intercorrelation"].map((x) => x == null ? null : List<int>.from(x!.map((x) => x)))),
+        jacutinga: List<dynamic>.from(json["jacutinga"].map((x) => x)),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "centrodesmose": centrodesmose,
+        "cerograph": List<dynamic>.from(cerograph.map((x) => x)),
+        "chemotherapeutics": List<dynamic>.from(chemotherapeutics.map((x) => x)),
+        "cimelia": List<dynamic>.from(cimelia.map((x) => x)),
+        "citrated": citrated,
+        "clinodome": List<dynamic>.from(clinodome.map((x) => x)),
+        "coadjust": List<dynamic>.from(coadjust.map((x) => x)),
+        "consilience": List<dynamic>.from(consilience.map((x) => x)),
+        "constructor": List<dynamic>.from(constructor.map((x) => x)),
+        "continuative": List<dynamic>.from(continuative.map((x) => x)),
+        "credulity": List<dynamic>.from(credulity.map((x) => x)),
+        "creviced": List<dynamic>.from(creviced.map((x) => x)),
+        "cubiculum": List<dynamic>.from(cubiculum.map((x) => List<dynamic>.from(x.map((x) => x)))),
+        "deruralize": List<dynamic>.from(deruralize.map((x) => x)),
+        "diaereses": List<dynamic>.from(diaereses.map((x) => x)),
+        "dissolution": List<dynamic>.from(dissolution.map((x) => x == null ? null : List<dynamic>.from(x!.map((x) => x)))),
+        "downstroke": List<dynamic>.from(downstroke.map((x) => x)),
+        "electrotautomerism": List<dynamic>.from(electrotautomerism.map((x) => x)),
+        "eleutheromania": List<dynamic>.from(eleutheromania.map((x) => x)),
+        "encrust": encrust.toMap(),
+        "entomoid": List<dynamic>.from(entomoid.map((x) => x)),
+        "epipaleolithic": List<dynamic>.from(epipaleolithic.map((x) => x)),
+        "expropriable": List<dynamic>.from(expropriable.map((x) => x)),
+        "faggingly": List<dynamic>.from(faggingly.map((x) => x)),
+        "fenks": List<dynamic>.from(fenks.map((x) => x)),
+        "flagmaking": List<dynamic>.from(flagmaking.map((x) => x)),
+        "fluorometer": List<dynamic>.from(fluorometer.map((x) => x)),
+        "fulsome": List<dynamic>.from(fulsome.map((x) => x)),
+        "fuzzy": List<dynamic>.from(fuzzy.map((x) => x)),
+        "gardenwards": List<dynamic>.from(gardenwards.map((x) => x)),
+        "generalissimo": List<dynamic>.from(generalissimo.map((x) => x)),
+        "habeas": List<dynamic>.from(habeas.map((x) => x == null ? null : Map.from(x!).map((k, v) => MapEntry<String, dynamic>(k, v)))),
+        "hemicrystalline": List<dynamic>.from(hemicrystalline.map((x) => x)),
+        "hemocoele": List<dynamic>.from(hemocoele.map((x) => x)),
+        "hoister": List<dynamic>.from(hoister.map((x) => x)),
+        "hyperpiesis": List<dynamic>.from(hyperpiesis.map((x) => x)),
+        "hyppish": List<dynamic>.from(hyppish.map((x) => x)),
+        "idealizer": List<dynamic>.from(idealizer.map((x) => x)),
+        "incrustator": List<dynamic>.from(incrustator.map((x) => x)),
+        "intentiveness": List<dynamic>.from(intentiveness.map((x) => x)),
+        "interacinar": interacinar.toMap(),
+        "intercorrelation": List<dynamic>.from(intercorrelation.map((x) => x == null ? null : List<dynamic>.from(x!.map((x) => x)))),
+        "jacutinga": List<dynamic>.from(jacutinga.map((x) => x)),
+    };
+}
+
+class CerographClass {
+    final dynamic apotropaion;
+    final dynamic casuary;
+    final dynamic creaker;
+    final dynamic disqualification;
+    final dynamic imperatorious;
+    final dynamic impermeabilize;
+    final dynamic metastoma;
+    final dynamic noctidiurnal;
+    final dynamic nonreserve;
+    final dynamic ophthalmotonometry;
+    final dynamic pailful;
+    final dynamic pigfish;
+    final dynamic pongee;
+    final dynamic prosodical;
+    final dynamic scrofuloderm;
+    final dynamic storekeeping;
+    final dynamic therologist;
+    final dynamic tolowa;
+    final dynamic tradeful;
+    final dynamic unriveting;
+
+    CerographClass({
+        required this.apotropaion,
+        required this.casuary,
+        required this.creaker,
+        required this.disqualification,
+        required this.imperatorious,
+        required this.impermeabilize,
+        required this.metastoma,
+        required this.noctidiurnal,
+        required this.nonreserve,
+        required this.ophthalmotonometry,
+        required this.pailful,
+        required this.pigfish,
+        required this.pongee,
+        required this.prosodical,
+        required this.scrofuloderm,
+        required this.storekeeping,
+        required this.therologist,
+        required this.tolowa,
+        required this.tradeful,
+        required this.unriveting,
+    });
+
+    factory CerographClass.fromMap(Map<String, dynamic> json) => CerographClass(
+        apotropaion: (json.containsKey("apotropaion") ? json["apotropaion"] : throw FormatException('Missing required property')),
+        casuary: (json.containsKey("casuary") ? json["casuary"] : throw FormatException('Missing required property')),
+        creaker: (json.containsKey("creaker") ? json["creaker"] : throw FormatException('Missing required property')),
+        disqualification: (json.containsKey("disqualification") ? json["disqualification"] : throw FormatException('Missing required property')),
+        imperatorious: (json.containsKey("imperatorious") ? json["imperatorious"] : throw FormatException('Missing required property')),
+        impermeabilize: (json.containsKey("impermeabilize") ? json["impermeabilize"] : throw FormatException('Missing required property')),
+        metastoma: (json.containsKey("metastoma") ? json["metastoma"] : throw FormatException('Missing required property')),
+        noctidiurnal: (json.containsKey("noctidiurnal") ? json["noctidiurnal"] : throw FormatException('Missing required property')),
+        nonreserve: (json.containsKey("nonreserve") ? json["nonreserve"] : throw FormatException('Missing required property')),
+        ophthalmotonometry: (json.containsKey("ophthalmotonometry") ? json["ophthalmotonometry"] : throw FormatException('Missing required property')),
+        pailful: (json.containsKey("pailful") ? json["pailful"] : throw FormatException('Missing required property')),
+        pigfish: (json.containsKey("pigfish") ? json["pigfish"] : throw FormatException('Missing required property')),
+        pongee: (json.containsKey("pongee") ? json["pongee"] : throw FormatException('Missing required property')),
+        prosodical: (json.containsKey("prosodical") ? json["prosodical"] : throw FormatException('Missing required property')),
+        scrofuloderm: (json.containsKey("scrofuloderm") ? json["scrofuloderm"] : throw FormatException('Missing required property')),
+        storekeeping: (json.containsKey("storekeeping") ? json["storekeeping"] : throw FormatException('Missing required property')),
+        therologist: (json.containsKey("therologist") ? json["therologist"] : throw FormatException('Missing required property')),
+        tolowa: (json.containsKey("Tolowa") ? json["Tolowa"] : throw FormatException('Missing required property')),
+        tradeful: (json.containsKey("tradeful") ? json["tradeful"] : throw FormatException('Missing required property')),
+        unriveting: (json.containsKey("unriveting") ? json["unriveting"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "apotropaion": apotropaion,
+        "casuary": casuary,
+        "creaker": creaker,
+        "disqualification": disqualification,
+        "imperatorious": imperatorious,
+        "impermeabilize": impermeabilize,
+        "metastoma": metastoma,
+        "noctidiurnal": noctidiurnal,
+        "nonreserve": nonreserve,
+        "ophthalmotonometry": ophthalmotonometry,
+        "pailful": pailful,
+        "pigfish": pigfish,
+        "pongee": pongee,
+        "prosodical": prosodical,
+        "scrofuloderm": scrofuloderm,
+        "storekeeping": storekeeping,
+        "therologist": therologist,
+        "Tolowa": tolowa,
+        "tradeful": tradeful,
+        "unriveting": unriveting,
+    };
+}
+
+class ChemotherapeuticClass {
+    final dynamic angioneurotic;
+    final dynamic availment;
+    final dynamic bladelet;
+    final double? catharticalness;
+    final dynamic caulis;
+    final dynamic chalcus;
+    final int? chirotherium;
+    final String? disdiapason;
+    final dynamic enteradenological;
+    final bool? homocerc;
+    final dynamic imporosity;
+    final dynamic insistently;
+    final dynamic intraparietal;
+    final dynamic ivied;
+    final dynamic maureen;
+    final dynamic nonbookish;
+    final dynamic nostochine;
+    final dynamic nutcracker;
+    final dynamic ofttimes;
+    final dynamic phenocryst;
+    final dynamic precoincident;
+    final dynamic ramiferous;
+    final dynamic stagmometer;
+    final dynamic tetherball;
+    final dynamic unshy;
+
+    ChemotherapeuticClass({
+        this.angioneurotic,
+        this.availment,
+        this.bladelet,
+        this.catharticalness,
+        this.caulis,
+        this.chalcus,
+        this.chirotherium,
+        this.disdiapason,
+        this.enteradenological,
+        this.homocerc,
+        this.imporosity,
+        this.insistently,
+        this.intraparietal,
+        this.ivied,
+        this.maureen,
+        this.nonbookish,
+        this.nostochine,
+        this.nutcracker,
+        this.ofttimes,
+        this.phenocryst,
+        this.precoincident,
+        this.ramiferous,
+        this.stagmometer,
+        this.tetherball,
+        this.unshy,
+    });
+
+    factory ChemotherapeuticClass.fromMap(Map<String, dynamic> json) => ChemotherapeuticClass(
+        angioneurotic: json["angioneurotic"],
+        availment: json["availment"],
+        bladelet: json["bladelet"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        caulis: json["caulis"],
+        chalcus: json["chalcus"],
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        enteradenological: json["enteradenological"],
+        homocerc: json["homocerc"],
+        imporosity: json["imporosity"],
+        insistently: json["insistently"],
+        intraparietal: json["intraparietal"],
+        ivied: json["ivied"],
+        maureen: json["Maureen"],
+        nonbookish: json["nonbookish"],
+        nostochine: json["nostochine"],
+        nutcracker: json["nutcracker"],
+        ofttimes: json["ofttimes"],
+        phenocryst: json["phenocryst"],
+        precoincident: json["precoincident"],
+        ramiferous: json["ramiferous"],
+        stagmometer: json["stagmometer"],
+        tetherball: json["tetherball"],
+        unshy: json["unshy"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "angioneurotic": angioneurotic,
+        "availment": availment,
+        "bladelet": bladelet,
+        "catharticalness": catharticalness,
+        "caulis": caulis,
+        "chalcus": chalcus,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "enteradenological": enteradenological,
+        "homocerc": homocerc,
+        "imporosity": imporosity,
+        "insistently": insistently,
+        "intraparietal": intraparietal,
+        "ivied": ivied,
+        "Maureen": maureen,
+        "nonbookish": nonbookish,
+        "nostochine": nostochine,
+        "nutcracker": nutcracker,
+        "ofttimes": ofttimes,
+        "phenocryst": phenocryst,
+        "precoincident": precoincident,
+        "ramiferous": ramiferous,
+        "stagmometer": stagmometer,
+        "tetherball": tetherball,
+        "unshy": unshy,
+    };
+}
+
+class CimeliaClass {
+    final double catharticalness;
+    final int chirotherium;
+    final String disdiapason;
+    final bool homocerc;
+    final dynamic nonbookish;
+
+    CimeliaClass({
+        required this.catharticalness,
+        required this.chirotherium,
+        required this.disdiapason,
+        required this.homocerc,
+        required this.nonbookish,
+    });
+
+    factory CimeliaClass.fromMap(Map<String, dynamic> json) => CimeliaClass(
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        homocerc: json["homocerc"],
+        nonbookish: (json.containsKey("nonbookish") ? json["nonbookish"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "homocerc": homocerc,
+        "nonbookish": nonbookish,
+    };
+}
+
+class CoadjustClass {
+    final dynamic amidosulphonal;
+    final dynamic benny;
+    final double? catharticalness;
+    final int? chirotherium;
+    final String? disdiapason;
+    final dynamic ensnare;
+    final bool? homocerc;
+    final dynamic hybridizer;
+    final dynamic leastwise;
+    final dynamic lof;
+    final dynamic monkhood;
+    final dynamic netherlandish;
+    final dynamic nonbookish;
+    final dynamic peonism;
+    final dynamic phonelescope;
+    final dynamic porphyrogeniture;
+    final dynamic preindemnify;
+    final dynamic rosal;
+    final dynamic scalenous;
+    final dynamic scopine;
+    final dynamic sedaceae;
+    final dynamic suberinize;
+    final dynamic symbiot;
+    final dynamic tablefellow;
+    final dynamic unchargeable;
+
+    CoadjustClass({
+        this.amidosulphonal,
+        this.benny,
+        this.catharticalness,
+        this.chirotherium,
+        this.disdiapason,
+        this.ensnare,
+        this.homocerc,
+        this.hybridizer,
+        this.leastwise,
+        this.lof,
+        this.monkhood,
+        this.netherlandish,
+        this.nonbookish,
+        this.peonism,
+        this.phonelescope,
+        this.porphyrogeniture,
+        this.preindemnify,
+        this.rosal,
+        this.scalenous,
+        this.scopine,
+        this.sedaceae,
+        this.suberinize,
+        this.symbiot,
+        this.tablefellow,
+        this.unchargeable,
+    });
+
+    factory CoadjustClass.fromMap(Map<String, dynamic> json) => CoadjustClass(
+        amidosulphonal: json["amidosulphonal"],
+        benny: json["Benny"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        ensnare: json["ensnare"],
+        homocerc: json["homocerc"],
+        hybridizer: json["hybridizer"],
+        leastwise: json["leastwise"],
+        lof: json["lof"],
+        monkhood: json["monkhood"],
+        netherlandish: json["Netherlandish"],
+        nonbookish: json["nonbookish"],
+        peonism: json["peonism"],
+        phonelescope: json["Phonelescope"],
+        porphyrogeniture: json["porphyrogeniture"],
+        preindemnify: json["preindemnify"],
+        rosal: json["rosal"],
+        scalenous: json["scalenous"],
+        scopine: json["scopine"],
+        sedaceae: json["Sedaceae"],
+        suberinize: json["suberinize"],
+        symbiot: json["symbiot"],
+        tablefellow: json["tablefellow"],
+        unchargeable: json["unchargeable"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "amidosulphonal": amidosulphonal,
+        "Benny": benny,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "ensnare": ensnare,
+        "homocerc": homocerc,
+        "hybridizer": hybridizer,
+        "leastwise": leastwise,
+        "lof": lof,
+        "monkhood": monkhood,
+        "Netherlandish": netherlandish,
+        "nonbookish": nonbookish,
+        "peonism": peonism,
+        "Phonelescope": phonelescope,
+        "porphyrogeniture": porphyrogeniture,
+        "preindemnify": preindemnify,
+        "rosal": rosal,
+        "scalenous": scalenous,
+        "scopine": scopine,
+        "Sedaceae": sedaceae,
+        "suberinize": suberinize,
+        "symbiot": symbiot,
+        "tablefellow": tablefellow,
+        "unchargeable": unchargeable,
+    };
+}
+
+class CredulityClass {
+    final dynamic ammonolytic;
+    final dynamic bushmaster;
+    final dynamic considering;
+    final dynamic consuetudinary;
+    final dynamic embarras;
+    final dynamic fineness;
+    final dynamic flaithship;
+    final dynamic flavia;
+    final dynamic gruffly;
+    final dynamic hedychium;
+    final dynamic leadwort;
+    final dynamic overseriously;
+    final dynamic parabola;
+    final dynamic pectinatodenticulate;
+    final dynamic popean;
+    final dynamic pornocrat;
+    final dynamic quadrisect;
+    final dynamic seriality;
+    final dynamic vamphorn;
+    final dynamic wharp;
+
+    CredulityClass({
+        required this.ammonolytic,
+        required this.bushmaster,
+        required this.considering,
+        required this.consuetudinary,
+        required this.embarras,
+        required this.fineness,
+        required this.flaithship,
+        required this.flavia,
+        required this.gruffly,
+        required this.hedychium,
+        required this.leadwort,
+        required this.overseriously,
+        required this.parabola,
+        required this.pectinatodenticulate,
+        required this.popean,
+        required this.pornocrat,
+        required this.quadrisect,
+        required this.seriality,
+        required this.vamphorn,
+        required this.wharp,
+    });
+
+    factory CredulityClass.fromMap(Map<String, dynamic> json) => CredulityClass(
+        ammonolytic: (json.containsKey("ammonolytic") ? json["ammonolytic"] : throw FormatException('Missing required property')),
+        bushmaster: (json.containsKey("bushmaster") ? json["bushmaster"] : throw FormatException('Missing required property')),
+        considering: (json.containsKey("considering") ? json["considering"] : throw FormatException('Missing required property')),
+        consuetudinary: (json.containsKey("consuetudinary") ? json["consuetudinary"] : throw FormatException('Missing required property')),
+        embarras: (json.containsKey("embarras") ? json["embarras"] : throw FormatException('Missing required property')),
+        fineness: (json.containsKey("fineness") ? json["fineness"] : throw FormatException('Missing required property')),
+        flaithship: (json.containsKey("flaithship") ? json["flaithship"] : throw FormatException('Missing required property')),
+        flavia: (json.containsKey("Flavia") ? json["Flavia"] : throw FormatException('Missing required property')),
+        gruffly: (json.containsKey("gruffly") ? json["gruffly"] : throw FormatException('Missing required property')),
+        hedychium: (json.containsKey("Hedychium") ? json["Hedychium"] : throw FormatException('Missing required property')),
+        leadwort: (json.containsKey("leadwort") ? json["leadwort"] : throw FormatException('Missing required property')),
+        overseriously: (json.containsKey("overseriously") ? json["overseriously"] : throw FormatException('Missing required property')),
+        parabola: (json.containsKey("parabola") ? json["parabola"] : throw FormatException('Missing required property')),
+        pectinatodenticulate: (json.containsKey("pectinatodenticulate") ? json["pectinatodenticulate"] : throw FormatException('Missing required property')),
+        popean: (json.containsKey("Popean") ? json["Popean"] : throw FormatException('Missing required property')),
+        pornocrat: (json.containsKey("pornocrat") ? json["pornocrat"] : throw FormatException('Missing required property')),
+        quadrisect: (json.containsKey("quadrisect") ? json["quadrisect"] : throw FormatException('Missing required property')),
+        seriality: (json.containsKey("seriality") ? json["seriality"] : throw FormatException('Missing required property')),
+        vamphorn: (json.containsKey("vamphorn") ? json["vamphorn"] : throw FormatException('Missing required property')),
+        wharp: (json.containsKey("wharp") ? json["wharp"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "ammonolytic": ammonolytic,
+        "bushmaster": bushmaster,
+        "considering": considering,
+        "consuetudinary": consuetudinary,
+        "embarras": embarras,
+        "fineness": fineness,
+        "flaithship": flaithship,
+        "Flavia": flavia,
+        "gruffly": gruffly,
+        "Hedychium": hedychium,
+        "leadwort": leadwort,
+        "overseriously": overseriously,
+        "parabola": parabola,
+        "pectinatodenticulate": pectinatodenticulate,
+        "Popean": popean,
+        "pornocrat": pornocrat,
+        "quadrisect": quadrisect,
+        "seriality": seriality,
+        "vamphorn": vamphorn,
+        "wharp": wharp,
+    };
+}
+
+class DeruralizeClass {
+    final dynamic bockerel;
+    final dynamic boulder;
+    final dynamic churrus;
+    final dynamic counterdigged;
+    final dynamic dialogite;
+    final dynamic digenic;
+    final dynamic dunbird;
+    final dynamic ergatogyne;
+    final dynamic fiendful;
+    final dynamic jackrod;
+    final dynamic jehovistic;
+    final dynamic paninean;
+    final dynamic panther;
+    final dynamic placentigerous;
+    final dynamic romney;
+    final dynamic sparm;
+    final dynamic tocsin;
+    final dynamic unnicked;
+    final dynamic unstavable;
+    final dynamic windfirm;
+
+    DeruralizeClass({
+        required this.bockerel,
+        required this.boulder,
+        required this.churrus,
+        required this.counterdigged,
+        required this.dialogite,
+        required this.digenic,
+        required this.dunbird,
+        required this.ergatogyne,
+        required this.fiendful,
+        required this.jackrod,
+        required this.jehovistic,
+        required this.paninean,
+        required this.panther,
+        required this.placentigerous,
+        required this.romney,
+        required this.sparm,
+        required this.tocsin,
+        required this.unnicked,
+        required this.unstavable,
+        required this.windfirm,
+    });
+
+    factory DeruralizeClass.fromMap(Map<String, dynamic> json) => DeruralizeClass(
+        bockerel: (json.containsKey("bockerel") ? json["bockerel"] : throw FormatException('Missing required property')),
+        boulder: (json.containsKey("boulder") ? json["boulder"] : throw FormatException('Missing required property')),
+        churrus: (json.containsKey("churrus") ? json["churrus"] : throw FormatException('Missing required property')),
+        counterdigged: (json.containsKey("counterdigged") ? json["counterdigged"] : throw FormatException('Missing required property')),
+        dialogite: (json.containsKey("dialogite") ? json["dialogite"] : throw FormatException('Missing required property')),
+        digenic: (json.containsKey("digenic") ? json["digenic"] : throw FormatException('Missing required property')),
+        dunbird: (json.containsKey("dunbird") ? json["dunbird"] : throw FormatException('Missing required property')),
+        ergatogyne: (json.containsKey("ergatogyne") ? json["ergatogyne"] : throw FormatException('Missing required property')),
+        fiendful: (json.containsKey("fiendful") ? json["fiendful"] : throw FormatException('Missing required property')),
+        jackrod: (json.containsKey("jackrod") ? json["jackrod"] : throw FormatException('Missing required property')),
+        jehovistic: (json.containsKey("Jehovistic") ? json["Jehovistic"] : throw FormatException('Missing required property')),
+        paninean: (json.containsKey("Paninean") ? json["Paninean"] : throw FormatException('Missing required property')),
+        panther: (json.containsKey("panther") ? json["panther"] : throw FormatException('Missing required property')),
+        placentigerous: (json.containsKey("placentigerous") ? json["placentigerous"] : throw FormatException('Missing required property')),
+        romney: (json.containsKey("Romney") ? json["Romney"] : throw FormatException('Missing required property')),
+        sparm: (json.containsKey("sparm") ? json["sparm"] : throw FormatException('Missing required property')),
+        tocsin: (json.containsKey("tocsin") ? json["tocsin"] : throw FormatException('Missing required property')),
+        unnicked: (json.containsKey("unnicked") ? json["unnicked"] : throw FormatException('Missing required property')),
+        unstavable: (json.containsKey("unstavable") ? json["unstavable"] : throw FormatException('Missing required property')),
+        windfirm: (json.containsKey("windfirm") ? json["windfirm"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "bockerel": bockerel,
+        "boulder": boulder,
+        "churrus": churrus,
+        "counterdigged": counterdigged,
+        "dialogite": dialogite,
+        "digenic": digenic,
+        "dunbird": dunbird,
+        "ergatogyne": ergatogyne,
+        "fiendful": fiendful,
+        "jackrod": jackrod,
+        "Jehovistic": jehovistic,
+        "Paninean": paninean,
+        "panther": panther,
+        "placentigerous": placentigerous,
+        "Romney": romney,
+        "sparm": sparm,
+        "tocsin": tocsin,
+        "unnicked": unnicked,
+        "unstavable": unstavable,
+        "windfirm": windfirm,
+    };
+}
+
+class DiaereseClass {
+    final dynamic amoreuxia;
+    final dynamic ani;
+    final dynamic bernicle;
+    final dynamic blackwasher;
+    final dynamic blowhard;
+    final dynamic broma;
+    final dynamic closecross;
+    final dynamic congregationalism;
+    final dynamic grayly;
+    final dynamic historically;
+    final dynamic hoast;
+    final dynamic irretentive;
+    final dynamic parcener;
+    final dynamic pedder;
+    final dynamic pseudoanatomic;
+    final dynamic rhizocarpian;
+    final dynamic samel;
+    final dynamic silker;
+    final dynamic subdentated;
+    final dynamic subobscure;
+
+    DiaereseClass({
+        required this.amoreuxia,
+        required this.ani,
+        required this.bernicle,
+        required this.blackwasher,
+        required this.blowhard,
+        required this.broma,
+        required this.closecross,
+        required this.congregationalism,
+        required this.grayly,
+        required this.historically,
+        required this.hoast,
+        required this.irretentive,
+        required this.parcener,
+        required this.pedder,
+        required this.pseudoanatomic,
+        required this.rhizocarpian,
+        required this.samel,
+        required this.silker,
+        required this.subdentated,
+        required this.subobscure,
+    });
+
+    factory DiaereseClass.fromMap(Map<String, dynamic> json) => DiaereseClass(
+        amoreuxia: (json.containsKey("Amoreuxia") ? json["Amoreuxia"] : throw FormatException('Missing required property')),
+        ani: (json.containsKey("ani") ? json["ani"] : throw FormatException('Missing required property')),
+        bernicle: (json.containsKey("bernicle") ? json["bernicle"] : throw FormatException('Missing required property')),
+        blackwasher: (json.containsKey("blackwasher") ? json["blackwasher"] : throw FormatException('Missing required property')),
+        blowhard: (json.containsKey("blowhard") ? json["blowhard"] : throw FormatException('Missing required property')),
+        broma: (json.containsKey("broma") ? json["broma"] : throw FormatException('Missing required property')),
+        closecross: (json.containsKey("closecross") ? json["closecross"] : throw FormatException('Missing required property')),
+        congregationalism: (json.containsKey("congregationalism") ? json["congregationalism"] : throw FormatException('Missing required property')),
+        grayly: (json.containsKey("grayly") ? json["grayly"] : throw FormatException('Missing required property')),
+        historically: (json.containsKey("historically") ? json["historically"] : throw FormatException('Missing required property')),
+        hoast: (json.containsKey("hoast") ? json["hoast"] : throw FormatException('Missing required property')),
+        irretentive: (json.containsKey("irretentive") ? json["irretentive"] : throw FormatException('Missing required property')),
+        parcener: (json.containsKey("parcener") ? json["parcener"] : throw FormatException('Missing required property')),
+        pedder: (json.containsKey("pedder") ? json["pedder"] : throw FormatException('Missing required property')),
+        pseudoanatomic: (json.containsKey("pseudoanatomic") ? json["pseudoanatomic"] : throw FormatException('Missing required property')),
+        rhizocarpian: (json.containsKey("rhizocarpian") ? json["rhizocarpian"] : throw FormatException('Missing required property')),
+        samel: (json.containsKey("samel") ? json["samel"] : throw FormatException('Missing required property')),
+        silker: (json.containsKey("silker") ? json["silker"] : throw FormatException('Missing required property')),
+        subdentated: (json.containsKey("subdentated") ? json["subdentated"] : throw FormatException('Missing required property')),
+        subobscure: (json.containsKey("subobscure") ? json["subobscure"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "Amoreuxia": amoreuxia,
+        "ani": ani,
+        "bernicle": bernicle,
+        "blackwasher": blackwasher,
+        "blowhard": blowhard,
+        "broma": broma,
+        "closecross": closecross,
+        "congregationalism": congregationalism,
+        "grayly": grayly,
+        "historically": historically,
+        "hoast": hoast,
+        "irretentive": irretentive,
+        "parcener": parcener,
+        "pedder": pedder,
+        "pseudoanatomic": pseudoanatomic,
+        "rhizocarpian": rhizocarpian,
+        "samel": samel,
+        "silker": silker,
+        "subdentated": subdentated,
+        "subobscure": subobscure,
+    };
+}
+
+class Encrust {
+    final dynamic comradely;
+    final dynamic diacanthous;
+    final dynamic feminineness;
+    final dynamic gossamered;
+    final dynamic hibernia;
+    final dynamic hibiscus;
+    final dynamic lepidosauria;
+    final dynamic lollingly;
+    final dynamic manager;
+    final dynamic mechanic;
+    final dynamic overminuteness;
+    final dynamic papelonne;
+    final dynamic plebification;
+    final dynamic pugmiller;
+    final dynamic recoveror;
+    final dynamic spermatoblastic;
+    final dynamic syllidae;
+    final dynamic ungyved;
+    final dynamic whirlabout;
+    final dynamic woodenware;
+
+    Encrust({
+        required this.comradely,
+        required this.diacanthous,
+        required this.feminineness,
+        required this.gossamered,
+        required this.hibernia,
+        required this.hibiscus,
+        required this.lepidosauria,
+        required this.lollingly,
+        required this.manager,
+        required this.mechanic,
+        required this.overminuteness,
+        required this.papelonne,
+        required this.plebification,
+        required this.pugmiller,
+        required this.recoveror,
+        required this.spermatoblastic,
+        required this.syllidae,
+        required this.ungyved,
+        required this.whirlabout,
+        required this.woodenware,
+    });
+
+    factory Encrust.fromMap(Map<String, dynamic> json) => Encrust(
+        comradely: (json.containsKey("comradely") ? json["comradely"] : throw FormatException('Missing required property')),
+        diacanthous: (json.containsKey("diacanthous") ? json["diacanthous"] : throw FormatException('Missing required property')),
+        feminineness: (json.containsKey("feminineness") ? json["feminineness"] : throw FormatException('Missing required property')),
+        gossamered: (json.containsKey("gossamered") ? json["gossamered"] : throw FormatException('Missing required property')),
+        hibernia: (json.containsKey("Hibernia") ? json["Hibernia"] : throw FormatException('Missing required property')),
+        hibiscus: (json.containsKey("Hibiscus") ? json["Hibiscus"] : throw FormatException('Missing required property')),
+        lepidosauria: (json.containsKey("Lepidosauria") ? json["Lepidosauria"] : throw FormatException('Missing required property')),
+        lollingly: (json.containsKey("lollingly") ? json["lollingly"] : throw FormatException('Missing required property')),
+        manager: (json.containsKey("manager") ? json["manager"] : throw FormatException('Missing required property')),
+        mechanic: (json.containsKey("mechanic") ? json["mechanic"] : throw FormatException('Missing required property')),
+        overminuteness: (json.containsKey("overminuteness") ? json["overminuteness"] : throw FormatException('Missing required property')),
+        papelonne: (json.containsKey("papelonne") ? json["papelonne"] : throw FormatException('Missing required property')),
+        plebification: (json.containsKey("plebification") ? json["plebification"] : throw FormatException('Missing required property')),
+        pugmiller: (json.containsKey("pugmiller") ? json["pugmiller"] : throw FormatException('Missing required property')),
+        recoveror: (json.containsKey("recoveror") ? json["recoveror"] : throw FormatException('Missing required property')),
+        spermatoblastic: (json.containsKey("spermatoblastic") ? json["spermatoblastic"] : throw FormatException('Missing required property')),
+        syllidae: (json.containsKey("Syllidae") ? json["Syllidae"] : throw FormatException('Missing required property')),
+        ungyved: (json.containsKey("ungyved") ? json["ungyved"] : throw FormatException('Missing required property')),
+        whirlabout: (json.containsKey("whirlabout") ? json["whirlabout"] : throw FormatException('Missing required property')),
+        woodenware: (json.containsKey("woodenware") ? json["woodenware"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "comradely": comradely,
+        "diacanthous": diacanthous,
+        "feminineness": feminineness,
+        "gossamered": gossamered,
+        "Hibernia": hibernia,
+        "Hibiscus": hibiscus,
+        "Lepidosauria": lepidosauria,
+        "lollingly": lollingly,
+        "manager": manager,
+        "mechanic": mechanic,
+        "overminuteness": overminuteness,
+        "papelonne": papelonne,
+        "plebification": plebification,
+        "pugmiller": pugmiller,
+        "recoveror": recoveror,
+        "spermatoblastic": spermatoblastic,
+        "Syllidae": syllidae,
+        "ungyved": ungyved,
+        "whirlabout": whirlabout,
+        "woodenware": woodenware,
+    };
+}
+
+class FagginglyClass {
+    final dynamic abranchian;
+    final dynamic aculeiform;
+    final dynamic adiaphoristic;
+    final dynamic adoptionism;
+    final dynamic anglic;
+    final dynamic antrotomy;
+    final dynamic coerciveness;
+    final dynamic decorist;
+    final dynamic duckhood;
+    final dynamic heteromeri;
+    final dynamic hypochnose;
+    final dynamic lochage;
+    final dynamic melee;
+    final dynamic nonconformitant;
+    final dynamic poinsettia;
+    final dynamic putatively;
+    final dynamic semivolatile;
+    final dynamic soleas;
+    final dynamic unfastenable;
+    final dynamic unmillinered;
+
+    FagginglyClass({
+        required this.abranchian,
+        required this.aculeiform,
+        required this.adiaphoristic,
+        required this.adoptionism,
+        required this.anglic,
+        required this.antrotomy,
+        required this.coerciveness,
+        required this.decorist,
+        required this.duckhood,
+        required this.heteromeri,
+        required this.hypochnose,
+        required this.lochage,
+        required this.melee,
+        required this.nonconformitant,
+        required this.poinsettia,
+        required this.putatively,
+        required this.semivolatile,
+        required this.soleas,
+        required this.unfastenable,
+        required this.unmillinered,
+    });
+
+    factory FagginglyClass.fromMap(Map<String, dynamic> json) => FagginglyClass(
+        abranchian: (json.containsKey("abranchian") ? json["abranchian"] : throw FormatException('Missing required property')),
+        aculeiform: (json.containsKey("aculeiform") ? json["aculeiform"] : throw FormatException('Missing required property')),
+        adiaphoristic: (json.containsKey("adiaphoristic") ? json["adiaphoristic"] : throw FormatException('Missing required property')),
+        adoptionism: (json.containsKey("adoptionism") ? json["adoptionism"] : throw FormatException('Missing required property')),
+        anglic: (json.containsKey("Anglic") ? json["Anglic"] : throw FormatException('Missing required property')),
+        antrotomy: (json.containsKey("antrotomy") ? json["antrotomy"] : throw FormatException('Missing required property')),
+        coerciveness: (json.containsKey("coerciveness") ? json["coerciveness"] : throw FormatException('Missing required property')),
+        decorist: (json.containsKey("decorist") ? json["decorist"] : throw FormatException('Missing required property')),
+        duckhood: (json.containsKey("duckhood") ? json["duckhood"] : throw FormatException('Missing required property')),
+        heteromeri: (json.containsKey("Heteromeri") ? json["Heteromeri"] : throw FormatException('Missing required property')),
+        hypochnose: (json.containsKey("hypochnose") ? json["hypochnose"] : throw FormatException('Missing required property')),
+        lochage: (json.containsKey("lochage") ? json["lochage"] : throw FormatException('Missing required property')),
+        melee: (json.containsKey("melee") ? json["melee"] : throw FormatException('Missing required property')),
+        nonconformitant: (json.containsKey("nonconformitant") ? json["nonconformitant"] : throw FormatException('Missing required property')),
+        poinsettia: (json.containsKey("Poinsettia") ? json["Poinsettia"] : throw FormatException('Missing required property')),
+        putatively: (json.containsKey("putatively") ? json["putatively"] : throw FormatException('Missing required property')),
+        semivolatile: (json.containsKey("semivolatile") ? json["semivolatile"] : throw FormatException('Missing required property')),
+        soleas: (json.containsKey("soleas") ? json["soleas"] : throw FormatException('Missing required property')),
+        unfastenable: (json.containsKey("unfastenable") ? json["unfastenable"] : throw FormatException('Missing required property')),
+        unmillinered: (json.containsKey("unmillinered") ? json["unmillinered"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "abranchian": abranchian,
+        "aculeiform": aculeiform,
+        "adiaphoristic": adiaphoristic,
+        "adoptionism": adoptionism,
+        "Anglic": anglic,
+        "antrotomy": antrotomy,
+        "coerciveness": coerciveness,
+        "decorist": decorist,
+        "duckhood": duckhood,
+        "Heteromeri": heteromeri,
+        "hypochnose": hypochnose,
+        "lochage": lochage,
+        "melee": melee,
+        "nonconformitant": nonconformitant,
+        "Poinsettia": poinsettia,
+        "putatively": putatively,
+        "semivolatile": semivolatile,
+        "soleas": soleas,
+        "unfastenable": unfastenable,
+        "unmillinered": unmillinered,
+    };
+}
+
+class FenkClass {
+    final dynamic apoise;
+    final dynamic astronomize;
+    final dynamic cockhorse;
+    final dynamic copular;
+    final dynamic dagomba;
+    final dynamic draffy;
+    final dynamic foreigner;
+    final dynamic guyandot;
+    final dynamic neurogliosis;
+    final dynamic osmious;
+    final dynamic palpitate;
+    final dynamic rebukeable;
+    final dynamic reinwardtia;
+    final dynamic reservatory;
+    final dynamic scalt;
+    final dynamic scripturalize;
+    final dynamic tintometer;
+    final dynamic tritoness;
+    final dynamic undergrade;
+    final dynamic undermountain;
+
+    FenkClass({
+        required this.apoise,
+        required this.astronomize,
+        required this.cockhorse,
+        required this.copular,
+        required this.dagomba,
+        required this.draffy,
+        required this.foreigner,
+        required this.guyandot,
+        required this.neurogliosis,
+        required this.osmious,
+        required this.palpitate,
+        required this.rebukeable,
+        required this.reinwardtia,
+        required this.reservatory,
+        required this.scalt,
+        required this.scripturalize,
+        required this.tintometer,
+        required this.tritoness,
+        required this.undergrade,
+        required this.undermountain,
+    });
+
+    factory FenkClass.fromMap(Map<String, dynamic> json) => FenkClass(
+        apoise: (json.containsKey("apoise") ? json["apoise"] : throw FormatException('Missing required property')),
+        astronomize: (json.containsKey("astronomize") ? json["astronomize"] : throw FormatException('Missing required property')),
+        cockhorse: (json.containsKey("cockhorse") ? json["cockhorse"] : throw FormatException('Missing required property')),
+        copular: (json.containsKey("copular") ? json["copular"] : throw FormatException('Missing required property')),
+        dagomba: (json.containsKey("Dagomba") ? json["Dagomba"] : throw FormatException('Missing required property')),
+        draffy: (json.containsKey("draffy") ? json["draffy"] : throw FormatException('Missing required property')),
+        foreigner: (json.containsKey("foreigner") ? json["foreigner"] : throw FormatException('Missing required property')),
+        guyandot: (json.containsKey("Guyandot") ? json["Guyandot"] : throw FormatException('Missing required property')),
+        neurogliosis: (json.containsKey("neurogliosis") ? json["neurogliosis"] : throw FormatException('Missing required property')),
+        osmious: (json.containsKey("osmious") ? json["osmious"] : throw FormatException('Missing required property')),
+        palpitate: (json.containsKey("palpitate") ? json["palpitate"] : throw FormatException('Missing required property')),
+        rebukeable: (json.containsKey("rebukeable") ? json["rebukeable"] : throw FormatException('Missing required property')),
+        reinwardtia: (json.containsKey("Reinwardtia") ? json["Reinwardtia"] : throw FormatException('Missing required property')),
+        reservatory: (json.containsKey("reservatory") ? json["reservatory"] : throw FormatException('Missing required property')),
+        scalt: (json.containsKey("scalt") ? json["scalt"] : throw FormatException('Missing required property')),
+        scripturalize: (json.containsKey("scripturalize") ? json["scripturalize"] : throw FormatException('Missing required property')),
+        tintometer: (json.containsKey("tintometer") ? json["tintometer"] : throw FormatException('Missing required property')),
+        tritoness: (json.containsKey("Tritoness") ? json["Tritoness"] : throw FormatException('Missing required property')),
+        undergrade: (json.containsKey("undergrade") ? json["undergrade"] : throw FormatException('Missing required property')),
+        undermountain: (json.containsKey("undermountain") ? json["undermountain"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "apoise": apoise,
+        "astronomize": astronomize,
+        "cockhorse": cockhorse,
+        "copular": copular,
+        "Dagomba": dagomba,
+        "draffy": draffy,
+        "foreigner": foreigner,
+        "Guyandot": guyandot,
+        "neurogliosis": neurogliosis,
+        "osmious": osmious,
+        "palpitate": palpitate,
+        "rebukeable": rebukeable,
+        "Reinwardtia": reinwardtia,
+        "reservatory": reservatory,
+        "scalt": scalt,
+        "scripturalize": scripturalize,
+        "tintometer": tintometer,
+        "Tritoness": tritoness,
+        "undergrade": undergrade,
+        "undermountain": undermountain,
+    };
+}
+
+class FlagmakingClass {
+    final dynamic albarco;
+    final dynamic bunodonta;
+    final dynamic hornify;
+    final dynamic hydrocorisae;
+    final dynamic hypoglossus;
+    final dynamic inexpiably;
+    final dynamic ingratitude;
+    final dynamic ladyfly;
+    final dynamic medicament;
+    final dynamic monogrammatic;
+    final dynamic nobbut;
+    final dynamic notacanthidae;
+    final dynamic polyplacophore;
+    final dynamic proexercise;
+    final dynamic protoplast;
+    final dynamic puzzling;
+    final dynamic splanchnoskeleton;
+    final dynamic unloveliness;
+    final dynamic unquarantined;
+    final dynamic unrenounceable;
+
+    FlagmakingClass({
+        required this.albarco,
+        required this.bunodonta,
+        required this.hornify,
+        required this.hydrocorisae,
+        required this.hypoglossus,
+        required this.inexpiably,
+        required this.ingratitude,
+        required this.ladyfly,
+        required this.medicament,
+        required this.monogrammatic,
+        required this.nobbut,
+        required this.notacanthidae,
+        required this.polyplacophore,
+        required this.proexercise,
+        required this.protoplast,
+        required this.puzzling,
+        required this.splanchnoskeleton,
+        required this.unloveliness,
+        required this.unquarantined,
+        required this.unrenounceable,
+    });
+
+    factory FlagmakingClass.fromMap(Map<String, dynamic> json) => FlagmakingClass(
+        albarco: (json.containsKey("albarco") ? json["albarco"] : throw FormatException('Missing required property')),
+        bunodonta: (json.containsKey("Bunodonta") ? json["Bunodonta"] : throw FormatException('Missing required property')),
+        hornify: (json.containsKey("hornify") ? json["hornify"] : throw FormatException('Missing required property')),
+        hydrocorisae: (json.containsKey("Hydrocorisae") ? json["Hydrocorisae"] : throw FormatException('Missing required property')),
+        hypoglossus: (json.containsKey("hypoglossus") ? json["hypoglossus"] : throw FormatException('Missing required property')),
+        inexpiably: (json.containsKey("inexpiably") ? json["inexpiably"] : throw FormatException('Missing required property')),
+        ingratitude: (json.containsKey("ingratitude") ? json["ingratitude"] : throw FormatException('Missing required property')),
+        ladyfly: (json.containsKey("ladyfly") ? json["ladyfly"] : throw FormatException('Missing required property')),
+        medicament: (json.containsKey("medicament") ? json["medicament"] : throw FormatException('Missing required property')),
+        monogrammatic: (json.containsKey("monogrammatic") ? json["monogrammatic"] : throw FormatException('Missing required property')),
+        nobbut: (json.containsKey("nobbut") ? json["nobbut"] : throw FormatException('Missing required property')),
+        notacanthidae: (json.containsKey("Notacanthidae") ? json["Notacanthidae"] : throw FormatException('Missing required property')),
+        polyplacophore: (json.containsKey("polyplacophore") ? json["polyplacophore"] : throw FormatException('Missing required property')),
+        proexercise: (json.containsKey("proexercise") ? json["proexercise"] : throw FormatException('Missing required property')),
+        protoplast: (json.containsKey("protoplast") ? json["protoplast"] : throw FormatException('Missing required property')),
+        puzzling: (json.containsKey("puzzling") ? json["puzzling"] : throw FormatException('Missing required property')),
+        splanchnoskeleton: (json.containsKey("splanchnoskeleton") ? json["splanchnoskeleton"] : throw FormatException('Missing required property')),
+        unloveliness: (json.containsKey("unloveliness") ? json["unloveliness"] : throw FormatException('Missing required property')),
+        unquarantined: (json.containsKey("unquarantined") ? json["unquarantined"] : throw FormatException('Missing required property')),
+        unrenounceable: (json.containsKey("unrenounceable") ? json["unrenounceable"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "albarco": albarco,
+        "Bunodonta": bunodonta,
+        "hornify": hornify,
+        "Hydrocorisae": hydrocorisae,
+        "hypoglossus": hypoglossus,
+        "inexpiably": inexpiably,
+        "ingratitude": ingratitude,
+        "ladyfly": ladyfly,
+        "medicament": medicament,
+        "monogrammatic": monogrammatic,
+        "nobbut": nobbut,
+        "Notacanthidae": notacanthidae,
+        "polyplacophore": polyplacophore,
+        "proexercise": proexercise,
+        "protoplast": protoplast,
+        "puzzling": puzzling,
+        "splanchnoskeleton": splanchnoskeleton,
+        "unloveliness": unloveliness,
+        "unquarantined": unquarantined,
+        "unrenounceable": unrenounceable,
+    };
+}
+
+class HemocoeleClass {
+    final dynamic acrogamy;
+    final dynamic amelification;
+    final dynamic autobiographic;
+    final dynamic berat;
+    final double? catharticalness;
+    final int? chirotherium;
+    final String? disdiapason;
+    final dynamic disproportionably;
+    final dynamic erythrite;
+    final dynamic graphic;
+    final dynamic hepatological;
+    final bool? homocerc;
+    final dynamic incommensurably;
+    final dynamic misaffirm;
+    final dynamic nonbookish;
+    final dynamic pocketbook;
+    final dynamic sclerometric;
+    final dynamic stambouline;
+    final dynamic stickpin;
+    final dynamic tubulure;
+    final dynamic undelated;
+    final dynamic unsalt;
+    final dynamic untutelar;
+    final dynamic vagrant;
+    final dynamic walt;
+
+    HemocoeleClass({
+        this.acrogamy,
+        this.amelification,
+        this.autobiographic,
+        this.berat,
+        this.catharticalness,
+        this.chirotherium,
+        this.disdiapason,
+        this.disproportionably,
+        this.erythrite,
+        this.graphic,
+        this.hepatological,
+        this.homocerc,
+        this.incommensurably,
+        this.misaffirm,
+        this.nonbookish,
+        this.pocketbook,
+        this.sclerometric,
+        this.stambouline,
+        this.stickpin,
+        this.tubulure,
+        this.undelated,
+        this.unsalt,
+        this.untutelar,
+        this.vagrant,
+        this.walt,
+    });
+
+    factory HemocoeleClass.fromMap(Map<String, dynamic> json) => HemocoeleClass(
+        acrogamy: json["acrogamy"],
+        amelification: json["amelification"],
+        autobiographic: json["autobiographic"],
+        berat: json["berat"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        disproportionably: json["disproportionably"],
+        erythrite: json["erythrite"],
+        graphic: json["graphic"],
+        hepatological: json["hepatological"],
+        homocerc: json["homocerc"],
+        incommensurably: json["incommensurably"],
+        misaffirm: json["misaffirm"],
+        nonbookish: json["nonbookish"],
+        pocketbook: json["pocketbook"],
+        sclerometric: json["sclerometric"],
+        stambouline: json["stambouline"],
+        stickpin: json["stickpin"],
+        tubulure: json["tubulure"],
+        undelated: json["undelated"],
+        unsalt: json["unsalt"],
+        untutelar: json["untutelar"],
+        vagrant: json["vagrant"],
+        walt: json["Walt"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "acrogamy": acrogamy,
+        "amelification": amelification,
+        "autobiographic": autobiographic,
+        "berat": berat,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "disproportionably": disproportionably,
+        "erythrite": erythrite,
+        "graphic": graphic,
+        "hepatological": hepatological,
+        "homocerc": homocerc,
+        "incommensurably": incommensurably,
+        "misaffirm": misaffirm,
+        "nonbookish": nonbookish,
+        "pocketbook": pocketbook,
+        "sclerometric": sclerometric,
+        "stambouline": stambouline,
+        "stickpin": stickpin,
+        "tubulure": tubulure,
+        "undelated": undelated,
+        "unsalt": unsalt,
+        "untutelar": untutelar,
+        "vagrant": vagrant,
+        "Walt": walt,
+    };
+}
+
+class Interacinar {
+    final double assapan;
+    final bool benefactorship;
+    final String triseriatim;
+    final int tubbing;
+    final dynamic untrimmed;
+
+    Interacinar({
+        required this.assapan,
+        required this.benefactorship,
+        required this.triseriatim,
+        required this.tubbing,
+        required this.untrimmed,
+    });
+
+    factory Interacinar.fromMap(Map<String, dynamic> json) => Interacinar(
+        assapan: json["assapan"]?.toDouble(),
+        benefactorship: json["benefactorship"],
+        triseriatim: json["triseriatim"],
+        tubbing: json["tubbing"],
+        untrimmed: (json.containsKey("untrimmed") ? json["untrimmed"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "assapan": assapan,
+        "benefactorship": benefactorship,
+        "triseriatim": triseriatim,
+        "tubbing": tubbing,
+        "untrimmed": untrimmed,
+    };
+}
diff --git a/head/dart/test/inputs/json/priority/combinations2.json/copy-with-true--bb7e994c05fe/TopLevel.dart b/head/dart/test/inputs/json/priority/combinations2.json/copy-with-true--bb7e994c05fe/TopLevel.dart
new file mode 100644
index 0000000..ecd9786
--- /dev/null
+++ b/head/dart/test/inputs/json/priority/combinations2.json/copy-with-true--bb7e994c05fe/TopLevel.dart
@@ -0,0 +1,1666 @@
+// To parse this JSON data, do
+//
+//     final topLevel = topLevelFromJson(jsonString);
+
+import 'dart:convert';
+
+TopLevel topLevelFromJson(String str) => TopLevel.fromJson(json.decode(str));
+
+String topLevelToJson(TopLevel data) => json.encode(data.toJson());
+
+class TopLevel {
+    final List<dynamic> abranchiata;
+    final List<dynamic> academe;
+    final List<dynamic> acquirable;
+    final List<dynamic> aerometry;
+    final List<dynamic> alexin;
+    final List<dynamic> alleviate;
+    final List<dynamic> amaas;
+    final List<dynamic> ambassage;
+    final List<Amphithyron?> amphithyron;
+    final List<String?> andriana;
+    final List<dynamic> ankee;
+    final List<Map<String, int?>?> annihilator;
+    final dynamic annulose;
+    final List<dynamic> ansarie;
+    final List<dynamic> aphasia;
+    final List<dynamic> asprawl;
+    final List<bool?> attractive;
+    final Map<String, int> barksome;
+    final List<dynamic> bedesman;
+    final List<dynamic> belard;
+    final List<dynamic> bocking;
+    final List<dynamic> brawlingly;
+    final List<dynamic> brookie;
+    final List<dynamic> bumboatman;
+    final List<dynamic> bystreet;
+    final List<dynamic> calaverite;
+    final List<dynamic> catallactic;
+    final List<dynamic> cemental;
+    final List<dynamic> chytridiaceae;
+    final List<dynamic> discordia;
+    final List<dynamic> endomyces;
+    final List<dynamic> epinephelidae;
+    final List<dynamic> eupatorium;
+    final List<dynamic> gryphosaurus;
+    final List<dynamic> koryak;
+    final List<dynamic> lavinia;
+    final List<dynamic> oskar;
+    final List<dynamic> rebecca;
+    final List<dynamic> rhomboganoidei;
+    final bool rigsmal;
+    final List<dynamic> ruellia;
+    final List<dynamic> school;
+    final List<dynamic> shakespearolater;
+    final List<double> svan;
+    final Map<String, double> wayao;
+
+    TopLevel({
+        required this.abranchiata,
+        required this.academe,
+        required this.acquirable,
+        required this.aerometry,
+        required this.alexin,
+        required this.alleviate,
+        required this.amaas,
+        required this.ambassage,
+        required this.amphithyron,
+        required this.andriana,
+        required this.ankee,
+        required this.annihilator,
+        required this.annulose,
+        required this.ansarie,
+        required this.aphasia,
+        required this.asprawl,
+        required this.attractive,
+        required this.barksome,
+        required this.bedesman,
+        required this.belard,
+        required this.bocking,
+        required this.brawlingly,
+        required this.brookie,
+        required this.bumboatman,
+        required this.bystreet,
+        required this.calaverite,
+        required this.catallactic,
+        required this.cemental,
+        required this.chytridiaceae,
+        required this.discordia,
+        required this.endomyces,
+        required this.epinephelidae,
+        required this.eupatorium,
+        required this.gryphosaurus,
+        required this.koryak,
+        required this.lavinia,
+        required this.oskar,
+        required this.rebecca,
+        required this.rhomboganoidei,
+        required this.rigsmal,
+        required this.ruellia,
+        required this.school,
+        required this.shakespearolater,
+        required this.svan,
+        required this.wayao,
+    });
+
+    TopLevel copyWith({
+        List<dynamic>? abranchiata,
+        List<dynamic>? academe,
+        List<dynamic>? acquirable,
+        List<dynamic>? aerometry,
+        List<dynamic>? alexin,
+        List<dynamic>? alleviate,
+        List<dynamic>? amaas,
+        List<dynamic>? ambassage,
+        List<Amphithyron?>? amphithyron,
+        List<String?>? andriana,
+        List<dynamic>? ankee,
+        List<Map<String, int?>?>? annihilator,
+        dynamic annulose,
+        List<dynamic>? ansarie,
+        List<dynamic>? aphasia,
+        List<dynamic>? asprawl,
+        List<bool?>? attractive,
+        Map<String, int>? barksome,
+        List<dynamic>? bedesman,
+        List<dynamic>? belard,
+        List<dynamic>? bocking,
+        List<dynamic>? brawlingly,
+        List<dynamic>? brookie,
+        List<dynamic>? bumboatman,
+        List<dynamic>? bystreet,
+        List<dynamic>? calaverite,
+        List<dynamic>? catallactic,
+        List<dynamic>? cemental,
+        List<dynamic>? chytridiaceae,
+        List<dynamic>? discordia,
+        List<dynamic>? endomyces,
+        List<dynamic>? epinephelidae,
+        List<dynamic>? eupatorium,
+        List<dynamic>? gryphosaurus,
+        List<dynamic>? koryak,
+        List<dynamic>? lavinia,
+        List<dynamic>? oskar,
+        List<dynamic>? rebecca,
+        List<dynamic>? rhomboganoidei,
+        bool? rigsmal,
+        List<dynamic>? ruellia,
+        List<dynamic>? school,
+        List<dynamic>? shakespearolater,
+        List<double>? svan,
+        Map<String, double>? wayao,
+    }) => 
+        TopLevel(
+            abranchiata: abranchiata ?? this.abranchiata,
+            academe: academe ?? this.academe,
+            acquirable: acquirable ?? this.acquirable,
+            aerometry: aerometry ?? this.aerometry,
+            alexin: alexin ?? this.alexin,
+            alleviate: alleviate ?? this.alleviate,
+            amaas: amaas ?? this.amaas,
+            ambassage: ambassage ?? this.ambassage,
+            amphithyron: amphithyron ?? this.amphithyron,
+            andriana: andriana ?? this.andriana,
+            ankee: ankee ?? this.ankee,
+            annihilator: annihilator ?? this.annihilator,
+            annulose: annulose ?? this.annulose,
+            ansarie: ansarie ?? this.ansarie,
+            aphasia: aphasia ?? this.aphasia,
+            asprawl: asprawl ?? this.asprawl,
+            attractive: attractive ?? this.attractive,
+            barksome: barksome ?? this.barksome,
+            bedesman: bedesman ?? this.bedesman,
+            belard: belard ?? this.belard,
+            bocking: bocking ?? this.bocking,
+            brawlingly: brawlingly ?? this.brawlingly,
+            brookie: brookie ?? this.brookie,
+            bumboatman: bumboatman ?? this.bumboatman,
+            bystreet: bystreet ?? this.bystreet,
+            calaverite: calaverite ?? this.calaverite,
+            catallactic: catallactic ?? this.catallactic,
+            cemental: cemental ?? this.cemental,
+            chytridiaceae: chytridiaceae ?? this.chytridiaceae,
+            discordia: discordia ?? this.discordia,
+            endomyces: endomyces ?? this.endomyces,
+            epinephelidae: epinephelidae ?? this.epinephelidae,
+            eupatorium: eupatorium ?? this.eupatorium,
+            gryphosaurus: gryphosaurus ?? this.gryphosaurus,
+            koryak: koryak ?? this.koryak,
+            lavinia: lavinia ?? this.lavinia,
+            oskar: oskar ?? this.oskar,
+            rebecca: rebecca ?? this.rebecca,
+            rhomboganoidei: rhomboganoidei ?? this.rhomboganoidei,
+            rigsmal: rigsmal ?? this.rigsmal,
+            ruellia: ruellia ?? this.ruellia,
+            school: school ?? this.school,
+            shakespearolater: shakespearolater ?? this.shakespearolater,
+            svan: svan ?? this.svan,
+            wayao: wayao ?? this.wayao,
+        );
+
+    factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
+        abranchiata: List<dynamic>.from(json["Abranchiata"].map((x) => x)),
+        academe: List<dynamic>.from(json["academe"].map((x) => x)),
+        acquirable: List<dynamic>.from(json["acquirable"].map((x) => x)),
+        aerometry: List<dynamic>.from(json["aerometry"].map((x) => x)),
+        alexin: List<dynamic>.from(json["alexin"].map((x) => x)),
+        alleviate: List<dynamic>.from(json["alleviate"].map((x) => x)),
+        amaas: List<dynamic>.from(json["amaas"].map((x) => x)),
+        ambassage: List<dynamic>.from(json["ambassage"].map((x) => x)),
+        amphithyron: List<Amphithyron?>.from(json["amphithyron"].map((x) => x == null ? null : Amphithyron.fromJson(x))),
+        andriana: List<String?>.from(json["Andriana"].map((x) => x)),
+        ankee: List<dynamic>.from(json["ankee"].map((x) => x)),
+        annihilator: List<Map<String, int?>?>.from(json["annihilator"].map((x) => x == null ? null : Map.from(x!).map((k, v) => MapEntry<String, int?>(k, v)))),
+        annulose: (json.containsKey("annulose") ? json["annulose"] : throw FormatException('Missing required property')),
+        ansarie: List<dynamic>.from(json["Ansarie"].map((x) => x)),
+        aphasia: List<dynamic>.from(json["aphasia"].map((x) => x)),
+        asprawl: List<dynamic>.from(json["asprawl"].map((x) => x)),
+        attractive: List<bool?>.from(json["attractive"].map((x) => x)),
+        barksome: Map.from(json["barksome"]).map((k, v) => MapEntry<String, int>(k, v)),
+        bedesman: List<dynamic>.from(json["bedesman"].map((x) => x)),
+        belard: List<dynamic>.from(json["belard"].map((x) => x)),
+        bocking: List<dynamic>.from(json["bocking"].map((x) => x)),
+        brawlingly: List<dynamic>.from(json["brawlingly"].map((x) => x)),
+        brookie: List<dynamic>.from(json["brookie"].map((x) => x)),
+        bumboatman: List<dynamic>.from(json["bumboatman"].map((x) => x)),
+        bystreet: List<dynamic>.from(json["bystreet"].map((x) => x)),
+        calaverite: List<dynamic>.from(json["calaverite"].map((x) => x)),
+        catallactic: List<dynamic>.from(json["catallactic"].map((x) => x)),
+        cemental: List<dynamic>.from(json["cemental"].map((x) => x)),
+        chytridiaceae: List<dynamic>.from(json["Chytridiaceae"].map((x) => x)),
+        discordia: List<dynamic>.from(json["Discordia"].map((x) => x)),
+        endomyces: List<dynamic>.from(json["Endomyces"].map((x) => x)),
+        epinephelidae: List<dynamic>.from(json["Epinephelidae"].map((x) => x)),
+        eupatorium: List<dynamic>.from(json["Eupatorium"].map((x) => x)),
+        gryphosaurus: List<dynamic>.from(json["Gryphosaurus"].map((x) => x)),
+        koryak: List<dynamic>.from(json["Koryak"].map((x) => x)),
+        lavinia: List<dynamic>.from(json["Lavinia"].map((x) => x)),
+        oskar: List<dynamic>.from(json["Oskar"].map((x) => x)),
+        rebecca: List<dynamic>.from(json["Rebecca"].map((x) => x)),
+        rhomboganoidei: List<dynamic>.from(json["Rhomboganoidei"].map((x) => x)),
+        rigsmal: json["Rigsmal"],
+        ruellia: List<dynamic>.from(json["Ruellia"].map((x) => x)),
+        school: List<dynamic>.from(json["School"].map((x) => x)),
+        shakespearolater: List<dynamic>.from(json["Shakespearolater"].map((x) => x)),
+        svan: List<double>.from(json["Svan"].map((x) => x?.toDouble())),
+        wayao: Map.from(json["Wayao"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "Abranchiata": List<dynamic>.from(abranchiata.map((x) => x)),
+        "academe": List<dynamic>.from(academe.map((x) => x)),
+        "acquirable": List<dynamic>.from(acquirable.map((x) => x)),
+        "aerometry": List<dynamic>.from(aerometry.map((x) => x)),
+        "alexin": List<dynamic>.from(alexin.map((x) => x)),
+        "alleviate": List<dynamic>.from(alleviate.map((x) => x)),
+        "amaas": List<dynamic>.from(amaas.map((x) => x)),
+        "ambassage": List<dynamic>.from(ambassage.map((x) => x)),
+        "amphithyron": List<dynamic>.from(amphithyron.map((x) => x?.toJson())),
+        "Andriana": List<dynamic>.from(andriana.map((x) => x)),
+        "ankee": List<dynamic>.from(ankee.map((x) => x)),
+        "annihilator": List<dynamic>.from(annihilator.map((x) => x == null ? null : Map.from(x!).map((k, v) => MapEntry<String, dynamic>(k, v)))),
+        "annulose": annulose,
+        "Ansarie": List<dynamic>.from(ansarie.map((x) => x)),
+        "aphasia": List<dynamic>.from(aphasia.map((x) => x)),
+        "asprawl": List<dynamic>.from(asprawl.map((x) => x)),
+        "attractive": List<dynamic>.from(attractive.map((x) => x)),
+        "barksome": Map.from(barksome).map((k, v) => MapEntry<String, dynamic>(k, v)),
+        "bedesman": List<dynamic>.from(bedesman.map((x) => x)),
+        "belard": List<dynamic>.from(belard.map((x) => x)),
+        "bocking": List<dynamic>.from(bocking.map((x) => x)),
+        "brawlingly": List<dynamic>.from(brawlingly.map((x) => x)),
+        "brookie": List<dynamic>.from(brookie.map((x) => x)),
+        "bumboatman": List<dynamic>.from(bumboatman.map((x) => x)),
+        "bystreet": List<dynamic>.from(bystreet.map((x) => x)),
+        "calaverite": List<dynamic>.from(calaverite.map((x) => x)),
+        "catallactic": List<dynamic>.from(catallactic.map((x) => x)),
+        "cemental": List<dynamic>.from(cemental.map((x) => x)),
+        "Chytridiaceae": List<dynamic>.from(chytridiaceae.map((x) => x)),
+        "Discordia": List<dynamic>.from(discordia.map((x) => x)),
+        "Endomyces": List<dynamic>.from(endomyces.map((x) => x)),
+        "Epinephelidae": List<dynamic>.from(epinephelidae.map((x) => x)),
+        "Eupatorium": List<dynamic>.from(eupatorium.map((x) => x)),
+        "Gryphosaurus": List<dynamic>.from(gryphosaurus.map((x) => x)),
+        "Koryak": List<dynamic>.from(koryak.map((x) => x)),
+        "Lavinia": List<dynamic>.from(lavinia.map((x) => x)),
+        "Oskar": List<dynamic>.from(oskar.map((x) => x)),
+        "Rebecca": List<dynamic>.from(rebecca.map((x) => x)),
+        "Rhomboganoidei": List<dynamic>.from(rhomboganoidei.map((x) => x)),
+        "Rigsmal": rigsmal,
+        "Ruellia": List<dynamic>.from(ruellia.map((x) => x)),
+        "School": List<dynamic>.from(school.map((x) => x)),
+        "Shakespearolater": List<dynamic>.from(shakespearolater.map((x) => x)),
+        "Svan": List<dynamic>.from(svan.map((x) => x)),
+        "Wayao": Map.from(wayao).map((k, v) => MapEntry<String, dynamic>(k, v)),
+    };
+}
+
+class AlleviateClass {
+    final dynamic apriori;
+    final dynamic beggarer;
+    final dynamic brokenheartedly;
+    final dynamic debilitation;
+    final dynamic frike;
+    final dynamic gastrolith;
+    final dynamic hulsean;
+    final dynamic orthocentric;
+    final dynamic petaly;
+    final dynamic probudgeting;
+    final dynamic reacquire;
+    final dynamic scow;
+    final dynamic shutoff;
+    final dynamic subcontiguous;
+    final dynamic suffumigate;
+    final dynamic transformable;
+    final dynamic uncoroneted;
+    final dynamic unparking;
+    final dynamic unvarnishedness;
+    final dynamic wherewithal;
+
+    AlleviateClass({
+        required this.apriori,
+        required this.beggarer,
+        required this.brokenheartedly,
+        required this.debilitation,
+        required this.frike,
+        required this.gastrolith,
+        required this.hulsean,
+        required this.orthocentric,
+        required this.petaly,
+        required this.probudgeting,
+        required this.reacquire,
+        required this.scow,
+        required this.shutoff,
+        required this.subcontiguous,
+        required this.suffumigate,
+        required this.transformable,
+        required this.uncoroneted,
+        required this.unparking,
+        required this.unvarnishedness,
+        required this.wherewithal,
+    });
+
+    AlleviateClass copyWith({
+        dynamic apriori,
+        dynamic beggarer,
+        dynamic brokenheartedly,
+        dynamic debilitation,
+        dynamic frike,
+        dynamic gastrolith,
+        dynamic hulsean,
+        dynamic orthocentric,
+        dynamic petaly,
+        dynamic probudgeting,
+        dynamic reacquire,
+        dynamic scow,
+        dynamic shutoff,
+        dynamic subcontiguous,
+        dynamic suffumigate,
+        dynamic transformable,
+        dynamic uncoroneted,
+        dynamic unparking,
+        dynamic unvarnishedness,
+        dynamic wherewithal,
+    }) => 
+        AlleviateClass(
+            apriori: apriori ?? this.apriori,
+            beggarer: beggarer ?? this.beggarer,
+            brokenheartedly: brokenheartedly ?? this.brokenheartedly,
+            debilitation: debilitation ?? this.debilitation,
+            frike: frike ?? this.frike,
+            gastrolith: gastrolith ?? this.gastrolith,
+            hulsean: hulsean ?? this.hulsean,
+            orthocentric: orthocentric ?? this.orthocentric,
+            petaly: petaly ?? this.petaly,
+            probudgeting: probudgeting ?? this.probudgeting,
+            reacquire: reacquire ?? this.reacquire,
+            scow: scow ?? this.scow,
+            shutoff: shutoff ?? this.shutoff,
+            subcontiguous: subcontiguous ?? this.subcontiguous,
+            suffumigate: suffumigate ?? this.suffumigate,
+            transformable: transformable ?? this.transformable,
+            uncoroneted: uncoroneted ?? this.uncoroneted,
+            unparking: unparking ?? this.unparking,
+            unvarnishedness: unvarnishedness ?? this.unvarnishedness,
+            wherewithal: wherewithal ?? this.wherewithal,
+        );
+
+    factory AlleviateClass.fromJson(Map<String, dynamic> json) => AlleviateClass(
+        apriori: (json.containsKey("apriori") ? json["apriori"] : throw FormatException('Missing required property')),
+        beggarer: (json.containsKey("beggarer") ? json["beggarer"] : throw FormatException('Missing required property')),
+        brokenheartedly: (json.containsKey("brokenheartedly") ? json["brokenheartedly"] : throw FormatException('Missing required property')),
+        debilitation: (json.containsKey("debilitation") ? json["debilitation"] : throw FormatException('Missing required property')),
+        frike: (json.containsKey("frike") ? json["frike"] : throw FormatException('Missing required property')),
+        gastrolith: (json.containsKey("gastrolith") ? json["gastrolith"] : throw FormatException('Missing required property')),
+        hulsean: (json.containsKey("Hulsean") ? json["Hulsean"] : throw FormatException('Missing required property')),
+        orthocentric: (json.containsKey("orthocentric") ? json["orthocentric"] : throw FormatException('Missing required property')),
+        petaly: (json.containsKey("petaly") ? json["petaly"] : throw FormatException('Missing required property')),
+        probudgeting: (json.containsKey("probudgeting") ? json["probudgeting"] : throw FormatException('Missing required property')),
+        reacquire: (json.containsKey("reacquire") ? json["reacquire"] : throw FormatException('Missing required property')),
+        scow: (json.containsKey("scow") ? json["scow"] : throw FormatException('Missing required property')),
+        shutoff: (json.containsKey("shutoff") ? json["shutoff"] : throw FormatException('Missing required property')),
+        subcontiguous: (json.containsKey("subcontiguous") ? json["subcontiguous"] : throw FormatException('Missing required property')),
+        suffumigate: (json.containsKey("suffumigate") ? json["suffumigate"] : throw FormatException('Missing required property')),
+        transformable: (json.containsKey("transformable") ? json["transformable"] : throw FormatException('Missing required property')),
+        uncoroneted: (json.containsKey("uncoroneted") ? json["uncoroneted"] : throw FormatException('Missing required property')),
+        unparking: (json.containsKey("unparking") ? json["unparking"] : throw FormatException('Missing required property')),
+        unvarnishedness: (json.containsKey("unvarnishedness") ? json["unvarnishedness"] : throw FormatException('Missing required property')),
+        wherewithal: (json.containsKey("wherewithal") ? json["wherewithal"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "apriori": apriori,
+        "beggarer": beggarer,
+        "brokenheartedly": brokenheartedly,
+        "debilitation": debilitation,
+        "frike": frike,
+        "gastrolith": gastrolith,
+        "Hulsean": hulsean,
+        "orthocentric": orthocentric,
+        "petaly": petaly,
+        "probudgeting": probudgeting,
+        "reacquire": reacquire,
+        "scow": scow,
+        "shutoff": shutoff,
+        "subcontiguous": subcontiguous,
+        "suffumigate": suffumigate,
+        "transformable": transformable,
+        "uncoroneted": uncoroneted,
+        "unparking": unparking,
+        "unvarnishedness": unvarnishedness,
+        "wherewithal": wherewithal,
+    };
+}
+
+class Rebecca {
+    final double catharticalness;
+    final int chirotherium;
+    final String disdiapason;
+    final bool homocerc;
+    final dynamic nonbookish;
+
+    Rebecca({
+        required this.catharticalness,
+        required this.chirotherium,
+        required this.disdiapason,
+        required this.homocerc,
+        required this.nonbookish,
+    });
+
+    Rebecca copyWith({
+        double? catharticalness,
+        int? chirotherium,
+        String? disdiapason,
+        bool? homocerc,
+        dynamic nonbookish,
+    }) => 
+        Rebecca(
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            disdiapason: disdiapason ?? this.disdiapason,
+            homocerc: homocerc ?? this.homocerc,
+            nonbookish: nonbookish ?? this.nonbookish,
+        );
+
+    factory Rebecca.fromJson(Map<String, dynamic> json) => Rebecca(
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        homocerc: json["homocerc"],
+        nonbookish: (json.containsKey("nonbookish") ? json["nonbookish"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "homocerc": homocerc,
+        "nonbookish": nonbookish,
+    };
+}
+
+class Amphithyron {
+    final int? akroasis;
+    final int? antiphonical;
+    final int? basebred;
+    final double? catharticalness;
+    final int? chirotherium;
+    final int? conductometric;
+    final String? disdiapason;
+    final int? ensilation;
+    final int? eyebolt;
+    final int? fistulated;
+    final int? heteropod;
+    final bool? homocerc;
+    final int? juniperus;
+    final int? labyrinthically;
+    final int? martyrization;
+    final int? mispolicy;
+    final int? multipara;
+    final int? nazirite;
+    final dynamic nonbookish;
+    final int? possessorial;
+    final int? shamed;
+    final int? shelfworn;
+    final int? stagnum;
+    final int? those;
+    final int? undecimal;
+
+    Amphithyron({
+        this.akroasis,
+        this.antiphonical,
+        this.basebred,
+        this.catharticalness,
+        this.chirotherium,
+        this.conductometric,
+        this.disdiapason,
+        this.ensilation,
+        this.eyebolt,
+        this.fistulated,
+        this.heteropod,
+        this.homocerc,
+        this.juniperus,
+        this.labyrinthically,
+        this.martyrization,
+        this.mispolicy,
+        this.multipara,
+        this.nazirite,
+        this.nonbookish,
+        this.possessorial,
+        this.shamed,
+        this.shelfworn,
+        this.stagnum,
+        this.those,
+        this.undecimal,
+    });
+
+    Amphithyron copyWith({
+        int? akroasis,
+        int? antiphonical,
+        int? basebred,
+        double? catharticalness,
+        int? chirotherium,
+        int? conductometric,
+        String? disdiapason,
+        int? ensilation,
+        int? eyebolt,
+        int? fistulated,
+        int? heteropod,
+        bool? homocerc,
+        int? juniperus,
+        int? labyrinthically,
+        int? martyrization,
+        int? mispolicy,
+        int? multipara,
+        int? nazirite,
+        dynamic nonbookish,
+        int? possessorial,
+        int? shamed,
+        int? shelfworn,
+        int? stagnum,
+        int? those,
+        int? undecimal,
+    }) => 
+        Amphithyron(
+            akroasis: akroasis ?? this.akroasis,
+            antiphonical: antiphonical ?? this.antiphonical,
+            basebred: basebred ?? this.basebred,
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            conductometric: conductometric ?? this.conductometric,
+            disdiapason: disdiapason ?? this.disdiapason,
+            ensilation: ensilation ?? this.ensilation,
+            eyebolt: eyebolt ?? this.eyebolt,
+            fistulated: fistulated ?? this.fistulated,
+            heteropod: heteropod ?? this.heteropod,
+            homocerc: homocerc ?? this.homocerc,
+            juniperus: juniperus ?? this.juniperus,
+            labyrinthically: labyrinthically ?? this.labyrinthically,
+            martyrization: martyrization ?? this.martyrization,
+            mispolicy: mispolicy ?? this.mispolicy,
+            multipara: multipara ?? this.multipara,
+            nazirite: nazirite ?? this.nazirite,
+            nonbookish: nonbookish ?? this.nonbookish,
+            possessorial: possessorial ?? this.possessorial,
+            shamed: shamed ?? this.shamed,
+            shelfworn: shelfworn ?? this.shelfworn,
+            stagnum: stagnum ?? this.stagnum,
+            those: those ?? this.those,
+            undecimal: undecimal ?? this.undecimal,
+        );
+
+    factory Amphithyron.fromJson(Map<String, dynamic> json) => Amphithyron(
+        akroasis: json["akroasis"],
+        antiphonical: json["antiphonical"],
+        basebred: json["basebred"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        conductometric: json["conductometric"],
+        disdiapason: json["disdiapason"],
+        ensilation: json["ensilation"],
+        eyebolt: json["eyebolt"],
+        fistulated: json["fistulated"],
+        heteropod: json["heteropod"],
+        homocerc: json["homocerc"],
+        juniperus: json["Juniperus"],
+        labyrinthically: json["labyrinthically"],
+        martyrization: json["martyrization"],
+        mispolicy: json["mispolicy"],
+        multipara: json["multipara"],
+        nazirite: json["Nazirite"],
+        nonbookish: json["nonbookish"],
+        possessorial: json["possessorial"],
+        shamed: json["shamed"],
+        shelfworn: json["shelfworn"],
+        stagnum: json["stagnum"],
+        those: json["Those"],
+        undecimal: json["undecimal"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "akroasis": akroasis,
+        "antiphonical": antiphonical,
+        "basebred": basebred,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "conductometric": conductometric,
+        "disdiapason": disdiapason,
+        "ensilation": ensilation,
+        "eyebolt": eyebolt,
+        "fistulated": fistulated,
+        "heteropod": heteropod,
+        "homocerc": homocerc,
+        "Juniperus": juniperus,
+        "labyrinthically": labyrinthically,
+        "martyrization": martyrization,
+        "mispolicy": mispolicy,
+        "multipara": multipara,
+        "Nazirite": nazirite,
+        "nonbookish": nonbookish,
+        "possessorial": possessorial,
+        "shamed": shamed,
+        "shelfworn": shelfworn,
+        "stagnum": stagnum,
+        "Those": those,
+        "undecimal": undecimal,
+    };
+}
+
+class AnkeeClass {
+    final dynamic anomoean;
+    final dynamic barleyhood;
+    final dynamic befriender;
+    final dynamic brutishness;
+    final dynamic cephalalgy;
+    final dynamic cirurgian;
+    final dynamic conventionally;
+    final dynamic jackshay;
+    final dynamic milammeter;
+    final dynamic naja;
+    final dynamic ombrological;
+    final dynamic phonasthenia;
+    final dynamic retrievableness;
+    final dynamic snakily;
+    final dynamic swot;
+    final dynamic tartlet;
+    final dynamic thiofuran;
+    final dynamic tracheophone;
+    final dynamic tuglike;
+    final dynamic unscratchingly;
+
+    AnkeeClass({
+        required this.anomoean,
+        required this.barleyhood,
+        required this.befriender,
+        required this.brutishness,
+        required this.cephalalgy,
+        required this.cirurgian,
+        required this.conventionally,
+        required this.jackshay,
+        required this.milammeter,
+        required this.naja,
+        required this.ombrological,
+        required this.phonasthenia,
+        required this.retrievableness,
+        required this.snakily,
+        required this.swot,
+        required this.tartlet,
+        required this.thiofuran,
+        required this.tracheophone,
+        required this.tuglike,
+        required this.unscratchingly,
+    });
+
+    AnkeeClass copyWith({
+        dynamic anomoean,
+        dynamic barleyhood,
+        dynamic befriender,
+        dynamic brutishness,
+        dynamic cephalalgy,
+        dynamic cirurgian,
+        dynamic conventionally,
+        dynamic jackshay,
+        dynamic milammeter,
+        dynamic naja,
+        dynamic ombrological,
+        dynamic phonasthenia,
+        dynamic retrievableness,
+        dynamic snakily,
+        dynamic swot,
+        dynamic tartlet,
+        dynamic thiofuran,
+        dynamic tracheophone,
+        dynamic tuglike,
+        dynamic unscratchingly,
+    }) => 
+        AnkeeClass(
+            anomoean: anomoean ?? this.anomoean,
+            barleyhood: barleyhood ?? this.barleyhood,
+            befriender: befriender ?? this.befriender,
+            brutishness: brutishness ?? this.brutishness,
+            cephalalgy: cephalalgy ?? this.cephalalgy,
+            cirurgian: cirurgian ?? this.cirurgian,
+            conventionally: conventionally ?? this.conventionally,
+            jackshay: jackshay ?? this.jackshay,
+            milammeter: milammeter ?? this.milammeter,
+            naja: naja ?? this.naja,
+            ombrological: ombrological ?? this.ombrological,
+            phonasthenia: phonasthenia ?? this.phonasthenia,
+            retrievableness: retrievableness ?? this.retrievableness,
+            snakily: snakily ?? this.snakily,
+            swot: swot ?? this.swot,
+            tartlet: tartlet ?? this.tartlet,
+            thiofuran: thiofuran ?? this.thiofuran,
+            tracheophone: tracheophone ?? this.tracheophone,
+            tuglike: tuglike ?? this.tuglike,
+            unscratchingly: unscratchingly ?? this.unscratchingly,
+        );
+
+    factory AnkeeClass.fromJson(Map<String, dynamic> json) => AnkeeClass(
+        anomoean: (json.containsKey("Anomoean") ? json["Anomoean"] : throw FormatException('Missing required property')),
+        barleyhood: (json.containsKey("barleyhood") ? json["barleyhood"] : throw FormatException('Missing required property')),
+        befriender: (json.containsKey("befriender") ? json["befriender"] : throw FormatException('Missing required property')),
+        brutishness: (json.containsKey("brutishness") ? json["brutishness"] : throw FormatException('Missing required property')),
+        cephalalgy: (json.containsKey("cephalalgy") ? json["cephalalgy"] : throw FormatException('Missing required property')),
+        cirurgian: (json.containsKey("cirurgian") ? json["cirurgian"] : throw FormatException('Missing required property')),
+        conventionally: (json.containsKey("conventionally") ? json["conventionally"] : throw FormatException('Missing required property')),
+        jackshay: (json.containsKey("jackshay") ? json["jackshay"] : throw FormatException('Missing required property')),
+        milammeter: (json.containsKey("milammeter") ? json["milammeter"] : throw FormatException('Missing required property')),
+        naja: (json.containsKey("Naja") ? json["Naja"] : throw FormatException('Missing required property')),
+        ombrological: (json.containsKey("ombrological") ? json["ombrological"] : throw FormatException('Missing required property')),
+        phonasthenia: (json.containsKey("phonasthenia") ? json["phonasthenia"] : throw FormatException('Missing required property')),
+        retrievableness: (json.containsKey("retrievableness") ? json["retrievableness"] : throw FormatException('Missing required property')),
+        snakily: (json.containsKey("snakily") ? json["snakily"] : throw FormatException('Missing required property')),
+        swot: (json.containsKey("swot") ? json["swot"] : throw FormatException('Missing required property')),
+        tartlet: (json.containsKey("tartlet") ? json["tartlet"] : throw FormatException('Missing required property')),
+        thiofuran: (json.containsKey("thiofuran") ? json["thiofuran"] : throw FormatException('Missing required property')),
+        tracheophone: (json.containsKey("tracheophone") ? json["tracheophone"] : throw FormatException('Missing required property')),
+        tuglike: (json.containsKey("tuglike") ? json["tuglike"] : throw FormatException('Missing required property')),
+        unscratchingly: (json.containsKey("unscratchingly") ? json["unscratchingly"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "Anomoean": anomoean,
+        "barleyhood": barleyhood,
+        "befriender": befriender,
+        "brutishness": brutishness,
+        "cephalalgy": cephalalgy,
+        "cirurgian": cirurgian,
+        "conventionally": conventionally,
+        "jackshay": jackshay,
+        "milammeter": milammeter,
+        "Naja": naja,
+        "ombrological": ombrological,
+        "phonasthenia": phonasthenia,
+        "retrievableness": retrievableness,
+        "snakily": snakily,
+        "swot": swot,
+        "tartlet": tartlet,
+        "thiofuran": thiofuran,
+        "tracheophone": tracheophone,
+        "tuglike": tuglike,
+        "unscratchingly": unscratchingly,
+    };
+}
+
+class AnsarieClass {
+    final dynamic accension;
+    final dynamic alida;
+    final dynamic asteria;
+    final dynamic beriberic;
+    final dynamic edgebone;
+    final dynamic gastrodialysis;
+    final dynamic geographic;
+    final dynamic ictonyx;
+    final dynamic metrocele;
+    final dynamic misgraft;
+    final dynamic monteith;
+    final dynamic notcher;
+    final dynamic prorestriction;
+    final dynamic ramist;
+    final dynamic throatlet;
+    final dynamic unfair;
+    final dynamic unsynonymous;
+    final dynamic water;
+    final dynamic zestfully;
+    final dynamic zincic;
+
+    AnsarieClass({
+        required this.accension,
+        required this.alida,
+        required this.asteria,
+        required this.beriberic,
+        required this.edgebone,
+        required this.gastrodialysis,
+        required this.geographic,
+        required this.ictonyx,
+        required this.metrocele,
+        required this.misgraft,
+        required this.monteith,
+        required this.notcher,
+        required this.prorestriction,
+        required this.ramist,
+        required this.throatlet,
+        required this.unfair,
+        required this.unsynonymous,
+        required this.water,
+        required this.zestfully,
+        required this.zincic,
+    });
+
+    AnsarieClass copyWith({
+        dynamic accension,
+        dynamic alida,
+        dynamic asteria,
+        dynamic beriberic,
+        dynamic edgebone,
+        dynamic gastrodialysis,
+        dynamic geographic,
+        dynamic ictonyx,
+        dynamic metrocele,
+        dynamic misgraft,
+        dynamic monteith,
+        dynamic notcher,
+        dynamic prorestriction,
+        dynamic ramist,
+        dynamic throatlet,
+        dynamic unfair,
+        dynamic unsynonymous,
+        dynamic water,
+        dynamic zestfully,
+        dynamic zincic,
+    }) => 
+        AnsarieClass(
+            accension: accension ?? this.accension,
+            alida: alida ?? this.alida,
+            asteria: asteria ?? this.asteria,
+            beriberic: beriberic ?? this.beriberic,
+            edgebone: edgebone ?? this.edgebone,
+            gastrodialysis: gastrodialysis ?? this.gastrodialysis,
+            geographic: geographic ?? this.geographic,
+            ictonyx: ictonyx ?? this.ictonyx,
+            metrocele: metrocele ?? this.metrocele,
+            misgraft: misgraft ?? this.misgraft,
+            monteith: monteith ?? this.monteith,
+            notcher: notcher ?? this.notcher,
+            prorestriction: prorestriction ?? this.prorestriction,
+            ramist: ramist ?? this.ramist,
+            throatlet: throatlet ?? this.throatlet,
+            unfair: unfair ?? this.unfair,
+            unsynonymous: unsynonymous ?? this.unsynonymous,
+            water: water ?? this.water,
+            zestfully: zestfully ?? this.zestfully,
+            zincic: zincic ?? this.zincic,
+        );
+
+    factory AnsarieClass.fromJson(Map<String, dynamic> json) => AnsarieClass(
+        accension: (json.containsKey("accension") ? json["accension"] : throw FormatException('Missing required property')),
+        alida: (json.containsKey("Alida") ? json["Alida"] : throw FormatException('Missing required property')),
+        asteria: (json.containsKey("asteria") ? json["asteria"] : throw FormatException('Missing required property')),
+        beriberic: (json.containsKey("beriberic") ? json["beriberic"] : throw FormatException('Missing required property')),
+        edgebone: (json.containsKey("edgebone") ? json["edgebone"] : throw FormatException('Missing required property')),
+        gastrodialysis: (json.containsKey("gastrodialysis") ? json["gastrodialysis"] : throw FormatException('Missing required property')),
+        geographic: (json.containsKey("geographic") ? json["geographic"] : throw FormatException('Missing required property')),
+        ictonyx: (json.containsKey("Ictonyx") ? json["Ictonyx"] : throw FormatException('Missing required property')),
+        metrocele: (json.containsKey("metrocele") ? json["metrocele"] : throw FormatException('Missing required property')),
+        misgraft: (json.containsKey("misgraft") ? json["misgraft"] : throw FormatException('Missing required property')),
+        monteith: (json.containsKey("monteith") ? json["monteith"] : throw FormatException('Missing required property')),
+        notcher: (json.containsKey("notcher") ? json["notcher"] : throw FormatException('Missing required property')),
+        prorestriction: (json.containsKey("prorestriction") ? json["prorestriction"] : throw FormatException('Missing required property')),
+        ramist: (json.containsKey("Ramist") ? json["Ramist"] : throw FormatException('Missing required property')),
+        throatlet: (json.containsKey("throatlet") ? json["throatlet"] : throw FormatException('Missing required property')),
+        unfair: (json.containsKey("unfair") ? json["unfair"] : throw FormatException('Missing required property')),
+        unsynonymous: (json.containsKey("unsynonymous") ? json["unsynonymous"] : throw FormatException('Missing required property')),
+        water: (json.containsKey("water") ? json["water"] : throw FormatException('Missing required property')),
+        zestfully: (json.containsKey("zestfully") ? json["zestfully"] : throw FormatException('Missing required property')),
+        zincic: (json.containsKey("zincic") ? json["zincic"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "accension": accension,
+        "Alida": alida,
+        "asteria": asteria,
+        "beriberic": beriberic,
+        "edgebone": edgebone,
+        "gastrodialysis": gastrodialysis,
+        "geographic": geographic,
+        "Ictonyx": ictonyx,
+        "metrocele": metrocele,
+        "misgraft": misgraft,
+        "monteith": monteith,
+        "notcher": notcher,
+        "prorestriction": prorestriction,
+        "Ramist": ramist,
+        "throatlet": throatlet,
+        "unfair": unfair,
+        "unsynonymous": unsynonymous,
+        "water": water,
+        "zestfully": zestfully,
+        "zincic": zincic,
+    };
+}
+
+class ChytridiaceaeClass {
+    final dynamic batidaceae;
+    final dynamic brechites;
+    final dynamic codespairer;
+    final dynamic emery;
+    final dynamic enervative;
+    final dynamic excriminate;
+    final dynamic goshenite;
+    final dynamic grime;
+    final dynamic gritten;
+    final dynamic hectorly;
+    final dynamic intermediation;
+    final dynamic meeterly;
+    final dynamic narraganset;
+    final dynamic onymatic;
+    final dynamic paddlecock;
+    final dynamic thana;
+    final dynamic thornily;
+    final dynamic uckia;
+    final dynamic unmettle;
+    final dynamic vorticellid;
+
+    ChytridiaceaeClass({
+        required this.batidaceae,
+        required this.brechites,
+        required this.codespairer,
+        required this.emery,
+        required this.enervative,
+        required this.excriminate,
+        required this.goshenite,
+        required this.grime,
+        required this.gritten,
+        required this.hectorly,
+        required this.intermediation,
+        required this.meeterly,
+        required this.narraganset,
+        required this.onymatic,
+        required this.paddlecock,
+        required this.thana,
+        required this.thornily,
+        required this.uckia,
+        required this.unmettle,
+        required this.vorticellid,
+    });
+
+    ChytridiaceaeClass copyWith({
+        dynamic batidaceae,
+        dynamic brechites,
+        dynamic codespairer,
+        dynamic emery,
+        dynamic enervative,
+        dynamic excriminate,
+        dynamic goshenite,
+        dynamic grime,
+        dynamic gritten,
+        dynamic hectorly,
+        dynamic intermediation,
+        dynamic meeterly,
+        dynamic narraganset,
+        dynamic onymatic,
+        dynamic paddlecock,
+        dynamic thana,
+        dynamic thornily,
+        dynamic uckia,
+        dynamic unmettle,
+        dynamic vorticellid,
+    }) => 
+        ChytridiaceaeClass(
+            batidaceae: batidaceae ?? this.batidaceae,
+            brechites: brechites ?? this.brechites,
+            codespairer: codespairer ?? this.codespairer,
+            emery: emery ?? this.emery,
+            enervative: enervative ?? this.enervative,
+            excriminate: excriminate ?? this.excriminate,
+            goshenite: goshenite ?? this.goshenite,
+            grime: grime ?? this.grime,
+            gritten: gritten ?? this.gritten,
+            hectorly: hectorly ?? this.hectorly,
+            intermediation: intermediation ?? this.intermediation,
+            meeterly: meeterly ?? this.meeterly,
+            narraganset: narraganset ?? this.narraganset,
+            onymatic: onymatic ?? this.onymatic,
+            paddlecock: paddlecock ?? this.paddlecock,
+            thana: thana ?? this.thana,
+            thornily: thornily ?? this.thornily,
+            uckia: uckia ?? this.uckia,
+            unmettle: unmettle ?? this.unmettle,
+            vorticellid: vorticellid ?? this.vorticellid,
+        );
+
+    factory ChytridiaceaeClass.fromJson(Map<String, dynamic> json) => ChytridiaceaeClass(
+        batidaceae: (json.containsKey("Batidaceae") ? json["Batidaceae"] : throw FormatException('Missing required property')),
+        brechites: (json.containsKey("Brechites") ? json["Brechites"] : throw FormatException('Missing required property')),
+        codespairer: (json.containsKey("codespairer") ? json["codespairer"] : throw FormatException('Missing required property')),
+        emery: (json.containsKey("Emery") ? json["Emery"] : throw FormatException('Missing required property')),
+        enervative: (json.containsKey("enervative") ? json["enervative"] : throw FormatException('Missing required property')),
+        excriminate: (json.containsKey("excriminate") ? json["excriminate"] : throw FormatException('Missing required property')),
+        goshenite: (json.containsKey("goshenite") ? json["goshenite"] : throw FormatException('Missing required property')),
+        grime: (json.containsKey("grime") ? json["grime"] : throw FormatException('Missing required property')),
+        gritten: (json.containsKey("gritten") ? json["gritten"] : throw FormatException('Missing required property')),
+        hectorly: (json.containsKey("hectorly") ? json["hectorly"] : throw FormatException('Missing required property')),
+        intermediation: (json.containsKey("intermediation") ? json["intermediation"] : throw FormatException('Missing required property')),
+        meeterly: (json.containsKey("meeterly") ? json["meeterly"] : throw FormatException('Missing required property')),
+        narraganset: (json.containsKey("Narraganset") ? json["Narraganset"] : throw FormatException('Missing required property')),
+        onymatic: (json.containsKey("onymatic") ? json["onymatic"] : throw FormatException('Missing required property')),
+        paddlecock: (json.containsKey("paddlecock") ? json["paddlecock"] : throw FormatException('Missing required property')),
+        thana: (json.containsKey("thana") ? json["thana"] : throw FormatException('Missing required property')),
+        thornily: (json.containsKey("thornily") ? json["thornily"] : throw FormatException('Missing required property')),
+        uckia: (json.containsKey("uckia") ? json["uckia"] : throw FormatException('Missing required property')),
+        unmettle: (json.containsKey("unmettle") ? json["unmettle"] : throw FormatException('Missing required property')),
+        vorticellid: (json.containsKey("vorticellid") ? json["vorticellid"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "Batidaceae": batidaceae,
+        "Brechites": brechites,
+        "codespairer": codespairer,
+        "Emery": emery,
+        "enervative": enervative,
+        "excriminate": excriminate,
+        "goshenite": goshenite,
+        "grime": grime,
+        "gritten": gritten,
+        "hectorly": hectorly,
+        "intermediation": intermediation,
+        "meeterly": meeterly,
+        "Narraganset": narraganset,
+        "onymatic": onymatic,
+        "paddlecock": paddlecock,
+        "thana": thana,
+        "thornily": thornily,
+        "uckia": uckia,
+        "unmettle": unmettle,
+        "vorticellid": vorticellid,
+    };
+}
+
+class DiscordiaClass {
+    final int? altaic;
+    final int? amoristic;
+    final int? blennophthalmia;
+    final double? catharticalness;
+    final int? chirotherium;
+    final int? disciplinability;
+    final String? disdiapason;
+    final int? goofer;
+    final bool? homocerc;
+    final int? laryngograph;
+    final int? leucitis;
+    final int? lymphocyst;
+    final int? microcosmology;
+    final int? nauseation;
+    final dynamic nonbookish;
+    final int? patarin;
+    final int? preliberal;
+    final int? prettifier;
+    final int? rangework;
+    final int? redient;
+    final int? subfusiform;
+    final int? suicidical;
+    final int? swow;
+    final int? wastrel;
+    final int? wingle;
+
+    DiscordiaClass({
+        this.altaic,
+        this.amoristic,
+        this.blennophthalmia,
+        this.catharticalness,
+        this.chirotherium,
+        this.disciplinability,
+        this.disdiapason,
+        this.goofer,
+        this.homocerc,
+        this.laryngograph,
+        this.leucitis,
+        this.lymphocyst,
+        this.microcosmology,
+        this.nauseation,
+        this.nonbookish,
+        this.patarin,
+        this.preliberal,
+        this.prettifier,
+        this.rangework,
+        this.redient,
+        this.subfusiform,
+        this.suicidical,
+        this.swow,
+        this.wastrel,
+        this.wingle,
+    });
+
+    DiscordiaClass copyWith({
+        int? altaic,
+        int? amoristic,
+        int? blennophthalmia,
+        double? catharticalness,
+        int? chirotherium,
+        int? disciplinability,
+        String? disdiapason,
+        int? goofer,
+        bool? homocerc,
+        int? laryngograph,
+        int? leucitis,
+        int? lymphocyst,
+        int? microcosmology,
+        int? nauseation,
+        dynamic nonbookish,
+        int? patarin,
+        int? preliberal,
+        int? prettifier,
+        int? rangework,
+        int? redient,
+        int? subfusiform,
+        int? suicidical,
+        int? swow,
+        int? wastrel,
+        int? wingle,
+    }) => 
+        DiscordiaClass(
+            altaic: altaic ?? this.altaic,
+            amoristic: amoristic ?? this.amoristic,
+            blennophthalmia: blennophthalmia ?? this.blennophthalmia,
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            disciplinability: disciplinability ?? this.disciplinability,
+            disdiapason: disdiapason ?? this.disdiapason,
+            goofer: goofer ?? this.goofer,
+            homocerc: homocerc ?? this.homocerc,
+            laryngograph: laryngograph ?? this.laryngograph,
+            leucitis: leucitis ?? this.leucitis,
+            lymphocyst: lymphocyst ?? this.lymphocyst,
+            microcosmology: microcosmology ?? this.microcosmology,
+            nauseation: nauseation ?? this.nauseation,
+            nonbookish: nonbookish ?? this.nonbookish,
+            patarin: patarin ?? this.patarin,
+            preliberal: preliberal ?? this.preliberal,
+            prettifier: prettifier ?? this.prettifier,
+            rangework: rangework ?? this.rangework,
+            redient: redient ?? this.redient,
+            subfusiform: subfusiform ?? this.subfusiform,
+            suicidical: suicidical ?? this.suicidical,
+            swow: swow ?? this.swow,
+            wastrel: wastrel ?? this.wastrel,
+            wingle: wingle ?? this.wingle,
+        );
+
+    factory DiscordiaClass.fromJson(Map<String, dynamic> json) => DiscordiaClass(
+        altaic: json["Altaic"],
+        amoristic: json["amoristic"],
+        blennophthalmia: json["blennophthalmia"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        disciplinability: json["disciplinability"],
+        disdiapason: json["disdiapason"],
+        goofer: json["goofer"],
+        homocerc: json["homocerc"],
+        laryngograph: json["laryngograph"],
+        leucitis: json["leucitis"],
+        lymphocyst: json["lymphocyst"],
+        microcosmology: json["microcosmology"],
+        nauseation: json["nauseation"],
+        nonbookish: json["nonbookish"],
+        patarin: json["Patarin"],
+        preliberal: json["preliberal"],
+        prettifier: json["prettifier"],
+        rangework: json["rangework"],
+        redient: json["redient"],
+        subfusiform: json["subfusiform"],
+        suicidical: json["suicidical"],
+        swow: json["swow"],
+        wastrel: json["wastrel"],
+        wingle: json["wingle"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "Altaic": altaic,
+        "amoristic": amoristic,
+        "blennophthalmia": blennophthalmia,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "disciplinability": disciplinability,
+        "disdiapason": disdiapason,
+        "goofer": goofer,
+        "homocerc": homocerc,
+        "laryngograph": laryngograph,
+        "leucitis": leucitis,
+        "lymphocyst": lymphocyst,
+        "microcosmology": microcosmology,
+        "nauseation": nauseation,
+        "nonbookish": nonbookish,
+        "Patarin": patarin,
+        "preliberal": preliberal,
+        "prettifier": prettifier,
+        "rangework": rangework,
+        "redient": redient,
+        "subfusiform": subfusiform,
+        "suicidical": suicidical,
+        "swow": swow,
+        "wastrel": wastrel,
+        "wingle": wingle,
+    };
+}
+
+class GryphosaurusClass {
+    final dynamic amissibility;
+    final dynamic burushaski;
+    final dynamic citronin;
+    final dynamic coplaintiff;
+    final dynamic disquisitionary;
+    final dynamic enoplan;
+    final dynamic faintness;
+    final dynamic hebetomy;
+    final dynamic islandry;
+    final dynamic lameduck;
+    final dynamic overbattle;
+    final dynamic overinterested;
+    final dynamic phrenologic;
+    final dynamic rainband;
+    final dynamic shiningly;
+    final dynamic stamineous;
+    final dynamic subscapularis;
+    final dynamic tahami;
+    final dynamic undaubed;
+    final dynamic underntime;
+
+    GryphosaurusClass({
+        required this.amissibility,
+        required this.burushaski,
+        required this.citronin,
+        required this.coplaintiff,
+        required this.disquisitionary,
+        required this.enoplan,
+        required this.faintness,
+        required this.hebetomy,
+        required this.islandry,
+        required this.lameduck,
+        required this.overbattle,
+        required this.overinterested,
+        required this.phrenologic,
+        required this.rainband,
+        required this.shiningly,
+        required this.stamineous,
+        required this.subscapularis,
+        required this.tahami,
+        required this.undaubed,
+        required this.underntime,
+    });
+
+    GryphosaurusClass copyWith({
+        dynamic amissibility,
+        dynamic burushaski,
+        dynamic citronin,
+        dynamic coplaintiff,
+        dynamic disquisitionary,
+        dynamic enoplan,
+        dynamic faintness,
+        dynamic hebetomy,
+        dynamic islandry,
+        dynamic lameduck,
+        dynamic overbattle,
+        dynamic overinterested,
+        dynamic phrenologic,
+        dynamic rainband,
+        dynamic shiningly,
+        dynamic stamineous,
+        dynamic subscapularis,
+        dynamic tahami,
+        dynamic undaubed,
+        dynamic underntime,
+    }) => 
+        GryphosaurusClass(
+            amissibility: amissibility ?? this.amissibility,
+            burushaski: burushaski ?? this.burushaski,
+            citronin: citronin ?? this.citronin,
+            coplaintiff: coplaintiff ?? this.coplaintiff,
+            disquisitionary: disquisitionary ?? this.disquisitionary,
+            enoplan: enoplan ?? this.enoplan,
+            faintness: faintness ?? this.faintness,
+            hebetomy: hebetomy ?? this.hebetomy,
+            islandry: islandry ?? this.islandry,
+            lameduck: lameduck ?? this.lameduck,
+            overbattle: overbattle ?? this.overbattle,
+            overinterested: overinterested ?? this.overinterested,
+            phrenologic: phrenologic ?? this.phrenologic,
+            rainband: rainband ?? this.rainband,
+            shiningly: shiningly ?? this.shiningly,
+            stamineous: stamineous ?? this.stamineous,
+            subscapularis: subscapularis ?? this.subscapularis,
+            tahami: tahami ?? this.tahami,
+            undaubed: undaubed ?? this.undaubed,
+            underntime: underntime ?? this.underntime,
+        );
+
+    factory GryphosaurusClass.fromJson(Map<String, dynamic> json) => GryphosaurusClass(
+        amissibility: (json.containsKey("amissibility") ? json["amissibility"] : throw FormatException('Missing required property')),
+        burushaski: (json.containsKey("Burushaski") ? json["Burushaski"] : throw FormatException('Missing required property')),
+        citronin: (json.containsKey("citronin") ? json["citronin"] : throw FormatException('Missing required property')),
+        coplaintiff: (json.containsKey("coplaintiff") ? json["coplaintiff"] : throw FormatException('Missing required property')),
+        disquisitionary: (json.containsKey("disquisitionary") ? json["disquisitionary"] : throw FormatException('Missing required property')),
+        enoplan: (json.containsKey("enoplan") ? json["enoplan"] : throw FormatException('Missing required property')),
+        faintness: (json.containsKey("faintness") ? json["faintness"] : throw FormatException('Missing required property')),
+        hebetomy: (json.containsKey("hebetomy") ? json["hebetomy"] : throw FormatException('Missing required property')),
+        islandry: (json.containsKey("islandry") ? json["islandry"] : throw FormatException('Missing required property')),
+        lameduck: (json.containsKey("lameduck") ? json["lameduck"] : throw FormatException('Missing required property')),
+        overbattle: (json.containsKey("overbattle") ? json["overbattle"] : throw FormatException('Missing required property')),
+        overinterested: (json.containsKey("overinterested") ? json["overinterested"] : throw FormatException('Missing required property')),
+        phrenologic: (json.containsKey("phrenologic") ? json["phrenologic"] : throw FormatException('Missing required property')),
+        rainband: (json.containsKey("rainband") ? json["rainband"] : throw FormatException('Missing required property')),
+        shiningly: (json.containsKey("shiningly") ? json["shiningly"] : throw FormatException('Missing required property')),
+        stamineous: (json.containsKey("stamineous") ? json["stamineous"] : throw FormatException('Missing required property')),
+        subscapularis: (json.containsKey("subscapularis") ? json["subscapularis"] : throw FormatException('Missing required property')),
+        tahami: (json.containsKey("Tahami") ? json["Tahami"] : throw FormatException('Missing required property')),
+        undaubed: (json.containsKey("undaubed") ? json["undaubed"] : throw FormatException('Missing required property')),
+        underntime: (json.containsKey("underntime") ? json["underntime"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "amissibility": amissibility,
+        "Burushaski": burushaski,
+        "citronin": citronin,
+        "coplaintiff": coplaintiff,
+        "disquisitionary": disquisitionary,
+        "enoplan": enoplan,
+        "faintness": faintness,
+        "hebetomy": hebetomy,
+        "islandry": islandry,
+        "lameduck": lameduck,
+        "overbattle": overbattle,
+        "overinterested": overinterested,
+        "phrenologic": phrenologic,
+        "rainband": rainband,
+        "shiningly": shiningly,
+        "stamineous": stamineous,
+        "subscapularis": subscapularis,
+        "Tahami": tahami,
+        "undaubed": undaubed,
+        "underntime": underntime,
+    };
+}
+
+class LaviniaClass {
+    final int? agitable;
+    final int? asininity;
+    final int? benefiter;
+    final int? bronzelike;
+    final double? catharticalness;
+    final int? chirotherium;
+    final int? cholesteatomatous;
+    final int? deprivement;
+    final String? disdiapason;
+    final int? flippantness;
+    final int? fogproof;
+    final bool? homocerc;
+    final int? merrymeeting;
+    final dynamic nonbookish;
+    final int? overcareful;
+    final int? panaris;
+    final int? preacceptance;
+    final int? quinoxaline;
+    final int? sig;
+    final int? superconfusion;
+    final int? tacana;
+    final int? tillotter;
+    final int? tranquillize;
+    final int? unquestionable;
+    final int? uproute;
+
+    LaviniaClass({
+        this.agitable,
+        this.asininity,
+        this.benefiter,
+        this.bronzelike,
+        this.catharticalness,
+        this.chirotherium,
+        this.cholesteatomatous,
+        this.deprivement,
+        this.disdiapason,
+        this.flippantness,
+        this.fogproof,
+        this.homocerc,
+        this.merrymeeting,
+        this.nonbookish,
+        this.overcareful,
+        this.panaris,
+        this.preacceptance,
+        this.quinoxaline,
+        this.sig,
+        this.superconfusion,
+        this.tacana,
+        this.tillotter,
+        this.tranquillize,
+        this.unquestionable,
+        this.uproute,
+    });
+
+    LaviniaClass copyWith({
+        int? agitable,
+        int? asininity,
+        int? benefiter,
+        int? bronzelike,
+        double? catharticalness,
+        int? chirotherium,
+        int? cholesteatomatous,
+        int? deprivement,
+        String? disdiapason,
+        int? flippantness,
+        int? fogproof,
+        bool? homocerc,
+        int? merrymeeting,
+        dynamic nonbookish,
+        int? overcareful,
+        int? panaris,
+        int? preacceptance,
+        int? quinoxaline,
+        int? sig,
+        int? superconfusion,
+        int? tacana,
+        int? tillotter,
+        int? tranquillize,
+        int? unquestionable,
+        int? uproute,
+    }) => 
+        LaviniaClass(
+            agitable: agitable ?? this.agitable,
+            asininity: asininity ?? this.asininity,
+            benefiter: benefiter ?? this.benefiter,
+            bronzelike: bronzelike ?? this.bronzelike,
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            cholesteatomatous: cholesteatomatous ?? this.cholesteatomatous,
+            deprivement: deprivement ?? this.deprivement,
+            disdiapason: disdiapason ?? this.disdiapason,
+            flippantness: flippantness ?? this.flippantness,
+            fogproof: fogproof ?? this.fogproof,
+            homocerc: homocerc ?? this.homocerc,
+            merrymeeting: merrymeeting ?? this.merrymeeting,
+            nonbookish: nonbookish ?? this.nonbookish,
+            overcareful: overcareful ?? this.overcareful,
+            panaris: panaris ?? this.panaris,
+            preacceptance: preacceptance ?? this.preacceptance,
+            quinoxaline: quinoxaline ?? this.quinoxaline,
+            sig: sig ?? this.sig,
+            superconfusion: superconfusion ?? this.superconfusion,
+            tacana: tacana ?? this.tacana,
+            tillotter: tillotter ?? this.tillotter,
+            tranquillize: tranquillize ?? this.tranquillize,
+            unquestionable: unquestionable ?? this.unquestionable,
+            uproute: uproute ?? this.uproute,
+        );
+
+    factory LaviniaClass.fromJson(Map<String, dynamic> json) => LaviniaClass(
+        agitable: json["agitable"],
+        asininity: json["asininity"],
+        benefiter: json["benefiter"],
+        bronzelike: json["bronzelike"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        cholesteatomatous: json["cholesteatomatous"],
+        deprivement: json["deprivement"],
+        disdiapason: json["disdiapason"],
+        flippantness: json["flippantness"],
+        fogproof: json["fogproof"],
+        homocerc: json["homocerc"],
+        merrymeeting: json["merrymeeting"],
+        nonbookish: json["nonbookish"],
+        overcareful: json["overcareful"],
+        panaris: json["panaris"],
+        preacceptance: json["preacceptance"],
+        quinoxaline: json["quinoxaline"],
+        sig: json["sig"],
+        superconfusion: json["superconfusion"],
+        tacana: json["Tacana"],
+        tillotter: json["tillotter"],
+        tranquillize: json["tranquillize"],
+        unquestionable: json["unquestionable"],
+        uproute: json["uproute"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "agitable": agitable,
+        "asininity": asininity,
+        "benefiter": benefiter,
+        "bronzelike": bronzelike,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "cholesteatomatous": cholesteatomatous,
+        "deprivement": deprivement,
+        "disdiapason": disdiapason,
+        "flippantness": flippantness,
+        "fogproof": fogproof,
+        "homocerc": homocerc,
+        "merrymeeting": merrymeeting,
+        "nonbookish": nonbookish,
+        "overcareful": overcareful,
+        "panaris": panaris,
+        "preacceptance": preacceptance,
+        "quinoxaline": quinoxaline,
+        "sig": sig,
+        "superconfusion": superconfusion,
+        "Tacana": tacana,
+        "tillotter": tillotter,
+        "tranquillize": tranquillize,
+        "unquestionable": unquestionable,
+        "uproute": uproute,
+    };
+}
+
+class OskarClass {
+    final dynamic acrobates;
+    final dynamic beanshooter;
+    final dynamic bearhound;
+    final dynamic cayuga;
+    final dynamic guarneri;
+    final dynamic hypochondriacism;
+    final dynamic indication;
+    final dynamic jaculative;
+    final dynamic nagana;
+    final dynamic netherlandish;
+    final dynamic noctivagous;
+    final dynamic nonphysiological;
+    final dynamic praxis;
+    final dynamic provision;
+    final dynamic subterhuman;
+    final dynamic sunlit;
+    final dynamic syncraniate;
+    final dynamic teachment;
+    final dynamic unmutinous;
+    final dynamic unstoppable;
+
+    OskarClass({
+        required this.acrobates,
+        required this.beanshooter,
+        required this.bearhound,
+        required this.cayuga,
+        required this.guarneri,
+        required this.hypochondriacism,
+        required this.indication,
+        required this.jaculative,
+        required this.nagana,
+        required this.netherlandish,
+        required this.noctivagous,
+        required this.nonphysiological,
+        required this.praxis,
+        required this.provision,
+        required this.subterhuman,
+        required this.sunlit,
+        required this.syncraniate,
+        required this.teachment,
+        required this.unmutinous,
+        required this.unstoppable,
+    });
+
+    OskarClass copyWith({
+        dynamic acrobates,
+        dynamic beanshooter,
+        dynamic bearhound,
+        dynamic cayuga,
+        dynamic guarneri,
+        dynamic hypochondriacism,
+        dynamic indication,
+        dynamic jaculative,
+        dynamic nagana,
+        dynamic netherlandish,
+        dynamic noctivagous,
+        dynamic nonphysiological,
+        dynamic praxis,
+        dynamic provision,
+        dynamic subterhuman,
+        dynamic sunlit,
+        dynamic syncraniate,
+        dynamic teachment,
+        dynamic unmutinous,
+        dynamic unstoppable,
+    }) => 
+        OskarClass(
+            acrobates: acrobates ?? this.acrobates,
+            beanshooter: beanshooter ?? this.beanshooter,
+            bearhound: bearhound ?? this.bearhound,
+            cayuga: cayuga ?? this.cayuga,
+            guarneri: guarneri ?? this.guarneri,
+            hypochondriacism: hypochondriacism ?? this.hypochondriacism,
+            indication: indication ?? this.indication,
+            jaculative: jaculative ?? this.jaculative,
+            nagana: nagana ?? this.nagana,
+            netherlandish: netherlandish ?? this.netherlandish,
+            noctivagous: noctivagous ?? this.noctivagous,
+            nonphysiological: nonphysiological ?? this.nonphysiological,
+            praxis: praxis ?? this.praxis,
+            provision: provision ?? this.provision,
+            subterhuman: subterhuman ?? this.subterhuman,
+            sunlit: sunlit ?? this.sunlit,
+            syncraniate: syncraniate ?? this.syncraniate,
+            teachment: teachment ?? this.teachment,
+            unmutinous: unmutinous ?? this.unmutinous,
+            unstoppable: unstoppable ?? this.unstoppable,
+        );
+
+    factory OskarClass.fromJson(Map<String, dynamic> json) => OskarClass(
+        acrobates: (json.containsKey("Acrobates") ? json["Acrobates"] : throw FormatException('Missing required property')),
+        beanshooter: (json.containsKey("beanshooter") ? json["beanshooter"] : throw FormatException('Missing required property')),
+        bearhound: (json.containsKey("bearhound") ? json["bearhound"] : throw FormatException('Missing required property')),
+        cayuga: (json.containsKey("Cayuga") ? json["Cayuga"] : throw FormatException('Missing required property')),
+        guarneri: (json.containsKey("guarneri") ? json["guarneri"] : throw FormatException('Missing required property')),
+        hypochondriacism: (json.containsKey("hypochondriacism") ? json["hypochondriacism"] : throw FormatException('Missing required property')),
+        indication: (json.containsKey("indication") ? json["indication"] : throw FormatException('Missing required property')),
+        jaculative: (json.containsKey("jaculative") ? json["jaculative"] : throw FormatException('Missing required property')),
+        nagana: (json.containsKey("nagana") ? json["nagana"] : throw FormatException('Missing required property')),
+        netherlandish: (json.containsKey("Netherlandish") ? json["Netherlandish"] : throw FormatException('Missing required property')),
+        noctivagous: (json.containsKey("noctivagous") ? json["noctivagous"] : throw FormatException('Missing required property')),
+        nonphysiological: (json.containsKey("nonphysiological") ? json["nonphysiological"] : throw FormatException('Missing required property')),
+        praxis: (json.containsKey("praxis") ? json["praxis"] : throw FormatException('Missing required property')),
+        provision: (json.containsKey("provision") ? json["provision"] : throw FormatException('Missing required property')),
+        subterhuman: (json.containsKey("subterhuman") ? json["subterhuman"] : throw FormatException('Missing required property')),
+        sunlit: (json.containsKey("sunlit") ? json["sunlit"] : throw FormatException('Missing required property')),
+        syncraniate: (json.containsKey("syncraniate") ? json["syncraniate"] : throw FormatException('Missing required property')),
+        teachment: (json.containsKey("teachment") ? json["teachment"] : throw FormatException('Missing required property')),
+        unmutinous: (json.containsKey("unmutinous") ? json["unmutinous"] : throw FormatException('Missing required property')),
+        unstoppable: (json.containsKey("unstoppable") ? json["unstoppable"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "Acrobates": acrobates,
+        "beanshooter": beanshooter,
+        "bearhound": bearhound,
+        "Cayuga": cayuga,
+        "guarneri": guarneri,
+        "hypochondriacism": hypochondriacism,
+        "indication": indication,
+        "jaculative": jaculative,
+        "nagana": nagana,
+        "Netherlandish": netherlandish,
+        "noctivagous": noctivagous,
+        "nonphysiological": nonphysiological,
+        "praxis": praxis,
+        "provision": provision,
+        "subterhuman": subterhuman,
+        "sunlit": sunlit,
+        "syncraniate": syncraniate,
+        "teachment": teachment,
+        "unmutinous": unmutinous,
+        "unstoppable": unstoppable,
+    };
+}
diff --git a/head/dart/test/inputs/json/priority/combinations2.json/from-map-true--d222f65b3fee/TopLevel.dart b/head/dart/test/inputs/json/priority/combinations2.json/from-map-true--d222f65b3fee/TopLevel.dart
new file mode 100644
index 0000000..215f333
--- /dev/null
+++ b/head/dart/test/inputs/json/priority/combinations2.json/from-map-true--d222f65b3fee/TopLevel.dart
@@ -0,0 +1,1121 @@
+// To parse this JSON data, do
+//
+//     final topLevel = topLevelFromJson(jsonString);
+
+import 'dart:convert';
+
+TopLevel topLevelFromJson(String str) => TopLevel.fromMap(json.decode(str));
+
+String topLevelToJson(TopLevel data) => json.encode(data.toMap());
+
+class TopLevel {
+    final List<dynamic> abranchiata;
+    final List<dynamic> academe;
+    final List<dynamic> acquirable;
+    final List<dynamic> aerometry;
+    final List<dynamic> alexin;
+    final List<dynamic> alleviate;
+    final List<dynamic> amaas;
+    final List<dynamic> ambassage;
+    final List<Amphithyron?> amphithyron;
+    final List<String?> andriana;
+    final List<dynamic> ankee;
+    final List<Map<String, int?>?> annihilator;
+    final dynamic annulose;
+    final List<dynamic> ansarie;
+    final List<dynamic> aphasia;
+    final List<dynamic> asprawl;
+    final List<bool?> attractive;
+    final Map<String, int> barksome;
+    final List<dynamic> bedesman;
+    final List<dynamic> belard;
+    final List<dynamic> bocking;
+    final List<dynamic> brawlingly;
+    final List<dynamic> brookie;
+    final List<dynamic> bumboatman;
+    final List<dynamic> bystreet;
+    final List<dynamic> calaverite;
+    final List<dynamic> catallactic;
+    final List<dynamic> cemental;
+    final List<dynamic> chytridiaceae;
+    final List<dynamic> discordia;
+    final List<dynamic> endomyces;
+    final List<dynamic> epinephelidae;
+    final List<dynamic> eupatorium;
+    final List<dynamic> gryphosaurus;
+    final List<dynamic> koryak;
+    final List<dynamic> lavinia;
+    final List<dynamic> oskar;
+    final List<dynamic> rebecca;
+    final List<dynamic> rhomboganoidei;
+    final bool rigsmal;
+    final List<dynamic> ruellia;
+    final List<dynamic> school;
+    final List<dynamic> shakespearolater;
+    final List<double> svan;
+    final Map<String, double> wayao;
+
+    TopLevel({
+        required this.abranchiata,
+        required this.academe,
+        required this.acquirable,
+        required this.aerometry,
+        required this.alexin,
+        required this.alleviate,
+        required this.amaas,
+        required this.ambassage,
+        required this.amphithyron,
+        required this.andriana,
+        required this.ankee,
+        required this.annihilator,
+        required this.annulose,
+        required this.ansarie,
+        required this.aphasia,
+        required this.asprawl,
+        required this.attractive,
+        required this.barksome,
+        required this.bedesman,
+        required this.belard,
+        required this.bocking,
+        required this.brawlingly,
+        required this.brookie,
+        required this.bumboatman,
+        required this.bystreet,
+        required this.calaverite,
+        required this.catallactic,
+        required this.cemental,
+        required this.chytridiaceae,
+        required this.discordia,
+        required this.endomyces,
+        required this.epinephelidae,
+        required this.eupatorium,
+        required this.gryphosaurus,
+        required this.koryak,
+        required this.lavinia,
+        required this.oskar,
+        required this.rebecca,
+        required this.rhomboganoidei,
+        required this.rigsmal,
+        required this.ruellia,
+        required this.school,
+        required this.shakespearolater,
+        required this.svan,
+        required this.wayao,
+    });
+
+    factory TopLevel.fromMap(Map<String, dynamic> json) => TopLevel(
+        abranchiata: List<dynamic>.from(json["Abranchiata"].map((x) => x)),
+        academe: List<dynamic>.from(json["academe"].map((x) => x)),
+        acquirable: List<dynamic>.from(json["acquirable"].map((x) => x)),
+        aerometry: List<dynamic>.from(json["aerometry"].map((x) => x)),
+        alexin: List<dynamic>.from(json["alexin"].map((x) => x)),
+        alleviate: List<dynamic>.from(json["alleviate"].map((x) => x)),
+        amaas: List<dynamic>.from(json["amaas"].map((x) => x)),
+        ambassage: List<dynamic>.from(json["ambassage"].map((x) => x)),
+        amphithyron: List<Amphithyron?>.from(json["amphithyron"].map((x) => x == null ? null : Amphithyron.fromMap(x))),
+        andriana: List<String?>.from(json["Andriana"].map((x) => x)),
+        ankee: List<dynamic>.from(json["ankee"].map((x) => x)),
+        annihilator: List<Map<String, int?>?>.from(json["annihilator"].map((x) => x == null ? null : Map.from(x!).map((k, v) => MapEntry<String, int?>(k, v)))),
+        annulose: (json.containsKey("annulose") ? json["annulose"] : throw FormatException('Missing required property')),
+        ansarie: List<dynamic>.from(json["Ansarie"].map((x) => x)),
+        aphasia: List<dynamic>.from(json["aphasia"].map((x) => x)),
+        asprawl: List<dynamic>.from(json["asprawl"].map((x) => x)),
+        attractive: List<bool?>.from(json["attractive"].map((x) => x)),
+        barksome: Map.from(json["barksome"]).map((k, v) => MapEntry<String, int>(k, v)),
+        bedesman: List<dynamic>.from(json["bedesman"].map((x) => x)),
+        belard: List<dynamic>.from(json["belard"].map((x) => x)),
+        bocking: List<dynamic>.from(json["bocking"].map((x) => x)),
+        brawlingly: List<dynamic>.from(json["brawlingly"].map((x) => x)),
+        brookie: List<dynamic>.from(json["brookie"].map((x) => x)),
+        bumboatman: List<dynamic>.from(json["bumboatman"].map((x) => x)),
+        bystreet: List<dynamic>.from(json["bystreet"].map((x) => x)),
+        calaverite: List<dynamic>.from(json["calaverite"].map((x) => x)),
+        catallactic: List<dynamic>.from(json["catallactic"].map((x) => x)),
+        cemental: List<dynamic>.from(json["cemental"].map((x) => x)),
+        chytridiaceae: List<dynamic>.from(json["Chytridiaceae"].map((x) => x)),
+        discordia: List<dynamic>.from(json["Discordia"].map((x) => x)),
+        endomyces: List<dynamic>.from(json["Endomyces"].map((x) => x)),
+        epinephelidae: List<dynamic>.from(json["Epinephelidae"].map((x) => x)),
+        eupatorium: List<dynamic>.from(json["Eupatorium"].map((x) => x)),
+        gryphosaurus: List<dynamic>.from(json["Gryphosaurus"].map((x) => x)),
+        koryak: List<dynamic>.from(json["Koryak"].map((x) => x)),
+        lavinia: List<dynamic>.from(json["Lavinia"].map((x) => x)),
+        oskar: List<dynamic>.from(json["Oskar"].map((x) => x)),
+        rebecca: List<dynamic>.from(json["Rebecca"].map((x) => x)),
+        rhomboganoidei: List<dynamic>.from(json["Rhomboganoidei"].map((x) => x)),
+        rigsmal: json["Rigsmal"],
+        ruellia: List<dynamic>.from(json["Ruellia"].map((x) => x)),
+        school: List<dynamic>.from(json["School"].map((x) => x)),
+        shakespearolater: List<dynamic>.from(json["Shakespearolater"].map((x) => x)),
+        svan: List<double>.from(json["Svan"].map((x) => x?.toDouble())),
+        wayao: Map.from(json["Wayao"]).map((k, v) => MapEntry<String, double>(k, v?.toDouble())),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "Abranchiata": List<dynamic>.from(abranchiata.map((x) => x)),
+        "academe": List<dynamic>.from(academe.map((x) => x)),
+        "acquirable": List<dynamic>.from(acquirable.map((x) => x)),
+        "aerometry": List<dynamic>.from(aerometry.map((x) => x)),
+        "alexin": List<dynamic>.from(alexin.map((x) => x)),
+        "alleviate": List<dynamic>.from(alleviate.map((x) => x)),
+        "amaas": List<dynamic>.from(amaas.map((x) => x)),
+        "ambassage": List<dynamic>.from(ambassage.map((x) => x)),
+        "amphithyron": List<dynamic>.from(amphithyron.map((x) => x?.toMap())),
+        "Andriana": List<dynamic>.from(andriana.map((x) => x)),
+        "ankee": List<dynamic>.from(ankee.map((x) => x)),
+        "annihilator": List<dynamic>.from(annihilator.map((x) => x == null ? null : Map.from(x!).map((k, v) => MapEntry<String, dynamic>(k, v)))),
+        "annulose": annulose,
+        "Ansarie": List<dynamic>.from(ansarie.map((x) => x)),
+        "aphasia": List<dynamic>.from(aphasia.map((x) => x)),
+        "asprawl": List<dynamic>.from(asprawl.map((x) => x)),
+        "attractive": List<dynamic>.from(attractive.map((x) => x)),
+        "barksome": Map.from(barksome).map((k, v) => MapEntry<String, dynamic>(k, v)),
+        "bedesman": List<dynamic>.from(bedesman.map((x) => x)),
+        "belard": List<dynamic>.from(belard.map((x) => x)),
+        "bocking": List<dynamic>.from(bocking.map((x) => x)),
+        "brawlingly": List<dynamic>.from(brawlingly.map((x) => x)),
+        "brookie": List<dynamic>.from(brookie.map((x) => x)),
+        "bumboatman": List<dynamic>.from(bumboatman.map((x) => x)),
+        "bystreet": List<dynamic>.from(bystreet.map((x) => x)),
+        "calaverite": List<dynamic>.from(calaverite.map((x) => x)),
+        "catallactic": List<dynamic>.from(catallactic.map((x) => x)),
+        "cemental": List<dynamic>.from(cemental.map((x) => x)),
+        "Chytridiaceae": List<dynamic>.from(chytridiaceae.map((x) => x)),
+        "Discordia": List<dynamic>.from(discordia.map((x) => x)),
+        "Endomyces": List<dynamic>.from(endomyces.map((x) => x)),
+        "Epinephelidae": List<dynamic>.from(epinephelidae.map((x) => x)),
+        "Eupatorium": List<dynamic>.from(eupatorium.map((x) => x)),
+        "Gryphosaurus": List<dynamic>.from(gryphosaurus.map((x) => x)),
+        "Koryak": List<dynamic>.from(koryak.map((x) => x)),
+        "Lavinia": List<dynamic>.from(lavinia.map((x) => x)),
+        "Oskar": List<dynamic>.from(oskar.map((x) => x)),
+        "Rebecca": List<dynamic>.from(rebecca.map((x) => x)),
+        "Rhomboganoidei": List<dynamic>.from(rhomboganoidei.map((x) => x)),
+        "Rigsmal": rigsmal,
+        "Ruellia": List<dynamic>.from(ruellia.map((x) => x)),
+        "School": List<dynamic>.from(school.map((x) => x)),
+        "Shakespearolater": List<dynamic>.from(shakespearolater.map((x) => x)),
+        "Svan": List<dynamic>.from(svan.map((x) => x)),
+        "Wayao": Map.from(wayao).map((k, v) => MapEntry<String, dynamic>(k, v)),
+    };
+}
+
+class AlleviateClass {
+    final dynamic apriori;
+    final dynamic beggarer;
+    final dynamic brokenheartedly;
+    final dynamic debilitation;
+    final dynamic frike;
+    final dynamic gastrolith;
+    final dynamic hulsean;
+    final dynamic orthocentric;
+    final dynamic petaly;
+    final dynamic probudgeting;
+    final dynamic reacquire;
+    final dynamic scow;
+    final dynamic shutoff;
+    final dynamic subcontiguous;
+    final dynamic suffumigate;
+    final dynamic transformable;
+    final dynamic uncoroneted;
+    final dynamic unparking;
+    final dynamic unvarnishedness;
+    final dynamic wherewithal;
+
+    AlleviateClass({
+        required this.apriori,
+        required this.beggarer,
+        required this.brokenheartedly,
+        required this.debilitation,
+        required this.frike,
+        required this.gastrolith,
+        required this.hulsean,
+        required this.orthocentric,
+        required this.petaly,
+        required this.probudgeting,
+        required this.reacquire,
+        required this.scow,
+        required this.shutoff,
+        required this.subcontiguous,
+        required this.suffumigate,
+        required this.transformable,
+        required this.uncoroneted,
+        required this.unparking,
+        required this.unvarnishedness,
+        required this.wherewithal,
+    });
+
+    factory AlleviateClass.fromMap(Map<String, dynamic> json) => AlleviateClass(
+        apriori: (json.containsKey("apriori") ? json["apriori"] : throw FormatException('Missing required property')),
+        beggarer: (json.containsKey("beggarer") ? json["beggarer"] : throw FormatException('Missing required property')),
+        brokenheartedly: (json.containsKey("brokenheartedly") ? json["brokenheartedly"] : throw FormatException('Missing required property')),
+        debilitation: (json.containsKey("debilitation") ? json["debilitation"] : throw FormatException('Missing required property')),
+        frike: (json.containsKey("frike") ? json["frike"] : throw FormatException('Missing required property')),
+        gastrolith: (json.containsKey("gastrolith") ? json["gastrolith"] : throw FormatException('Missing required property')),
+        hulsean: (json.containsKey("Hulsean") ? json["Hulsean"] : throw FormatException('Missing required property')),
+        orthocentric: (json.containsKey("orthocentric") ? json["orthocentric"] : throw FormatException('Missing required property')),
+        petaly: (json.containsKey("petaly") ? json["petaly"] : throw FormatException('Missing required property')),
+        probudgeting: (json.containsKey("probudgeting") ? json["probudgeting"] : throw FormatException('Missing required property')),
+        reacquire: (json.containsKey("reacquire") ? json["reacquire"] : throw FormatException('Missing required property')),
+        scow: (json.containsKey("scow") ? json["scow"] : throw FormatException('Missing required property')),
+        shutoff: (json.containsKey("shutoff") ? json["shutoff"] : throw FormatException('Missing required property')),
+        subcontiguous: (json.containsKey("subcontiguous") ? json["subcontiguous"] : throw FormatException('Missing required property')),
+        suffumigate: (json.containsKey("suffumigate") ? json["suffumigate"] : throw FormatException('Missing required property')),
+        transformable: (json.containsKey("transformable") ? json["transformable"] : throw FormatException('Missing required property')),
+        uncoroneted: (json.containsKey("uncoroneted") ? json["uncoroneted"] : throw FormatException('Missing required property')),
+        unparking: (json.containsKey("unparking") ? json["unparking"] : throw FormatException('Missing required property')),
+        unvarnishedness: (json.containsKey("unvarnishedness") ? json["unvarnishedness"] : throw FormatException('Missing required property')),
+        wherewithal: (json.containsKey("wherewithal") ? json["wherewithal"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "apriori": apriori,
+        "beggarer": beggarer,
+        "brokenheartedly": brokenheartedly,
+        "debilitation": debilitation,
+        "frike": frike,
+        "gastrolith": gastrolith,
+        "Hulsean": hulsean,
+        "orthocentric": orthocentric,
+        "petaly": petaly,
+        "probudgeting": probudgeting,
+        "reacquire": reacquire,
+        "scow": scow,
+        "shutoff": shutoff,
+        "subcontiguous": subcontiguous,
+        "suffumigate": suffumigate,
+        "transformable": transformable,
+        "uncoroneted": uncoroneted,
+        "unparking": unparking,
+        "unvarnishedness": unvarnishedness,
+        "wherewithal": wherewithal,
+    };
+}
+
+class Rebecca {
+    final double catharticalness;
+    final int chirotherium;
+    final String disdiapason;
+    final bool homocerc;
+    final dynamic nonbookish;
+
+    Rebecca({
+        required this.catharticalness,
+        required this.chirotherium,
+        required this.disdiapason,
+        required this.homocerc,
+        required this.nonbookish,
+    });
+
+    factory Rebecca.fromMap(Map<String, dynamic> json) => Rebecca(
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        homocerc: json["homocerc"],
+        nonbookish: (json.containsKey("nonbookish") ? json["nonbookish"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "homocerc": homocerc,
+        "nonbookish": nonbookish,
+    };
+}
+
+class Amphithyron {
+    final int? akroasis;
+    final int? antiphonical;
+    final int? basebred;
+    final double? catharticalness;
+    final int? chirotherium;
+    final int? conductometric;
+    final String? disdiapason;
+    final int? ensilation;
+    final int? eyebolt;
+    final int? fistulated;
+    final int? heteropod;
+    final bool? homocerc;
+    final int? juniperus;
+    final int? labyrinthically;
+    final int? martyrization;
+    final int? mispolicy;
+    final int? multipara;
+    final int? nazirite;
+    final dynamic nonbookish;
+    final int? possessorial;
+    final int? shamed;
+    final int? shelfworn;
+    final int? stagnum;
+    final int? those;
+    final int? undecimal;
+
+    Amphithyron({
+        this.akroasis,
+        this.antiphonical,
+        this.basebred,
+        this.catharticalness,
+        this.chirotherium,
+        this.conductometric,
+        this.disdiapason,
+        this.ensilation,
+        this.eyebolt,
+        this.fistulated,
+        this.heteropod,
+        this.homocerc,
+        this.juniperus,
+        this.labyrinthically,
+        this.martyrization,
+        this.mispolicy,
+        this.multipara,
+        this.nazirite,
+        this.nonbookish,
+        this.possessorial,
+        this.shamed,
+        this.shelfworn,
+        this.stagnum,
+        this.those,
+        this.undecimal,
+    });
+
+    factory Amphithyron.fromMap(Map<String, dynamic> json) => Amphithyron(
+        akroasis: json["akroasis"],
+        antiphonical: json["antiphonical"],
+        basebred: json["basebred"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        conductometric: json["conductometric"],
+        disdiapason: json["disdiapason"],
+        ensilation: json["ensilation"],
+        eyebolt: json["eyebolt"],
+        fistulated: json["fistulated"],
+        heteropod: json["heteropod"],
+        homocerc: json["homocerc"],
+        juniperus: json["Juniperus"],
+        labyrinthically: json["labyrinthically"],
+        martyrization: json["martyrization"],
+        mispolicy: json["mispolicy"],
+        multipara: json["multipara"],
+        nazirite: json["Nazirite"],
+        nonbookish: json["nonbookish"],
+        possessorial: json["possessorial"],
+        shamed: json["shamed"],
+        shelfworn: json["shelfworn"],
+        stagnum: json["stagnum"],
+        those: json["Those"],
+        undecimal: json["undecimal"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "akroasis": akroasis,
+        "antiphonical": antiphonical,
+        "basebred": basebred,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "conductometric": conductometric,
+        "disdiapason": disdiapason,
+        "ensilation": ensilation,
+        "eyebolt": eyebolt,
+        "fistulated": fistulated,
+        "heteropod": heteropod,
+        "homocerc": homocerc,
+        "Juniperus": juniperus,
+        "labyrinthically": labyrinthically,
+        "martyrization": martyrization,
+        "mispolicy": mispolicy,
+        "multipara": multipara,
+        "Nazirite": nazirite,
+        "nonbookish": nonbookish,
+        "possessorial": possessorial,
+        "shamed": shamed,
+        "shelfworn": shelfworn,
+        "stagnum": stagnum,
+        "Those": those,
+        "undecimal": undecimal,
+    };
+}
+
+class AnkeeClass {
+    final dynamic anomoean;
+    final dynamic barleyhood;
+    final dynamic befriender;
+    final dynamic brutishness;
+    final dynamic cephalalgy;
+    final dynamic cirurgian;
+    final dynamic conventionally;
+    final dynamic jackshay;
+    final dynamic milammeter;
+    final dynamic naja;
+    final dynamic ombrological;
+    final dynamic phonasthenia;
+    final dynamic retrievableness;
+    final dynamic snakily;
+    final dynamic swot;
+    final dynamic tartlet;
+    final dynamic thiofuran;
+    final dynamic tracheophone;
+    final dynamic tuglike;
+    final dynamic unscratchingly;
+
+    AnkeeClass({
+        required this.anomoean,
+        required this.barleyhood,
+        required this.befriender,
+        required this.brutishness,
+        required this.cephalalgy,
+        required this.cirurgian,
+        required this.conventionally,
+        required this.jackshay,
+        required this.milammeter,
+        required this.naja,
+        required this.ombrological,
+        required this.phonasthenia,
+        required this.retrievableness,
+        required this.snakily,
+        required this.swot,
+        required this.tartlet,
+        required this.thiofuran,
+        required this.tracheophone,
+        required this.tuglike,
+        required this.unscratchingly,
+    });
+
+    factory AnkeeClass.fromMap(Map<String, dynamic> json) => AnkeeClass(
+        anomoean: (json.containsKey("Anomoean") ? json["Anomoean"] : throw FormatException('Missing required property')),
+        barleyhood: (json.containsKey("barleyhood") ? json["barleyhood"] : throw FormatException('Missing required property')),
+        befriender: (json.containsKey("befriender") ? json["befriender"] : throw FormatException('Missing required property')),
+        brutishness: (json.containsKey("brutishness") ? json["brutishness"] : throw FormatException('Missing required property')),
+        cephalalgy: (json.containsKey("cephalalgy") ? json["cephalalgy"] : throw FormatException('Missing required property')),
+        cirurgian: (json.containsKey("cirurgian") ? json["cirurgian"] : throw FormatException('Missing required property')),
+        conventionally: (json.containsKey("conventionally") ? json["conventionally"] : throw FormatException('Missing required property')),
+        jackshay: (json.containsKey("jackshay") ? json["jackshay"] : throw FormatException('Missing required property')),
+        milammeter: (json.containsKey("milammeter") ? json["milammeter"] : throw FormatException('Missing required property')),
+        naja: (json.containsKey("Naja") ? json["Naja"] : throw FormatException('Missing required property')),
+        ombrological: (json.containsKey("ombrological") ? json["ombrological"] : throw FormatException('Missing required property')),
+        phonasthenia: (json.containsKey("phonasthenia") ? json["phonasthenia"] : throw FormatException('Missing required property')),
+        retrievableness: (json.containsKey("retrievableness") ? json["retrievableness"] : throw FormatException('Missing required property')),
+        snakily: (json.containsKey("snakily") ? json["snakily"] : throw FormatException('Missing required property')),
+        swot: (json.containsKey("swot") ? json["swot"] : throw FormatException('Missing required property')),
+        tartlet: (json.containsKey("tartlet") ? json["tartlet"] : throw FormatException('Missing required property')),
+        thiofuran: (json.containsKey("thiofuran") ? json["thiofuran"] : throw FormatException('Missing required property')),
+        tracheophone: (json.containsKey("tracheophone") ? json["tracheophone"] : throw FormatException('Missing required property')),
+        tuglike: (json.containsKey("tuglike") ? json["tuglike"] : throw FormatException('Missing required property')),
+        unscratchingly: (json.containsKey("unscratchingly") ? json["unscratchingly"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "Anomoean": anomoean,
+        "barleyhood": barleyhood,
+        "befriender": befriender,
+        "brutishness": brutishness,
+        "cephalalgy": cephalalgy,
+        "cirurgian": cirurgian,
+        "conventionally": conventionally,
+        "jackshay": jackshay,
+        "milammeter": milammeter,
+        "Naja": naja,
+        "ombrological": ombrological,
+        "phonasthenia": phonasthenia,
+        "retrievableness": retrievableness,
+        "snakily": snakily,
+        "swot": swot,
+        "tartlet": tartlet,
+        "thiofuran": thiofuran,
+        "tracheophone": tracheophone,
+        "tuglike": tuglike,
+        "unscratchingly": unscratchingly,
+    };
+}
+
+class AnsarieClass {
+    final dynamic accension;
+    final dynamic alida;
+    final dynamic asteria;
+    final dynamic beriberic;
+    final dynamic edgebone;
+    final dynamic gastrodialysis;
+    final dynamic geographic;
+    final dynamic ictonyx;
+    final dynamic metrocele;
+    final dynamic misgraft;
+    final dynamic monteith;
+    final dynamic notcher;
+    final dynamic prorestriction;
+    final dynamic ramist;
+    final dynamic throatlet;
+    final dynamic unfair;
+    final dynamic unsynonymous;
+    final dynamic water;
+    final dynamic zestfully;
+    final dynamic zincic;
+
+    AnsarieClass({
+        required this.accension,
+        required this.alida,
+        required this.asteria,
+        required this.beriberic,
+        required this.edgebone,
+        required this.gastrodialysis,
+        required this.geographic,
+        required this.ictonyx,
+        required this.metrocele,
+        required this.misgraft,
+        required this.monteith,
+        required this.notcher,
+        required this.prorestriction,
+        required this.ramist,
+        required this.throatlet,
+        required this.unfair,
+        required this.unsynonymous,
+        required this.water,
+        required this.zestfully,
+        required this.zincic,
+    });
+
+    factory AnsarieClass.fromMap(Map<String, dynamic> json) => AnsarieClass(
+        accension: (json.containsKey("accension") ? json["accension"] : throw FormatException('Missing required property')),
+        alida: (json.containsKey("Alida") ? json["Alida"] : throw FormatException('Missing required property')),
+        asteria: (json.containsKey("asteria") ? json["asteria"] : throw FormatException('Missing required property')),
+        beriberic: (json.containsKey("beriberic") ? json["beriberic"] : throw FormatException('Missing required property')),
+        edgebone: (json.containsKey("edgebone") ? json["edgebone"] : throw FormatException('Missing required property')),
+        gastrodialysis: (json.containsKey("gastrodialysis") ? json["gastrodialysis"] : throw FormatException('Missing required property')),
+        geographic: (json.containsKey("geographic") ? json["geographic"] : throw FormatException('Missing required property')),
+        ictonyx: (json.containsKey("Ictonyx") ? json["Ictonyx"] : throw FormatException('Missing required property')),
+        metrocele: (json.containsKey("metrocele") ? json["metrocele"] : throw FormatException('Missing required property')),
+        misgraft: (json.containsKey("misgraft") ? json["misgraft"] : throw FormatException('Missing required property')),
+        monteith: (json.containsKey("monteith") ? json["monteith"] : throw FormatException('Missing required property')),
+        notcher: (json.containsKey("notcher") ? json["notcher"] : throw FormatException('Missing required property')),
+        prorestriction: (json.containsKey("prorestriction") ? json["prorestriction"] : throw FormatException('Missing required property')),
+        ramist: (json.containsKey("Ramist") ? json["Ramist"] : throw FormatException('Missing required property')),
+        throatlet: (json.containsKey("throatlet") ? json["throatlet"] : throw FormatException('Missing required property')),
+        unfair: (json.containsKey("unfair") ? json["unfair"] : throw FormatException('Missing required property')),
+        unsynonymous: (json.containsKey("unsynonymous") ? json["unsynonymous"] : throw FormatException('Missing required property')),
+        water: (json.containsKey("water") ? json["water"] : throw FormatException('Missing required property')),
+        zestfully: (json.containsKey("zestfully") ? json["zestfully"] : throw FormatException('Missing required property')),
+        zincic: (json.containsKey("zincic") ? json["zincic"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "accension": accension,
+        "Alida": alida,
+        "asteria": asteria,
+        "beriberic": beriberic,
+        "edgebone": edgebone,
+        "gastrodialysis": gastrodialysis,
+        "geographic": geographic,
+        "Ictonyx": ictonyx,
+        "metrocele": metrocele,
+        "misgraft": misgraft,
+        "monteith": monteith,
+        "notcher": notcher,
+        "prorestriction": prorestriction,
+        "Ramist": ramist,
+        "throatlet": throatlet,
+        "unfair": unfair,
+        "unsynonymous": unsynonymous,
+        "water": water,
+        "zestfully": zestfully,
+        "zincic": zincic,
+    };
+}
+
+class ChytridiaceaeClass {
+    final dynamic batidaceae;
+    final dynamic brechites;
+    final dynamic codespairer;
+    final dynamic emery;
+    final dynamic enervative;
+    final dynamic excriminate;
+    final dynamic goshenite;
+    final dynamic grime;
+    final dynamic gritten;
+    final dynamic hectorly;
+    final dynamic intermediation;
+    final dynamic meeterly;
+    final dynamic narraganset;
+    final dynamic onymatic;
+    final dynamic paddlecock;
+    final dynamic thana;
+    final dynamic thornily;
+    final dynamic uckia;
+    final dynamic unmettle;
+    final dynamic vorticellid;
+
+    ChytridiaceaeClass({
+        required this.batidaceae,
+        required this.brechites,
+        required this.codespairer,
+        required this.emery,
+        required this.enervative,
+        required this.excriminate,
+        required this.goshenite,
+        required this.grime,
+        required this.gritten,
+        required this.hectorly,
+        required this.intermediation,
+        required this.meeterly,
+        required this.narraganset,
+        required this.onymatic,
+        required this.paddlecock,
+        required this.thana,
+        required this.thornily,
+        required this.uckia,
+        required this.unmettle,
+        required this.vorticellid,
+    });
+
+    factory ChytridiaceaeClass.fromMap(Map<String, dynamic> json) => ChytridiaceaeClass(
+        batidaceae: (json.containsKey("Batidaceae") ? json["Batidaceae"] : throw FormatException('Missing required property')),
+        brechites: (json.containsKey("Brechites") ? json["Brechites"] : throw FormatException('Missing required property')),
+        codespairer: (json.containsKey("codespairer") ? json["codespairer"] : throw FormatException('Missing required property')),
+        emery: (json.containsKey("Emery") ? json["Emery"] : throw FormatException('Missing required property')),
+        enervative: (json.containsKey("enervative") ? json["enervative"] : throw FormatException('Missing required property')),
+        excriminate: (json.containsKey("excriminate") ? json["excriminate"] : throw FormatException('Missing required property')),
+        goshenite: (json.containsKey("goshenite") ? json["goshenite"] : throw FormatException('Missing required property')),
+        grime: (json.containsKey("grime") ? json["grime"] : throw FormatException('Missing required property')),
+        gritten: (json.containsKey("gritten") ? json["gritten"] : throw FormatException('Missing required property')),
+        hectorly: (json.containsKey("hectorly") ? json["hectorly"] : throw FormatException('Missing required property')),
+        intermediation: (json.containsKey("intermediation") ? json["intermediation"] : throw FormatException('Missing required property')),
+        meeterly: (json.containsKey("meeterly") ? json["meeterly"] : throw FormatException('Missing required property')),
+        narraganset: (json.containsKey("Narraganset") ? json["Narraganset"] : throw FormatException('Missing required property')),
+        onymatic: (json.containsKey("onymatic") ? json["onymatic"] : throw FormatException('Missing required property')),
+        paddlecock: (json.containsKey("paddlecock") ? json["paddlecock"] : throw FormatException('Missing required property')),
+        thana: (json.containsKey("thana") ? json["thana"] : throw FormatException('Missing required property')),
+        thornily: (json.containsKey("thornily") ? json["thornily"] : throw FormatException('Missing required property')),
+        uckia: (json.containsKey("uckia") ? json["uckia"] : throw FormatException('Missing required property')),
+        unmettle: (json.containsKey("unmettle") ? json["unmettle"] : throw FormatException('Missing required property')),
+        vorticellid: (json.containsKey("vorticellid") ? json["vorticellid"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "Batidaceae": batidaceae,
+        "Brechites": brechites,
+        "codespairer": codespairer,
+        "Emery": emery,
+        "enervative": enervative,
+        "excriminate": excriminate,
+        "goshenite": goshenite,
+        "grime": grime,
+        "gritten": gritten,
+        "hectorly": hectorly,
+        "intermediation": intermediation,
+        "meeterly": meeterly,
+        "Narraganset": narraganset,
+        "onymatic": onymatic,
+        "paddlecock": paddlecock,
+        "thana": thana,
+        "thornily": thornily,
+        "uckia": uckia,
+        "unmettle": unmettle,
+        "vorticellid": vorticellid,
+    };
+}
+
+class DiscordiaClass {
+    final int? altaic;
+    final int? amoristic;
+    final int? blennophthalmia;
+    final double? catharticalness;
+    final int? chirotherium;
+    final int? disciplinability;
+    final String? disdiapason;
+    final int? goofer;
+    final bool? homocerc;
+    final int? laryngograph;
+    final int? leucitis;
+    final int? lymphocyst;
+    final int? microcosmology;
+    final int? nauseation;
+    final dynamic nonbookish;
+    final int? patarin;
+    final int? preliberal;
+    final int? prettifier;
+    final int? rangework;
+    final int? redient;
+    final int? subfusiform;
+    final int? suicidical;
+    final int? swow;
+    final int? wastrel;
+    final int? wingle;
+
+    DiscordiaClass({
+        this.altaic,
+        this.amoristic,
+        this.blennophthalmia,
+        this.catharticalness,
+        this.chirotherium,
+        this.disciplinability,
+        this.disdiapason,
+        this.goofer,
+        this.homocerc,
+        this.laryngograph,
+        this.leucitis,
+        this.lymphocyst,
+        this.microcosmology,
+        this.nauseation,
+        this.nonbookish,
+        this.patarin,
+        this.preliberal,
+        this.prettifier,
+        this.rangework,
+        this.redient,
+        this.subfusiform,
+        this.suicidical,
+        this.swow,
+        this.wastrel,
+        this.wingle,
+    });
+
+    factory DiscordiaClass.fromMap(Map<String, dynamic> json) => DiscordiaClass(
+        altaic: json["Altaic"],
+        amoristic: json["amoristic"],
+        blennophthalmia: json["blennophthalmia"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        disciplinability: json["disciplinability"],
+        disdiapason: json["disdiapason"],
+        goofer: json["goofer"],
+        homocerc: json["homocerc"],
+        laryngograph: json["laryngograph"],
+        leucitis: json["leucitis"],
+        lymphocyst: json["lymphocyst"],
+        microcosmology: json["microcosmology"],
+        nauseation: json["nauseation"],
+        nonbookish: json["nonbookish"],
+        patarin: json["Patarin"],
+        preliberal: json["preliberal"],
+        prettifier: json["prettifier"],
+        rangework: json["rangework"],
+        redient: json["redient"],
+        subfusiform: json["subfusiform"],
+        suicidical: json["suicidical"],
+        swow: json["swow"],
+        wastrel: json["wastrel"],
+        wingle: json["wingle"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "Altaic": altaic,
+        "amoristic": amoristic,
+        "blennophthalmia": blennophthalmia,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "disciplinability": disciplinability,
+        "disdiapason": disdiapason,
+        "goofer": goofer,
+        "homocerc": homocerc,
+        "laryngograph": laryngograph,
+        "leucitis": leucitis,
+        "lymphocyst": lymphocyst,
+        "microcosmology": microcosmology,
+        "nauseation": nauseation,
+        "nonbookish": nonbookish,
+        "Patarin": patarin,
+        "preliberal": preliberal,
+        "prettifier": prettifier,
+        "rangework": rangework,
+        "redient": redient,
+        "subfusiform": subfusiform,
+        "suicidical": suicidical,
+        "swow": swow,
+        "wastrel": wastrel,
+        "wingle": wingle,
+    };
+}
+
+class GryphosaurusClass {
+    final dynamic amissibility;
+    final dynamic burushaski;
+    final dynamic citronin;
+    final dynamic coplaintiff;
+    final dynamic disquisitionary;
+    final dynamic enoplan;
+    final dynamic faintness;
+    final dynamic hebetomy;
+    final dynamic islandry;
+    final dynamic lameduck;
+    final dynamic overbattle;
+    final dynamic overinterested;
+    final dynamic phrenologic;
+    final dynamic rainband;
+    final dynamic shiningly;
+    final dynamic stamineous;
+    final dynamic subscapularis;
+    final dynamic tahami;
+    final dynamic undaubed;
+    final dynamic underntime;
+
+    GryphosaurusClass({
+        required this.amissibility,
+        required this.burushaski,
+        required this.citronin,
+        required this.coplaintiff,
+        required this.disquisitionary,
+        required this.enoplan,
+        required this.faintness,
+        required this.hebetomy,
+        required this.islandry,
+        required this.lameduck,
+        required this.overbattle,
+        required this.overinterested,
+        required this.phrenologic,
+        required this.rainband,
+        required this.shiningly,
+        required this.stamineous,
+        required this.subscapularis,
+        required this.tahami,
+        required this.undaubed,
+        required this.underntime,
+    });
+
+    factory GryphosaurusClass.fromMap(Map<String, dynamic> json) => GryphosaurusClass(
+        amissibility: (json.containsKey("amissibility") ? json["amissibility"] : throw FormatException('Missing required property')),
+        burushaski: (json.containsKey("Burushaski") ? json["Burushaski"] : throw FormatException('Missing required property')),
+        citronin: (json.containsKey("citronin") ? json["citronin"] : throw FormatException('Missing required property')),
+        coplaintiff: (json.containsKey("coplaintiff") ? json["coplaintiff"] : throw FormatException('Missing required property')),
+        disquisitionary: (json.containsKey("disquisitionary") ? json["disquisitionary"] : throw FormatException('Missing required property')),
+        enoplan: (json.containsKey("enoplan") ? json["enoplan"] : throw FormatException('Missing required property')),
+        faintness: (json.containsKey("faintness") ? json["faintness"] : throw FormatException('Missing required property')),
+        hebetomy: (json.containsKey("hebetomy") ? json["hebetomy"] : throw FormatException('Missing required property')),
+        islandry: (json.containsKey("islandry") ? json["islandry"] : throw FormatException('Missing required property')),
+        lameduck: (json.containsKey("lameduck") ? json["lameduck"] : throw FormatException('Missing required property')),
+        overbattle: (json.containsKey("overbattle") ? json["overbattle"] : throw FormatException('Missing required property')),
+        overinterested: (json.containsKey("overinterested") ? json["overinterested"] : throw FormatException('Missing required property')),
+        phrenologic: (json.containsKey("phrenologic") ? json["phrenologic"] : throw FormatException('Missing required property')),
+        rainband: (json.containsKey("rainband") ? json["rainband"] : throw FormatException('Missing required property')),
+        shiningly: (json.containsKey("shiningly") ? json["shiningly"] : throw FormatException('Missing required property')),
+        stamineous: (json.containsKey("stamineous") ? json["stamineous"] : throw FormatException('Missing required property')),
+        subscapularis: (json.containsKey("subscapularis") ? json["subscapularis"] : throw FormatException('Missing required property')),
+        tahami: (json.containsKey("Tahami") ? json["Tahami"] : throw FormatException('Missing required property')),
+        undaubed: (json.containsKey("undaubed") ? json["undaubed"] : throw FormatException('Missing required property')),
+        underntime: (json.containsKey("underntime") ? json["underntime"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "amissibility": amissibility,
+        "Burushaski": burushaski,
+        "citronin": citronin,
+        "coplaintiff": coplaintiff,
+        "disquisitionary": disquisitionary,
+        "enoplan": enoplan,
+        "faintness": faintness,
+        "hebetomy": hebetomy,
+        "islandry": islandry,
+        "lameduck": lameduck,
+        "overbattle": overbattle,
+        "overinterested": overinterested,
+        "phrenologic": phrenologic,
+        "rainband": rainband,
+        "shiningly": shiningly,
+        "stamineous": stamineous,
+        "subscapularis": subscapularis,
+        "Tahami": tahami,
+        "undaubed": undaubed,
+        "underntime": underntime,
+    };
+}
+
+class LaviniaClass {
+    final int? agitable;
+    final int? asininity;
+    final int? benefiter;
+    final int? bronzelike;
+    final double? catharticalness;
+    final int? chirotherium;
+    final int? cholesteatomatous;
+    final int? deprivement;
+    final String? disdiapason;
+    final int? flippantness;
+    final int? fogproof;
+    final bool? homocerc;
+    final int? merrymeeting;
+    final dynamic nonbookish;
+    final int? overcareful;
+    final int? panaris;
+    final int? preacceptance;
+    final int? quinoxaline;
+    final int? sig;
+    final int? superconfusion;
+    final int? tacana;
+    final int? tillotter;
+    final int? tranquillize;
+    final int? unquestionable;
+    final int? uproute;
+
+    LaviniaClass({
+        this.agitable,
+        this.asininity,
+        this.benefiter,
+        this.bronzelike,
+        this.catharticalness,
+        this.chirotherium,
+        this.cholesteatomatous,
+        this.deprivement,
+        this.disdiapason,
+        this.flippantness,
+        this.fogproof,
+        this.homocerc,
+        this.merrymeeting,
+        this.nonbookish,
+        this.overcareful,
+        this.panaris,
+        this.preacceptance,
+        this.quinoxaline,
+        this.sig,
+        this.superconfusion,
+        this.tacana,
+        this.tillotter,
+        this.tranquillize,
+        this.unquestionable,
+        this.uproute,
+    });
+
+    factory LaviniaClass.fromMap(Map<String, dynamic> json) => LaviniaClass(
+        agitable: json["agitable"],
+        asininity: json["asininity"],
+        benefiter: json["benefiter"],
+        bronzelike: json["bronzelike"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        cholesteatomatous: json["cholesteatomatous"],
+        deprivement: json["deprivement"],
+        disdiapason: json["disdiapason"],
+        flippantness: json["flippantness"],
+        fogproof: json["fogproof"],
+        homocerc: json["homocerc"],
+        merrymeeting: json["merrymeeting"],
+        nonbookish: json["nonbookish"],
+        overcareful: json["overcareful"],
+        panaris: json["panaris"],
+        preacceptance: json["preacceptance"],
+        quinoxaline: json["quinoxaline"],
+        sig: json["sig"],
+        superconfusion: json["superconfusion"],
+        tacana: json["Tacana"],
+        tillotter: json["tillotter"],
+        tranquillize: json["tranquillize"],
+        unquestionable: json["unquestionable"],
+        uproute: json["uproute"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "agitable": agitable,
+        "asininity": asininity,
+        "benefiter": benefiter,
+        "bronzelike": bronzelike,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "cholesteatomatous": cholesteatomatous,
+        "deprivement": deprivement,
+        "disdiapason": disdiapason,
+        "flippantness": flippantness,
+        "fogproof": fogproof,
+        "homocerc": homocerc,
+        "merrymeeting": merrymeeting,
+        "nonbookish": nonbookish,
+        "overcareful": overcareful,
+        "panaris": panaris,
+        "preacceptance": preacceptance,
+        "quinoxaline": quinoxaline,
+        "sig": sig,
+        "superconfusion": superconfusion,
+        "Tacana": tacana,
+        "tillotter": tillotter,
+        "tranquillize": tranquillize,
+        "unquestionable": unquestionable,
+        "uproute": uproute,
+    };
+}
+
+class OskarClass {
+    final dynamic acrobates;
+    final dynamic beanshooter;
+    final dynamic bearhound;
+    final dynamic cayuga;
+    final dynamic guarneri;
+    final dynamic hypochondriacism;
+    final dynamic indication;
+    final dynamic jaculative;
+    final dynamic nagana;
+    final dynamic netherlandish;
+    final dynamic noctivagous;
+    final dynamic nonphysiological;
+    final dynamic praxis;
+    final dynamic provision;
+    final dynamic subterhuman;
+    final dynamic sunlit;
+    final dynamic syncraniate;
+    final dynamic teachment;
+    final dynamic unmutinous;
+    final dynamic unstoppable;
+
+    OskarClass({
+        required this.acrobates,
+        required this.beanshooter,
+        required this.bearhound,
+        required this.cayuga,
+        required this.guarneri,
+        required this.hypochondriacism,
+        required this.indication,
+        required this.jaculative,
+        required this.nagana,
+        required this.netherlandish,
+        required this.noctivagous,
+        required this.nonphysiological,
+        required this.praxis,
+        required this.provision,
+        required this.subterhuman,
+        required this.sunlit,
+        required this.syncraniate,
+        required this.teachment,
+        required this.unmutinous,
+        required this.unstoppable,
+    });
+
+    factory OskarClass.fromMap(Map<String, dynamic> json) => OskarClass(
+        acrobates: (json.containsKey("Acrobates") ? json["Acrobates"] : throw FormatException('Missing required property')),
+        beanshooter: (json.containsKey("beanshooter") ? json["beanshooter"] : throw FormatException('Missing required property')),
+        bearhound: (json.containsKey("bearhound") ? json["bearhound"] : throw FormatException('Missing required property')),
+        cayuga: (json.containsKey("Cayuga") ? json["Cayuga"] : throw FormatException('Missing required property')),
+        guarneri: (json.containsKey("guarneri") ? json["guarneri"] : throw FormatException('Missing required property')),
+        hypochondriacism: (json.containsKey("hypochondriacism") ? json["hypochondriacism"] : throw FormatException('Missing required property')),
+        indication: (json.containsKey("indication") ? json["indication"] : throw FormatException('Missing required property')),
+        jaculative: (json.containsKey("jaculative") ? json["jaculative"] : throw FormatException('Missing required property')),
+        nagana: (json.containsKey("nagana") ? json["nagana"] : throw FormatException('Missing required property')),
+        netherlandish: (json.containsKey("Netherlandish") ? json["Netherlandish"] : throw FormatException('Missing required property')),
+        noctivagous: (json.containsKey("noctivagous") ? json["noctivagous"] : throw FormatException('Missing required property')),
+        nonphysiological: (json.containsKey("nonphysiological") ? json["nonphysiological"] : throw FormatException('Missing required property')),
+        praxis: (json.containsKey("praxis") ? json["praxis"] : throw FormatException('Missing required property')),
+        provision: (json.containsKey("provision") ? json["provision"] : throw FormatException('Missing required property')),
+        subterhuman: (json.containsKey("subterhuman") ? json["subterhuman"] : throw FormatException('Missing required property')),
+        sunlit: (json.containsKey("sunlit") ? json["sunlit"] : throw FormatException('Missing required property')),
+        syncraniate: (json.containsKey("syncraniate") ? json["syncraniate"] : throw FormatException('Missing required property')),
+        teachment: (json.containsKey("teachment") ? json["teachment"] : throw FormatException('Missing required property')),
+        unmutinous: (json.containsKey("unmutinous") ? json["unmutinous"] : throw FormatException('Missing required property')),
+        unstoppable: (json.containsKey("unstoppable") ? json["unstoppable"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "Acrobates": acrobates,
+        "beanshooter": beanshooter,
+        "bearhound": bearhound,
+        "Cayuga": cayuga,
+        "guarneri": guarneri,
+        "hypochondriacism": hypochondriacism,
+        "indication": indication,
+        "jaculative": jaculative,
+        "nagana": nagana,
+        "Netherlandish": netherlandish,
+        "noctivagous": noctivagous,
+        "nonphysiological": nonphysiological,
+        "praxis": praxis,
+        "provision": provision,
+        "subterhuman": subterhuman,
+        "sunlit": sunlit,
+        "syncraniate": syncraniate,
+        "teachment": teachment,
+        "unmutinous": unmutinous,
+        "unstoppable": unstoppable,
+    };
+}
diff --git a/head/dart/test/inputs/json/priority/combinations3.json/copy-with-true--bb7e994c05fe/TopLevel.dart b/head/dart/test/inputs/json/priority/combinations3.json/copy-with-true--bb7e994c05fe/TopLevel.dart
new file mode 100644
index 0000000..e81057c
--- /dev/null
+++ b/head/dart/test/inputs/json/priority/combinations3.json/copy-with-true--bb7e994c05fe/TopLevel.dart
@@ -0,0 +1,2286 @@
+// To parse this JSON data, do
+//
+//     final topLevel = topLevelFromJson(jsonString);
+
+import 'dart:convert';
+
+TopLevel topLevelFromJson(String str) => TopLevel.fromJson(json.decode(str));
+
+String topLevelToJson(TopLevel data) => json.encode(data.toJson());
+
+class TopLevel {
+    final List<dynamic> juror;
+    final List<dynamic> kongoni;
+    final List<dynamic> ladronism;
+    final List<dynamic> landlubberly;
+    final List<dynamic> listener;
+    final List<dynamic> lupus;
+    final List<Maslin> maslin;
+    final List<dynamic> monazite;
+    final List<dynamic> monoliteral;
+    final List<dynamic> monotheistically;
+    final List<dynamic> montage;
+    final List<dynamic> moralness;
+    final List<MonaziteClass?> mowra;
+    final List<dynamic> mulishly;
+    final List<dynamic> myoscope;
+    final List<List<int?>?> nach;
+    final List<dynamic> neuromastic;
+    final List<Noncontributing> noncontributing;
+    final List<dynamic> nonnervous;
+    final List<dynamic> nonvaluation;
+    final List<dynamic> occupationalist;
+    final List<dynamic> outrival;
+    final List<dynamic> paleographically;
+    final List<dynamic> pamphletwise;
+    final List<dynamic> pediatrics;
+    final List<bool> perceptive;
+    final List<dynamic> piaculum;
+    final List<dynamic> piccadilly;
+    final List<dynamic> piffler;
+    final List<dynamic> pithful;
+    final List<dynamic> placuntitis;
+    final List<dynamic> plectopterous;
+    final List<Pneumocele?> pneumocele;
+    final List<dynamic> poliorcetic;
+    final List<dynamic> poormaster;
+    final List<dynamic> potwhisky;
+    final List<dynamic> practicalizer;
+    final List<dynamic> prefreshman;
+    final List<dynamic> prehensility;
+    final List<dynamic> prevoidance;
+    final List<Map<String, int?>> probant;
+    final List<dynamic> protext;
+
+    TopLevel({
+        required this.juror,
+        required this.kongoni,
+        required this.ladronism,
+        required this.landlubberly,
+        required this.listener,
+        required this.lupus,
+        required this.maslin,
+        required this.monazite,
+        required this.monoliteral,
+        required this.monotheistically,
+        required this.montage,
+        required this.moralness,
+        required this.mowra,
+        required this.mulishly,
+        required this.myoscope,
+        required this.nach,
+        required this.neuromastic,
+        required this.noncontributing,
+        required this.nonnervous,
+        required this.nonvaluation,
+        required this.occupationalist,
+        required this.outrival,
+        required this.paleographically,
+        required this.pamphletwise,
+        required this.pediatrics,
+        required this.perceptive,
+        required this.piaculum,
+        required this.piccadilly,
+        required this.piffler,
+        required this.pithful,
+        required this.placuntitis,
+        required this.plectopterous,
+        required this.pneumocele,
+        required this.poliorcetic,
+        required this.poormaster,
+        required this.potwhisky,
+        required this.practicalizer,
+        required this.prefreshman,
+        required this.prehensility,
+        required this.prevoidance,
+        required this.probant,
+        required this.protext,
+    });
+
+    TopLevel copyWith({
+        List<dynamic>? juror,
+        List<dynamic>? kongoni,
+        List<dynamic>? ladronism,
+        List<dynamic>? landlubberly,
+        List<dynamic>? listener,
+        List<dynamic>? lupus,
+        List<Maslin>? maslin,
+        List<dynamic>? monazite,
+        List<dynamic>? monoliteral,
+        List<dynamic>? monotheistically,
+        List<dynamic>? montage,
+        List<dynamic>? moralness,
+        List<MonaziteClass?>? mowra,
+        List<dynamic>? mulishly,
+        List<dynamic>? myoscope,
+        List<List<int?>?>? nach,
+        List<dynamic>? neuromastic,
+        List<Noncontributing>? noncontributing,
+        List<dynamic>? nonnervous,
+        List<dynamic>? nonvaluation,
+        List<dynamic>? occupationalist,
+        List<dynamic>? outrival,
+        List<dynamic>? paleographically,
+        List<dynamic>? pamphletwise,
+        List<dynamic>? pediatrics,
+        List<bool>? perceptive,
+        List<dynamic>? piaculum,
+        List<dynamic>? piccadilly,
+        List<dynamic>? piffler,
+        List<dynamic>? pithful,
+        List<dynamic>? placuntitis,
+        List<dynamic>? plectopterous,
+        List<Pneumocele?>? pneumocele,
+        List<dynamic>? poliorcetic,
+        List<dynamic>? poormaster,
+        List<dynamic>? potwhisky,
+        List<dynamic>? practicalizer,
+        List<dynamic>? prefreshman,
+        List<dynamic>? prehensility,
+        List<dynamic>? prevoidance,
+        List<Map<String, int?>>? probant,
+        List<dynamic>? protext,
+    }) => 
+        TopLevel(
+            juror: juror ?? this.juror,
+            kongoni: kongoni ?? this.kongoni,
+            ladronism: ladronism ?? this.ladronism,
+            landlubberly: landlubberly ?? this.landlubberly,
+            listener: listener ?? this.listener,
+            lupus: lupus ?? this.lupus,
+            maslin: maslin ?? this.maslin,
+            monazite: monazite ?? this.monazite,
+            monoliteral: monoliteral ?? this.monoliteral,
+            monotheistically: monotheistically ?? this.monotheistically,
+            montage: montage ?? this.montage,
+            moralness: moralness ?? this.moralness,
+            mowra: mowra ?? this.mowra,
+            mulishly: mulishly ?? this.mulishly,
+            myoscope: myoscope ?? this.myoscope,
+            nach: nach ?? this.nach,
+            neuromastic: neuromastic ?? this.neuromastic,
+            noncontributing: noncontributing ?? this.noncontributing,
+            nonnervous: nonnervous ?? this.nonnervous,
+            nonvaluation: nonvaluation ?? this.nonvaluation,
+            occupationalist: occupationalist ?? this.occupationalist,
+            outrival: outrival ?? this.outrival,
+            paleographically: paleographically ?? this.paleographically,
+            pamphletwise: pamphletwise ?? this.pamphletwise,
+            pediatrics: pediatrics ?? this.pediatrics,
+            perceptive: perceptive ?? this.perceptive,
+            piaculum: piaculum ?? this.piaculum,
+            piccadilly: piccadilly ?? this.piccadilly,
+            piffler: piffler ?? this.piffler,
+            pithful: pithful ?? this.pithful,
+            placuntitis: placuntitis ?? this.placuntitis,
+            plectopterous: plectopterous ?? this.plectopterous,
+            pneumocele: pneumocele ?? this.pneumocele,
+            poliorcetic: poliorcetic ?? this.poliorcetic,
+            poormaster: poormaster ?? this.poormaster,
+            potwhisky: potwhisky ?? this.potwhisky,
+            practicalizer: practicalizer ?? this.practicalizer,
+            prefreshman: prefreshman ?? this.prefreshman,
+            prehensility: prehensility ?? this.prehensility,
+            prevoidance: prevoidance ?? this.prevoidance,
+            probant: probant ?? this.probant,
+            protext: protext ?? this.protext,
+        );
+
+    factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
+        juror: List<dynamic>.from(json["juror"].map((x) => x)),
+        kongoni: List<dynamic>.from(json["kongoni"].map((x) => x)),
+        ladronism: List<dynamic>.from(json["ladronism"].map((x) => x)),
+        landlubberly: List<dynamic>.from(json["landlubberly"].map((x) => x)),
+        listener: List<dynamic>.from(json["listener"].map((x) => x)),
+        lupus: List<dynamic>.from(json["lupus"].map((x) => x)),
+        maslin: List<Maslin>.from(json["maslin"].map((x) => Maslin.fromJson(x))),
+        monazite: List<dynamic>.from(json["monazite"].map((x) => x)),
+        monoliteral: List<dynamic>.from(json["monoliteral"].map((x) => x)),
+        monotheistically: List<dynamic>.from(json["monotheistically"].map((x) => x)),
+        montage: List<dynamic>.from(json["montage"].map((x) => x)),
+        moralness: List<dynamic>.from(json["moralness"].map((x) => x)),
+        mowra: List<MonaziteClass?>.from(json["mowra"].map((x) => x == null ? null : MonaziteClass.fromJson(x))),
+        mulishly: List<dynamic>.from(json["mulishly"].map((x) => x)),
+        myoscope: List<dynamic>.from(json["myoscope"].map((x) => x)),
+        nach: List<List<int?>?>.from(json["nach"].map((x) => x == null ? null : List<int?>.from(x!.map((x) => x)))),
+        neuromastic: List<dynamic>.from(json["neuromastic"].map((x) => x)),
+        noncontributing: List<Noncontributing>.from(json["noncontributing"].map((x) => Noncontributing.fromJson(x))),
+        nonnervous: List<dynamic>.from(json["nonnervous"].map((x) => x)),
+        nonvaluation: List<dynamic>.from(json["nonvaluation"].map((x) => x)),
+        occupationalist: List<dynamic>.from(json["occupationalist"].map((x) => x)),
+        outrival: List<dynamic>.from(json["outrival"].map((x) => x)),
+        paleographically: List<dynamic>.from(json["paleographically"].map((x) => x)),
+        pamphletwise: List<dynamic>.from(json["pamphletwise"].map((x) => x)),
+        pediatrics: List<dynamic>.from(json["pediatrics"].map((x) => x)),
+        perceptive: List<bool>.from(json["perceptive"].map((x) => x)),
+        piaculum: List<dynamic>.from(json["piaculum"].map((x) => x)),
+        piccadilly: List<dynamic>.from(json["piccadilly"].map((x) => x)),
+        piffler: List<dynamic>.from(json["piffler"].map((x) => x)),
+        pithful: List<dynamic>.from(json["pithful"].map((x) => x)),
+        placuntitis: List<dynamic>.from(json["placuntitis"].map((x) => x)),
+        plectopterous: List<dynamic>.from(json["plectopterous"].map((x) => x)),
+        pneumocele: List<Pneumocele?>.from(json["pneumocele"].map((x) => x == null ? null : Pneumocele.fromJson(x))),
+        poliorcetic: List<dynamic>.from(json["poliorcetic"].map((x) => x)),
+        poormaster: List<dynamic>.from(json["poormaster"].map((x) => x)),
+        potwhisky: List<dynamic>.from(json["potwhisky"].map((x) => x)),
+        practicalizer: List<dynamic>.from(json["practicalizer"].map((x) => x)),
+        prefreshman: List<dynamic>.from(json["prefreshman"].map((x) => x)),
+        prehensility: List<dynamic>.from(json["prehensility"].map((x) => x)),
+        prevoidance: List<dynamic>.from(json["prevoidance"].map((x) => x)),
+        probant: List<Map<String, int?>>.from(json["probant"].map((x) => Map.from(x).map((k, v) => MapEntry<String, int?>(k, v)))),
+        protext: List<dynamic>.from(json["protext"].map((x) => x)),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "juror": List<dynamic>.from(juror.map((x) => x)),
+        "kongoni": List<dynamic>.from(kongoni.map((x) => x)),
+        "ladronism": List<dynamic>.from(ladronism.map((x) => x)),
+        "landlubberly": List<dynamic>.from(landlubberly.map((x) => x)),
+        "listener": List<dynamic>.from(listener.map((x) => x)),
+        "lupus": List<dynamic>.from(lupus.map((x) => x)),
+        "maslin": List<dynamic>.from(maslin.map((x) => x.toJson())),
+        "monazite": List<dynamic>.from(monazite.map((x) => x)),
+        "monoliteral": List<dynamic>.from(monoliteral.map((x) => x)),
+        "monotheistically": List<dynamic>.from(monotheistically.map((x) => x)),
+        "montage": List<dynamic>.from(montage.map((x) => x)),
+        "moralness": List<dynamic>.from(moralness.map((x) => x)),
+        "mowra": List<dynamic>.from(mowra.map((x) => x?.toJson())),
+        "mulishly": List<dynamic>.from(mulishly.map((x) => x)),
+        "myoscope": List<dynamic>.from(myoscope.map((x) => x)),
+        "nach": List<dynamic>.from(nach.map((x) => x == null ? null : List<dynamic>.from(x!.map((x) => x)))),
+        "neuromastic": List<dynamic>.from(neuromastic.map((x) => x)),
+        "noncontributing": List<dynamic>.from(noncontributing.map((x) => x.toJson())),
+        "nonnervous": List<dynamic>.from(nonnervous.map((x) => x)),
+        "nonvaluation": List<dynamic>.from(nonvaluation.map((x) => x)),
+        "occupationalist": List<dynamic>.from(occupationalist.map((x) => x)),
+        "outrival": List<dynamic>.from(outrival.map((x) => x)),
+        "paleographically": List<dynamic>.from(paleographically.map((x) => x)),
+        "pamphletwise": List<dynamic>.from(pamphletwise.map((x) => x)),
+        "pediatrics": List<dynamic>.from(pediatrics.map((x) => x)),
+        "perceptive": List<dynamic>.from(perceptive.map((x) => x)),
+        "piaculum": List<dynamic>.from(piaculum.map((x) => x)),
+        "piccadilly": List<dynamic>.from(piccadilly.map((x) => x)),
+        "piffler": List<dynamic>.from(piffler.map((x) => x)),
+        "pithful": List<dynamic>.from(pithful.map((x) => x)),
+        "placuntitis": List<dynamic>.from(placuntitis.map((x) => x)),
+        "plectopterous": List<dynamic>.from(plectopterous.map((x) => x)),
+        "pneumocele": List<dynamic>.from(pneumocele.map((x) => x?.toJson())),
+        "poliorcetic": List<dynamic>.from(poliorcetic.map((x) => x)),
+        "poormaster": List<dynamic>.from(poormaster.map((x) => x)),
+        "potwhisky": List<dynamic>.from(potwhisky.map((x) => x)),
+        "practicalizer": List<dynamic>.from(practicalizer.map((x) => x)),
+        "prefreshman": List<dynamic>.from(prefreshman.map((x) => x)),
+        "prehensility": List<dynamic>.from(prehensility.map((x) => x)),
+        "prevoidance": List<dynamic>.from(prevoidance.map((x) => x)),
+        "probant": List<dynamic>.from(probant.map((x) => Map.from(x).map((k, v) => MapEntry<String, dynamic>(k, v)))),
+        "protext": List<dynamic>.from(protext.map((x) => x)),
+    };
+}
+
+class JurorClass {
+    final dynamic adipsy;
+    final dynamic auxiliator;
+    final dynamic benda;
+    final dynamic benjamin;
+    final dynamic brandling;
+    final dynamic epicurishly;
+    final dynamic eremochaetous;
+    final dynamic marten;
+    final dynamic monocline;
+    final dynamic olea;
+    final dynamic palgat;
+    final dynamic pennyworth;
+    final dynamic pioury;
+    final dynamic pragmatistic;
+    final dynamic stylelessness;
+    final dynamic systematical;
+    final dynamic thready;
+    final dynamic uncontemporary;
+    final dynamic uncouched;
+    final dynamic uninhabitedness;
+
+    JurorClass({
+        required this.adipsy,
+        required this.auxiliator,
+        required this.benda,
+        required this.benjamin,
+        required this.brandling,
+        required this.epicurishly,
+        required this.eremochaetous,
+        required this.marten,
+        required this.monocline,
+        required this.olea,
+        required this.palgat,
+        required this.pennyworth,
+        required this.pioury,
+        required this.pragmatistic,
+        required this.stylelessness,
+        required this.systematical,
+        required this.thready,
+        required this.uncontemporary,
+        required this.uncouched,
+        required this.uninhabitedness,
+    });
+
+    JurorClass copyWith({
+        dynamic adipsy,
+        dynamic auxiliator,
+        dynamic benda,
+        dynamic benjamin,
+        dynamic brandling,
+        dynamic epicurishly,
+        dynamic eremochaetous,
+        dynamic marten,
+        dynamic monocline,
+        dynamic olea,
+        dynamic palgat,
+        dynamic pennyworth,
+        dynamic pioury,
+        dynamic pragmatistic,
+        dynamic stylelessness,
+        dynamic systematical,
+        dynamic thready,
+        dynamic uncontemporary,
+        dynamic uncouched,
+        dynamic uninhabitedness,
+    }) => 
+        JurorClass(
+            adipsy: adipsy ?? this.adipsy,
+            auxiliator: auxiliator ?? this.auxiliator,
+            benda: benda ?? this.benda,
+            benjamin: benjamin ?? this.benjamin,
+            brandling: brandling ?? this.brandling,
+            epicurishly: epicurishly ?? this.epicurishly,
+            eremochaetous: eremochaetous ?? this.eremochaetous,
+            marten: marten ?? this.marten,
+            monocline: monocline ?? this.monocline,
+            olea: olea ?? this.olea,
+            palgat: palgat ?? this.palgat,
+            pennyworth: pennyworth ?? this.pennyworth,
+            pioury: pioury ?? this.pioury,
+            pragmatistic: pragmatistic ?? this.pragmatistic,
+            stylelessness: stylelessness ?? this.stylelessness,
+            systematical: systematical ?? this.systematical,
+            thready: thready ?? this.thready,
+            uncontemporary: uncontemporary ?? this.uncontemporary,
+            uncouched: uncouched ?? this.uncouched,
+            uninhabitedness: uninhabitedness ?? this.uninhabitedness,
+        );
+
+    factory JurorClass.fromJson(Map<String, dynamic> json) => JurorClass(
+        adipsy: (json.containsKey("adipsy") ? json["adipsy"] : throw FormatException('Missing required property')),
+        auxiliator: (json.containsKey("auxiliator") ? json["auxiliator"] : throw FormatException('Missing required property')),
+        benda: (json.containsKey("benda") ? json["benda"] : throw FormatException('Missing required property')),
+        benjamin: (json.containsKey("benjamin") ? json["benjamin"] : throw FormatException('Missing required property')),
+        brandling: (json.containsKey("brandling") ? json["brandling"] : throw FormatException('Missing required property')),
+        epicurishly: (json.containsKey("epicurishly") ? json["epicurishly"] : throw FormatException('Missing required property')),
+        eremochaetous: (json.containsKey("eremochaetous") ? json["eremochaetous"] : throw FormatException('Missing required property')),
+        marten: (json.containsKey("marten") ? json["marten"] : throw FormatException('Missing required property')),
+        monocline: (json.containsKey("monocline") ? json["monocline"] : throw FormatException('Missing required property')),
+        olea: (json.containsKey("Olea") ? json["Olea"] : throw FormatException('Missing required property')),
+        palgat: (json.containsKey("palgat") ? json["palgat"] : throw FormatException('Missing required property')),
+        pennyworth: (json.containsKey("pennyworth") ? json["pennyworth"] : throw FormatException('Missing required property')),
+        pioury: (json.containsKey("pioury") ? json["pioury"] : throw FormatException('Missing required property')),
+        pragmatistic: (json.containsKey("pragmatistic") ? json["pragmatistic"] : throw FormatException('Missing required property')),
+        stylelessness: (json.containsKey("stylelessness") ? json["stylelessness"] : throw FormatException('Missing required property')),
+        systematical: (json.containsKey("systematical") ? json["systematical"] : throw FormatException('Missing required property')),
+        thready: (json.containsKey("thready") ? json["thready"] : throw FormatException('Missing required property')),
+        uncontemporary: (json.containsKey("uncontemporary") ? json["uncontemporary"] : throw FormatException('Missing required property')),
+        uncouched: (json.containsKey("uncouched") ? json["uncouched"] : throw FormatException('Missing required property')),
+        uninhabitedness: (json.containsKey("uninhabitedness") ? json["uninhabitedness"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "adipsy": adipsy,
+        "auxiliator": auxiliator,
+        "benda": benda,
+        "benjamin": benjamin,
+        "brandling": brandling,
+        "epicurishly": epicurishly,
+        "eremochaetous": eremochaetous,
+        "marten": marten,
+        "monocline": monocline,
+        "Olea": olea,
+        "palgat": palgat,
+        "pennyworth": pennyworth,
+        "pioury": pioury,
+        "pragmatistic": pragmatistic,
+        "stylelessness": stylelessness,
+        "systematical": systematical,
+        "thready": thready,
+        "uncontemporary": uncontemporary,
+        "uncouched": uncouched,
+        "uninhabitedness": uninhabitedness,
+    };
+}
+
+class LadronismClass {
+    final dynamic acclaimer;
+    final dynamic achree;
+    final dynamic base;
+    final dynamic conundrumize;
+    final dynamic degerminator;
+    final dynamic describable;
+    final dynamic exasperatedly;
+    final dynamic heroine;
+    final dynamic indazin;
+    final dynamic luteous;
+    final dynamic papular;
+    final dynamic pritch;
+    final dynamic prodenia;
+    final dynamic seege;
+    final dynamic shopgirl;
+    final dynamic tragedietta;
+    final dynamic unsparse;
+    final dynamic uplook;
+    final dynamic vermiformis;
+    final dynamic whafabout;
+
+    LadronismClass({
+        required this.acclaimer,
+        required this.achree,
+        required this.base,
+        required this.conundrumize,
+        required this.degerminator,
+        required this.describable,
+        required this.exasperatedly,
+        required this.heroine,
+        required this.indazin,
+        required this.luteous,
+        required this.papular,
+        required this.pritch,
+        required this.prodenia,
+        required this.seege,
+        required this.shopgirl,
+        required this.tragedietta,
+        required this.unsparse,
+        required this.uplook,
+        required this.vermiformis,
+        required this.whafabout,
+    });
+
+    LadronismClass copyWith({
+        dynamic acclaimer,
+        dynamic achree,
+        dynamic base,
+        dynamic conundrumize,
+        dynamic degerminator,
+        dynamic describable,
+        dynamic exasperatedly,
+        dynamic heroine,
+        dynamic indazin,
+        dynamic luteous,
+        dynamic papular,
+        dynamic pritch,
+        dynamic prodenia,
+        dynamic seege,
+        dynamic shopgirl,
+        dynamic tragedietta,
+        dynamic unsparse,
+        dynamic uplook,
+        dynamic vermiformis,
+        dynamic whafabout,
+    }) => 
+        LadronismClass(
+            acclaimer: acclaimer ?? this.acclaimer,
+            achree: achree ?? this.achree,
+            base: base ?? this.base,
+            conundrumize: conundrumize ?? this.conundrumize,
+            degerminator: degerminator ?? this.degerminator,
+            describable: describable ?? this.describable,
+            exasperatedly: exasperatedly ?? this.exasperatedly,
+            heroine: heroine ?? this.heroine,
+            indazin: indazin ?? this.indazin,
+            luteous: luteous ?? this.luteous,
+            papular: papular ?? this.papular,
+            pritch: pritch ?? this.pritch,
+            prodenia: prodenia ?? this.prodenia,
+            seege: seege ?? this.seege,
+            shopgirl: shopgirl ?? this.shopgirl,
+            tragedietta: tragedietta ?? this.tragedietta,
+            unsparse: unsparse ?? this.unsparse,
+            uplook: uplook ?? this.uplook,
+            vermiformis: vermiformis ?? this.vermiformis,
+            whafabout: whafabout ?? this.whafabout,
+        );
+
+    factory LadronismClass.fromJson(Map<String, dynamic> json) => LadronismClass(
+        acclaimer: (json.containsKey("acclaimer") ? json["acclaimer"] : throw FormatException('Missing required property')),
+        achree: (json.containsKey("achree") ? json["achree"] : throw FormatException('Missing required property')),
+        base: (json.containsKey("base") ? json["base"] : throw FormatException('Missing required property')),
+        conundrumize: (json.containsKey("conundrumize") ? json["conundrumize"] : throw FormatException('Missing required property')),
+        degerminator: (json.containsKey("degerminator") ? json["degerminator"] : throw FormatException('Missing required property')),
+        describable: (json.containsKey("describable") ? json["describable"] : throw FormatException('Missing required property')),
+        exasperatedly: (json.containsKey("exasperatedly") ? json["exasperatedly"] : throw FormatException('Missing required property')),
+        heroine: (json.containsKey("heroine") ? json["heroine"] : throw FormatException('Missing required property')),
+        indazin: (json.containsKey("indazin") ? json["indazin"] : throw FormatException('Missing required property')),
+        luteous: (json.containsKey("luteous") ? json["luteous"] : throw FormatException('Missing required property')),
+        papular: (json.containsKey("papular") ? json["papular"] : throw FormatException('Missing required property')),
+        pritch: (json.containsKey("pritch") ? json["pritch"] : throw FormatException('Missing required property')),
+        prodenia: (json.containsKey("Prodenia") ? json["Prodenia"] : throw FormatException('Missing required property')),
+        seege: (json.containsKey("seege") ? json["seege"] : throw FormatException('Missing required property')),
+        shopgirl: (json.containsKey("shopgirl") ? json["shopgirl"] : throw FormatException('Missing required property')),
+        tragedietta: (json.containsKey("tragedietta") ? json["tragedietta"] : throw FormatException('Missing required property')),
+        unsparse: (json.containsKey("unsparse") ? json["unsparse"] : throw FormatException('Missing required property')),
+        uplook: (json.containsKey("uplook") ? json["uplook"] : throw FormatException('Missing required property')),
+        vermiformis: (json.containsKey("vermiformis") ? json["vermiformis"] : throw FormatException('Missing required property')),
+        whafabout: (json.containsKey("whafabout") ? json["whafabout"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "acclaimer": acclaimer,
+        "achree": achree,
+        "base": base,
+        "conundrumize": conundrumize,
+        "degerminator": degerminator,
+        "describable": describable,
+        "exasperatedly": exasperatedly,
+        "heroine": heroine,
+        "indazin": indazin,
+        "luteous": luteous,
+        "papular": papular,
+        "pritch": pritch,
+        "Prodenia": prodenia,
+        "seege": seege,
+        "shopgirl": shopgirl,
+        "tragedietta": tragedietta,
+        "unsparse": unsparse,
+        "uplook": uplook,
+        "vermiformis": vermiformis,
+        "whafabout": whafabout,
+    };
+}
+
+class LandlubberlyClass {
+    final dynamic acropoleis;
+    final dynamic aminate;
+    final dynamic amyraldism;
+    final dynamic bipenniform;
+    final dynamic bugre;
+    final dynamic calycule;
+    final dynamic caoutchouc;
+    final dynamic disprover;
+    final dynamic fitroot;
+    final dynamic fulgently;
+    final dynamic kickup;
+    final dynamic laevoversion;
+    final dynamic moter;
+    final dynamic objectivity;
+    final dynamic posterity;
+    final dynamic postnuptial;
+    final dynamic precedentary;
+    final dynamic saddling;
+    final dynamic subcurrent;
+    final dynamic unrecriminative;
+
+    LandlubberlyClass({
+        required this.acropoleis,
+        required this.aminate,
+        required this.amyraldism,
+        required this.bipenniform,
+        required this.bugre,
+        required this.calycule,
+        required this.caoutchouc,
+        required this.disprover,
+        required this.fitroot,
+        required this.fulgently,
+        required this.kickup,
+        required this.laevoversion,
+        required this.moter,
+        required this.objectivity,
+        required this.posterity,
+        required this.postnuptial,
+        required this.precedentary,
+        required this.saddling,
+        required this.subcurrent,
+        required this.unrecriminative,
+    });
+
+    LandlubberlyClass copyWith({
+        dynamic acropoleis,
+        dynamic aminate,
+        dynamic amyraldism,
+        dynamic bipenniform,
+        dynamic bugre,
+        dynamic calycule,
+        dynamic caoutchouc,
+        dynamic disprover,
+        dynamic fitroot,
+        dynamic fulgently,
+        dynamic kickup,
+        dynamic laevoversion,
+        dynamic moter,
+        dynamic objectivity,
+        dynamic posterity,
+        dynamic postnuptial,
+        dynamic precedentary,
+        dynamic saddling,
+        dynamic subcurrent,
+        dynamic unrecriminative,
+    }) => 
+        LandlubberlyClass(
+            acropoleis: acropoleis ?? this.acropoleis,
+            aminate: aminate ?? this.aminate,
+            amyraldism: amyraldism ?? this.amyraldism,
+            bipenniform: bipenniform ?? this.bipenniform,
+            bugre: bugre ?? this.bugre,
+            calycule: calycule ?? this.calycule,
+            caoutchouc: caoutchouc ?? this.caoutchouc,
+            disprover: disprover ?? this.disprover,
+            fitroot: fitroot ?? this.fitroot,
+            fulgently: fulgently ?? this.fulgently,
+            kickup: kickup ?? this.kickup,
+            laevoversion: laevoversion ?? this.laevoversion,
+            moter: moter ?? this.moter,
+            objectivity: objectivity ?? this.objectivity,
+            posterity: posterity ?? this.posterity,
+            postnuptial: postnuptial ?? this.postnuptial,
+            precedentary: precedentary ?? this.precedentary,
+            saddling: saddling ?? this.saddling,
+            subcurrent: subcurrent ?? this.subcurrent,
+            unrecriminative: unrecriminative ?? this.unrecriminative,
+        );
+
+    factory LandlubberlyClass.fromJson(Map<String, dynamic> json) => LandlubberlyClass(
+        acropoleis: (json.containsKey("acropoleis") ? json["acropoleis"] : throw FormatException('Missing required property')),
+        aminate: (json.containsKey("aminate") ? json["aminate"] : throw FormatException('Missing required property')),
+        amyraldism: (json.containsKey("Amyraldism") ? json["Amyraldism"] : throw FormatException('Missing required property')),
+        bipenniform: (json.containsKey("bipenniform") ? json["bipenniform"] : throw FormatException('Missing required property')),
+        bugre: (json.containsKey("bugre") ? json["bugre"] : throw FormatException('Missing required property')),
+        calycule: (json.containsKey("calycule") ? json["calycule"] : throw FormatException('Missing required property')),
+        caoutchouc: (json.containsKey("caoutchouc") ? json["caoutchouc"] : throw FormatException('Missing required property')),
+        disprover: (json.containsKey("disprover") ? json["disprover"] : throw FormatException('Missing required property')),
+        fitroot: (json.containsKey("fitroot") ? json["fitroot"] : throw FormatException('Missing required property')),
+        fulgently: (json.containsKey("fulgently") ? json["fulgently"] : throw FormatException('Missing required property')),
+        kickup: (json.containsKey("kickup") ? json["kickup"] : throw FormatException('Missing required property')),
+        laevoversion: (json.containsKey("laevoversion") ? json["laevoversion"] : throw FormatException('Missing required property')),
+        moter: (json.containsKey("moter") ? json["moter"] : throw FormatException('Missing required property')),
+        objectivity: (json.containsKey("objectivity") ? json["objectivity"] : throw FormatException('Missing required property')),
+        posterity: (json.containsKey("posterity") ? json["posterity"] : throw FormatException('Missing required property')),
+        postnuptial: (json.containsKey("postnuptial") ? json["postnuptial"] : throw FormatException('Missing required property')),
+        precedentary: (json.containsKey("precedentary") ? json["precedentary"] : throw FormatException('Missing required property')),
+        saddling: (json.containsKey("saddling") ? json["saddling"] : throw FormatException('Missing required property')),
+        subcurrent: (json.containsKey("subcurrent") ? json["subcurrent"] : throw FormatException('Missing required property')),
+        unrecriminative: (json.containsKey("unrecriminative") ? json["unrecriminative"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "acropoleis": acropoleis,
+        "aminate": aminate,
+        "Amyraldism": amyraldism,
+        "bipenniform": bipenniform,
+        "bugre": bugre,
+        "calycule": calycule,
+        "caoutchouc": caoutchouc,
+        "disprover": disprover,
+        "fitroot": fitroot,
+        "fulgently": fulgently,
+        "kickup": kickup,
+        "laevoversion": laevoversion,
+        "moter": moter,
+        "objectivity": objectivity,
+        "posterity": posterity,
+        "postnuptial": postnuptial,
+        "precedentary": precedentary,
+        "saddling": saddling,
+        "subcurrent": subcurrent,
+        "unrecriminative": unrecriminative,
+    };
+}
+
+class LupusClass {
+    final double? catharticalness;
+    final int? chirotherium;
+    final int? chlorioninae;
+    final int? corvinae;
+    final int? crassina;
+    final String? disdiapason;
+    final int? exiguity;
+    final int? farcist;
+    final int? holographical;
+    final bool? homocerc;
+    final int? ichthyophagan;
+    final int? implacable;
+    final dynamic nonbookish;
+    final int? outshiner;
+    final int? overweather;
+    final int? protonegroid;
+    final int? shallowish;
+    final int? snoke;
+    final int? snout;
+    final int? surveillance;
+    final int? threshingtime;
+    final int? thysanocarpus;
+    final int? unsignificantly;
+    final int? unsnap;
+    final int? vendible;
+
+    LupusClass({
+        this.catharticalness,
+        this.chirotherium,
+        this.chlorioninae,
+        this.corvinae,
+        this.crassina,
+        this.disdiapason,
+        this.exiguity,
+        this.farcist,
+        this.holographical,
+        this.homocerc,
+        this.ichthyophagan,
+        this.implacable,
+        this.nonbookish,
+        this.outshiner,
+        this.overweather,
+        this.protonegroid,
+        this.shallowish,
+        this.snoke,
+        this.snout,
+        this.surveillance,
+        this.threshingtime,
+        this.thysanocarpus,
+        this.unsignificantly,
+        this.unsnap,
+        this.vendible,
+    });
+
+    LupusClass copyWith({
+        double? catharticalness,
+        int? chirotherium,
+        int? chlorioninae,
+        int? corvinae,
+        int? crassina,
+        String? disdiapason,
+        int? exiguity,
+        int? farcist,
+        int? holographical,
+        bool? homocerc,
+        int? ichthyophagan,
+        int? implacable,
+        dynamic nonbookish,
+        int? outshiner,
+        int? overweather,
+        int? protonegroid,
+        int? shallowish,
+        int? snoke,
+        int? snout,
+        int? surveillance,
+        int? threshingtime,
+        int? thysanocarpus,
+        int? unsignificantly,
+        int? unsnap,
+        int? vendible,
+    }) => 
+        LupusClass(
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            chlorioninae: chlorioninae ?? this.chlorioninae,
+            corvinae: corvinae ?? this.corvinae,
+            crassina: crassina ?? this.crassina,
+            disdiapason: disdiapason ?? this.disdiapason,
+            exiguity: exiguity ?? this.exiguity,
+            farcist: farcist ?? this.farcist,
+            holographical: holographical ?? this.holographical,
+            homocerc: homocerc ?? this.homocerc,
+            ichthyophagan: ichthyophagan ?? this.ichthyophagan,
+            implacable: implacable ?? this.implacable,
+            nonbookish: nonbookish ?? this.nonbookish,
+            outshiner: outshiner ?? this.outshiner,
+            overweather: overweather ?? this.overweather,
+            protonegroid: protonegroid ?? this.protonegroid,
+            shallowish: shallowish ?? this.shallowish,
+            snoke: snoke ?? this.snoke,
+            snout: snout ?? this.snout,
+            surveillance: surveillance ?? this.surveillance,
+            threshingtime: threshingtime ?? this.threshingtime,
+            thysanocarpus: thysanocarpus ?? this.thysanocarpus,
+            unsignificantly: unsignificantly ?? this.unsignificantly,
+            unsnap: unsnap ?? this.unsnap,
+            vendible: vendible ?? this.vendible,
+        );
+
+    factory LupusClass.fromJson(Map<String, dynamic> json) => LupusClass(
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        chlorioninae: json["Chlorioninae"],
+        corvinae: json["Corvinae"],
+        crassina: json["Crassina"],
+        disdiapason: json["disdiapason"],
+        exiguity: json["exiguity"],
+        farcist: json["farcist"],
+        holographical: json["holographical"],
+        homocerc: json["homocerc"],
+        ichthyophagan: json["ichthyophagan"],
+        implacable: json["implacable"],
+        nonbookish: json["nonbookish"],
+        outshiner: json["outshiner"],
+        overweather: json["overweather"],
+        protonegroid: json["protonegroid"],
+        shallowish: json["shallowish"],
+        snoke: json["snoke"],
+        snout: json["snout"],
+        surveillance: json["surveillance"],
+        threshingtime: json["threshingtime"],
+        thysanocarpus: json["Thysanocarpus"],
+        unsignificantly: json["unsignificantly"],
+        unsnap: json["unsnap"],
+        vendible: json["vendible"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "Chlorioninae": chlorioninae,
+        "Corvinae": corvinae,
+        "Crassina": crassina,
+        "disdiapason": disdiapason,
+        "exiguity": exiguity,
+        "farcist": farcist,
+        "holographical": holographical,
+        "homocerc": homocerc,
+        "ichthyophagan": ichthyophagan,
+        "implacable": implacable,
+        "nonbookish": nonbookish,
+        "outshiner": outshiner,
+        "overweather": overweather,
+        "protonegroid": protonegroid,
+        "shallowish": shallowish,
+        "snoke": snoke,
+        "snout": snout,
+        "surveillance": surveillance,
+        "threshingtime": threshingtime,
+        "Thysanocarpus": thysanocarpus,
+        "unsignificantly": unsignificantly,
+        "unsnap": unsnap,
+        "vendible": vendible,
+    };
+}
+
+class Maslin {
+    final int? alicant;
+    final dynamic antiatonement;
+    final int? anticorrosive;
+    final dynamic aphidozer;
+    final dynamic bakuninist;
+    final int? be;
+    final double? catharticalness;
+    final int? chirotherium;
+    final int? chub;
+    final int? cuprosilicon;
+    final int? curtailedly;
+    final int? dellenite;
+    final int? dimitry;
+    final String? disdiapason;
+    final dynamic edifying;
+    final int? ethmoiditis;
+    final dynamic gastralgy;
+    final int? goatherd;
+    final int? hammerdress;
+    final dynamic hangfire;
+    final bool? homocerc;
+    final int? lacunosity;
+    final dynamic longiloquence;
+    final int? mameliere;
+    final dynamic motherless;
+    final dynamic nonbookish;
+    final dynamic noncorrodible;
+    final dynamic nonsensicality;
+    final int? oafishly;
+    final dynamic pfund;
+    final dynamic preadvisory;
+    final dynamic retroflexed;
+    final int? saccharulmic;
+    final int? scowlful;
+    final dynamic secluded;
+    final dynamic slackage;
+    final int? sphaeridial;
+    final dynamic spondulics;
+    final int? subsecive;
+    final dynamic swellmobsman;
+    final int? trachyglossate;
+    final dynamic trialogue;
+    final int? unassuaged;
+    final dynamic ungross;
+    final dynamic unjudiciously;
+
+    Maslin({
+        this.alicant,
+        this.antiatonement,
+        this.anticorrosive,
+        this.aphidozer,
+        this.bakuninist,
+        this.be,
+        this.catharticalness,
+        this.chirotherium,
+        this.chub,
+        this.cuprosilicon,
+        this.curtailedly,
+        this.dellenite,
+        this.dimitry,
+        this.disdiapason,
+        this.edifying,
+        this.ethmoiditis,
+        this.gastralgy,
+        this.goatherd,
+        this.hammerdress,
+        this.hangfire,
+        this.homocerc,
+        this.lacunosity,
+        this.longiloquence,
+        this.mameliere,
+        this.motherless,
+        this.nonbookish,
+        this.noncorrodible,
+        this.nonsensicality,
+        this.oafishly,
+        this.pfund,
+        this.preadvisory,
+        this.retroflexed,
+        this.saccharulmic,
+        this.scowlful,
+        this.secluded,
+        this.slackage,
+        this.sphaeridial,
+        this.spondulics,
+        this.subsecive,
+        this.swellmobsman,
+        this.trachyglossate,
+        this.trialogue,
+        this.unassuaged,
+        this.ungross,
+        this.unjudiciously,
+    });
+
+    Maslin copyWith({
+        int? alicant,
+        dynamic antiatonement,
+        int? anticorrosive,
+        dynamic aphidozer,
+        dynamic bakuninist,
+        int? be,
+        double? catharticalness,
+        int? chirotherium,
+        int? chub,
+        int? cuprosilicon,
+        int? curtailedly,
+        int? dellenite,
+        int? dimitry,
+        String? disdiapason,
+        dynamic edifying,
+        int? ethmoiditis,
+        dynamic gastralgy,
+        int? goatherd,
+        int? hammerdress,
+        dynamic hangfire,
+        bool? homocerc,
+        int? lacunosity,
+        dynamic longiloquence,
+        int? mameliere,
+        dynamic motherless,
+        dynamic nonbookish,
+        dynamic noncorrodible,
+        dynamic nonsensicality,
+        int? oafishly,
+        dynamic pfund,
+        dynamic preadvisory,
+        dynamic retroflexed,
+        int? saccharulmic,
+        int? scowlful,
+        dynamic secluded,
+        dynamic slackage,
+        int? sphaeridial,
+        dynamic spondulics,
+        int? subsecive,
+        dynamic swellmobsman,
+        int? trachyglossate,
+        dynamic trialogue,
+        int? unassuaged,
+        dynamic ungross,
+        dynamic unjudiciously,
+    }) => 
+        Maslin(
+            alicant: alicant ?? this.alicant,
+            antiatonement: antiatonement ?? this.antiatonement,
+            anticorrosive: anticorrosive ?? this.anticorrosive,
+            aphidozer: aphidozer ?? this.aphidozer,
+            bakuninist: bakuninist ?? this.bakuninist,
+            be: be ?? this.be,
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            chub: chub ?? this.chub,
+            cuprosilicon: cuprosilicon ?? this.cuprosilicon,
+            curtailedly: curtailedly ?? this.curtailedly,
+            dellenite: dellenite ?? this.dellenite,
+            dimitry: dimitry ?? this.dimitry,
+            disdiapason: disdiapason ?? this.disdiapason,
+            edifying: edifying ?? this.edifying,
+            ethmoiditis: ethmoiditis ?? this.ethmoiditis,
+            gastralgy: gastralgy ?? this.gastralgy,
+            goatherd: goatherd ?? this.goatherd,
+            hammerdress: hammerdress ?? this.hammerdress,
+            hangfire: hangfire ?? this.hangfire,
+            homocerc: homocerc ?? this.homocerc,
+            lacunosity: lacunosity ?? this.lacunosity,
+            longiloquence: longiloquence ?? this.longiloquence,
+            mameliere: mameliere ?? this.mameliere,
+            motherless: motherless ?? this.motherless,
+            nonbookish: nonbookish ?? this.nonbookish,
+            noncorrodible: noncorrodible ?? this.noncorrodible,
+            nonsensicality: nonsensicality ?? this.nonsensicality,
+            oafishly: oafishly ?? this.oafishly,
+            pfund: pfund ?? this.pfund,
+            preadvisory: preadvisory ?? this.preadvisory,
+            retroflexed: retroflexed ?? this.retroflexed,
+            saccharulmic: saccharulmic ?? this.saccharulmic,
+            scowlful: scowlful ?? this.scowlful,
+            secluded: secluded ?? this.secluded,
+            slackage: slackage ?? this.slackage,
+            sphaeridial: sphaeridial ?? this.sphaeridial,
+            spondulics: spondulics ?? this.spondulics,
+            subsecive: subsecive ?? this.subsecive,
+            swellmobsman: swellmobsman ?? this.swellmobsman,
+            trachyglossate: trachyglossate ?? this.trachyglossate,
+            trialogue: trialogue ?? this.trialogue,
+            unassuaged: unassuaged ?? this.unassuaged,
+            ungross: ungross ?? this.ungross,
+            unjudiciously: unjudiciously ?? this.unjudiciously,
+        );
+
+    factory Maslin.fromJson(Map<String, dynamic> json) => Maslin(
+        alicant: json["Alicant"],
+        antiatonement: json["antiatonement"],
+        anticorrosive: json["anticorrosive"],
+        aphidozer: json["aphidozer"],
+        bakuninist: json["Bakuninist"],
+        be: json["be"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        chub: json["chub"],
+        cuprosilicon: json["cuprosilicon"],
+        curtailedly: json["curtailedly"],
+        dellenite: json["dellenite"],
+        dimitry: json["Dimitry"],
+        disdiapason: json["disdiapason"],
+        edifying: json["edifying"],
+        ethmoiditis: json["ethmoiditis"],
+        gastralgy: json["gastralgy"],
+        goatherd: json["goatherd"],
+        hammerdress: json["hammerdress"],
+        hangfire: json["hangfire"],
+        homocerc: json["homocerc"],
+        lacunosity: json["lacunosity"],
+        longiloquence: json["longiloquence"],
+        mameliere: json["mameliere"],
+        motherless: json["motherless"],
+        nonbookish: json["nonbookish"],
+        noncorrodible: json["noncorrodible"],
+        nonsensicality: json["nonsensicality"],
+        oafishly: json["oafishly"],
+        pfund: json["pfund"],
+        preadvisory: json["preadvisory"],
+        retroflexed: json["retroflexed"],
+        saccharulmic: json["saccharulmic"],
+        scowlful: json["scowlful"],
+        secluded: json["secluded"],
+        slackage: json["slackage"],
+        sphaeridial: json["sphaeridial"],
+        spondulics: json["spondulics"],
+        subsecive: json["subsecive"],
+        swellmobsman: json["swellmobsman"],
+        trachyglossate: json["trachyglossate"],
+        trialogue: json["trialogue"],
+        unassuaged: json["unassuaged"],
+        ungross: json["ungross"],
+        unjudiciously: json["unjudiciously"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "Alicant": alicant,
+        "antiatonement": antiatonement,
+        "anticorrosive": anticorrosive,
+        "aphidozer": aphidozer,
+        "Bakuninist": bakuninist,
+        "be": be,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "chub": chub,
+        "cuprosilicon": cuprosilicon,
+        "curtailedly": curtailedly,
+        "dellenite": dellenite,
+        "Dimitry": dimitry,
+        "disdiapason": disdiapason,
+        "edifying": edifying,
+        "ethmoiditis": ethmoiditis,
+        "gastralgy": gastralgy,
+        "goatherd": goatherd,
+        "hammerdress": hammerdress,
+        "hangfire": hangfire,
+        "homocerc": homocerc,
+        "lacunosity": lacunosity,
+        "longiloquence": longiloquence,
+        "mameliere": mameliere,
+        "motherless": motherless,
+        "nonbookish": nonbookish,
+        "noncorrodible": noncorrodible,
+        "nonsensicality": nonsensicality,
+        "oafishly": oafishly,
+        "pfund": pfund,
+        "preadvisory": preadvisory,
+        "retroflexed": retroflexed,
+        "saccharulmic": saccharulmic,
+        "scowlful": scowlful,
+        "secluded": secluded,
+        "slackage": slackage,
+        "sphaeridial": sphaeridial,
+        "spondulics": spondulics,
+        "subsecive": subsecive,
+        "swellmobsman": swellmobsman,
+        "trachyglossate": trachyglossate,
+        "trialogue": trialogue,
+        "unassuaged": unassuaged,
+        "ungross": ungross,
+        "unjudiciously": unjudiciously,
+    };
+}
+
+class MonaziteClass {
+    final double catharticalness;
+    final int chirotherium;
+    final String disdiapason;
+    final bool homocerc;
+    final dynamic nonbookish;
+
+    MonaziteClass({
+        required this.catharticalness,
+        required this.chirotherium,
+        required this.disdiapason,
+        required this.homocerc,
+        required this.nonbookish,
+    });
+
+    MonaziteClass copyWith({
+        double? catharticalness,
+        int? chirotherium,
+        String? disdiapason,
+        bool? homocerc,
+        dynamic nonbookish,
+    }) => 
+        MonaziteClass(
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            disdiapason: disdiapason ?? this.disdiapason,
+            homocerc: homocerc ?? this.homocerc,
+            nonbookish: nonbookish ?? this.nonbookish,
+        );
+
+    factory MonaziteClass.fromJson(Map<String, dynamic> json) => MonaziteClass(
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        homocerc: json["homocerc"],
+        nonbookish: (json.containsKey("nonbookish") ? json["nonbookish"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "homocerc": homocerc,
+        "nonbookish": nonbookish,
+    };
+}
+
+class MonotheisticallyClass {
+    final dynamic blaspheme;
+    final double? catharticalness;
+    final dynamic celiosalpingectomy;
+    final int? chirotherium;
+    final dynamic consummativeness;
+    final String? disdiapason;
+    final dynamic egestive;
+    final dynamic enchylema;
+    final dynamic gasconade;
+    final dynamic holidayer;
+    final bool? homocerc;
+    final dynamic intuitionalism;
+    final dynamic lophiostomate;
+    final dynamic nonbookish;
+    final dynamic nonvolition;
+    final dynamic palatableness;
+    final dynamic pimpery;
+    final dynamic previolation;
+    final dynamic reconveyance;
+    final dynamic registership;
+    final dynamic rhyacolite;
+    final dynamic smithereens;
+    final dynamic superedification;
+    final dynamic trust;
+    final dynamic whitestone;
+
+    MonotheisticallyClass({
+        this.blaspheme,
+        this.catharticalness,
+        this.celiosalpingectomy,
+        this.chirotherium,
+        this.consummativeness,
+        this.disdiapason,
+        this.egestive,
+        this.enchylema,
+        this.gasconade,
+        this.holidayer,
+        this.homocerc,
+        this.intuitionalism,
+        this.lophiostomate,
+        this.nonbookish,
+        this.nonvolition,
+        this.palatableness,
+        this.pimpery,
+        this.previolation,
+        this.reconveyance,
+        this.registership,
+        this.rhyacolite,
+        this.smithereens,
+        this.superedification,
+        this.trust,
+        this.whitestone,
+    });
+
+    MonotheisticallyClass copyWith({
+        dynamic blaspheme,
+        double? catharticalness,
+        dynamic celiosalpingectomy,
+        int? chirotherium,
+        dynamic consummativeness,
+        String? disdiapason,
+        dynamic egestive,
+        dynamic enchylema,
+        dynamic gasconade,
+        dynamic holidayer,
+        bool? homocerc,
+        dynamic intuitionalism,
+        dynamic lophiostomate,
+        dynamic nonbookish,
+        dynamic nonvolition,
+        dynamic palatableness,
+        dynamic pimpery,
+        dynamic previolation,
+        dynamic reconveyance,
+        dynamic registership,
+        dynamic rhyacolite,
+        dynamic smithereens,
+        dynamic superedification,
+        dynamic trust,
+        dynamic whitestone,
+    }) => 
+        MonotheisticallyClass(
+            blaspheme: blaspheme ?? this.blaspheme,
+            catharticalness: catharticalness ?? this.catharticalness,
+            celiosalpingectomy: celiosalpingectomy ?? this.celiosalpingectomy,
+            chirotherium: chirotherium ?? this.chirotherium,
+            consummativeness: consummativeness ?? this.consummativeness,
+            disdiapason: disdiapason ?? this.disdiapason,
+            egestive: egestive ?? this.egestive,
+            enchylema: enchylema ?? this.enchylema,
+            gasconade: gasconade ?? this.gasconade,
+            holidayer: holidayer ?? this.holidayer,
+            homocerc: homocerc ?? this.homocerc,
+            intuitionalism: intuitionalism ?? this.intuitionalism,
+            lophiostomate: lophiostomate ?? this.lophiostomate,
+            nonbookish: nonbookish ?? this.nonbookish,
+            nonvolition: nonvolition ?? this.nonvolition,
+            palatableness: palatableness ?? this.palatableness,
+            pimpery: pimpery ?? this.pimpery,
+            previolation: previolation ?? this.previolation,
+            reconveyance: reconveyance ?? this.reconveyance,
+            registership: registership ?? this.registership,
+            rhyacolite: rhyacolite ?? this.rhyacolite,
+            smithereens: smithereens ?? this.smithereens,
+            superedification: superedification ?? this.superedification,
+            trust: trust ?? this.trust,
+            whitestone: whitestone ?? this.whitestone,
+        );
+
+    factory MonotheisticallyClass.fromJson(Map<String, dynamic> json) => MonotheisticallyClass(
+        blaspheme: json["blaspheme"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        celiosalpingectomy: json["celiosalpingectomy"],
+        chirotherium: json["Chirotherium"],
+        consummativeness: json["consummativeness"],
+        disdiapason: json["disdiapason"],
+        egestive: json["egestive"],
+        enchylema: json["enchylema"],
+        gasconade: json["gasconade"],
+        holidayer: json["holidayer"],
+        homocerc: json["homocerc"],
+        intuitionalism: json["intuitionalism"],
+        lophiostomate: json["lophiostomate"],
+        nonbookish: json["nonbookish"],
+        nonvolition: json["nonvolition"],
+        palatableness: json["palatableness"],
+        pimpery: json["pimpery"],
+        previolation: json["previolation"],
+        reconveyance: json["reconveyance"],
+        registership: json["registership"],
+        rhyacolite: json["rhyacolite"],
+        smithereens: json["smithereens"],
+        superedification: json["superedification"],
+        trust: json["trust"],
+        whitestone: json["whitestone"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "blaspheme": blaspheme,
+        "catharticalness": catharticalness,
+        "celiosalpingectomy": celiosalpingectomy,
+        "Chirotherium": chirotherium,
+        "consummativeness": consummativeness,
+        "disdiapason": disdiapason,
+        "egestive": egestive,
+        "enchylema": enchylema,
+        "gasconade": gasconade,
+        "holidayer": holidayer,
+        "homocerc": homocerc,
+        "intuitionalism": intuitionalism,
+        "lophiostomate": lophiostomate,
+        "nonbookish": nonbookish,
+        "nonvolition": nonvolition,
+        "palatableness": palatableness,
+        "pimpery": pimpery,
+        "previolation": previolation,
+        "reconveyance": reconveyance,
+        "registership": registership,
+        "rhyacolite": rhyacolite,
+        "smithereens": smithereens,
+        "superedification": superedification,
+        "trust": trust,
+        "whitestone": whitestone,
+    };
+}
+
+class Noncontributing {
+    final String estevin;
+    final double jolterhead;
+    final int sauternes;
+    final bool sparsely;
+    final dynamic unrequested;
+
+    Noncontributing({
+        required this.estevin,
+        required this.jolterhead,
+        required this.sauternes,
+        required this.sparsely,
+        required this.unrequested,
+    });
+
+    Noncontributing copyWith({
+        String? estevin,
+        double? jolterhead,
+        int? sauternes,
+        bool? sparsely,
+        dynamic unrequested,
+    }) => 
+        Noncontributing(
+            estevin: estevin ?? this.estevin,
+            jolterhead: jolterhead ?? this.jolterhead,
+            sauternes: sauternes ?? this.sauternes,
+            sparsely: sparsely ?? this.sparsely,
+            unrequested: unrequested ?? this.unrequested,
+        );
+
+    factory Noncontributing.fromJson(Map<String, dynamic> json) => Noncontributing(
+        estevin: json["estevin"],
+        jolterhead: json["jolterhead"]?.toDouble(),
+        sauternes: json["sauternes"],
+        sparsely: json["sparsely"],
+        unrequested: (json.containsKey("unrequested") ? json["unrequested"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "estevin": estevin,
+        "jolterhead": jolterhead,
+        "sauternes": sauternes,
+        "sparsely": sparsely,
+        "unrequested": unrequested,
+    };
+}
+
+class OccupationalistClass {
+    final dynamic beholdable;
+    final dynamic brotuliform;
+    final dynamic chimakum;
+    final dynamic doodler;
+    final dynamic emulsin;
+    final dynamic fin;
+    final dynamic flourishing;
+    final dynamic flueless;
+    final dynamic furtively;
+    final dynamic gritter;
+    final dynamic interwish;
+    final dynamic monoxylic;
+    final dynamic myristic;
+    final dynamic nightwear;
+    final dynamic peruser;
+    final dynamic theoastrological;
+    final dynamic thumby;
+    final dynamic tingitid;
+    final dynamic trailless;
+    final dynamic unpocketed;
+
+    OccupationalistClass({
+        required this.beholdable,
+        required this.brotuliform,
+        required this.chimakum,
+        required this.doodler,
+        required this.emulsin,
+        required this.fin,
+        required this.flourishing,
+        required this.flueless,
+        required this.furtively,
+        required this.gritter,
+        required this.interwish,
+        required this.monoxylic,
+        required this.myristic,
+        required this.nightwear,
+        required this.peruser,
+        required this.theoastrological,
+        required this.thumby,
+        required this.tingitid,
+        required this.trailless,
+        required this.unpocketed,
+    });
+
+    OccupationalistClass copyWith({
+        dynamic beholdable,
+        dynamic brotuliform,
+        dynamic chimakum,
+        dynamic doodler,
+        dynamic emulsin,
+        dynamic fin,
+        dynamic flourishing,
+        dynamic flueless,
+        dynamic furtively,
+        dynamic gritter,
+        dynamic interwish,
+        dynamic monoxylic,
+        dynamic myristic,
+        dynamic nightwear,
+        dynamic peruser,
+        dynamic theoastrological,
+        dynamic thumby,
+        dynamic tingitid,
+        dynamic trailless,
+        dynamic unpocketed,
+    }) => 
+        OccupationalistClass(
+            beholdable: beholdable ?? this.beholdable,
+            brotuliform: brotuliform ?? this.brotuliform,
+            chimakum: chimakum ?? this.chimakum,
+            doodler: doodler ?? this.doodler,
+            emulsin: emulsin ?? this.emulsin,
+            fin: fin ?? this.fin,
+            flourishing: flourishing ?? this.flourishing,
+            flueless: flueless ?? this.flueless,
+            furtively: furtively ?? this.furtively,
+            gritter: gritter ?? this.gritter,
+            interwish: interwish ?? this.interwish,
+            monoxylic: monoxylic ?? this.monoxylic,
+            myristic: myristic ?? this.myristic,
+            nightwear: nightwear ?? this.nightwear,
+            peruser: peruser ?? this.peruser,
+            theoastrological: theoastrological ?? this.theoastrological,
+            thumby: thumby ?? this.thumby,
+            tingitid: tingitid ?? this.tingitid,
+            trailless: trailless ?? this.trailless,
+            unpocketed: unpocketed ?? this.unpocketed,
+        );
+
+    factory OccupationalistClass.fromJson(Map<String, dynamic> json) => OccupationalistClass(
+        beholdable: (json.containsKey("beholdable") ? json["beholdable"] : throw FormatException('Missing required property')),
+        brotuliform: (json.containsKey("brotuliform") ? json["brotuliform"] : throw FormatException('Missing required property')),
+        chimakum: (json.containsKey("Chimakum") ? json["Chimakum"] : throw FormatException('Missing required property')),
+        doodler: (json.containsKey("doodler") ? json["doodler"] : throw FormatException('Missing required property')),
+        emulsin: (json.containsKey("emulsin") ? json["emulsin"] : throw FormatException('Missing required property')),
+        fin: (json.containsKey("Fin") ? json["Fin"] : throw FormatException('Missing required property')),
+        flourishing: (json.containsKey("flourishing") ? json["flourishing"] : throw FormatException('Missing required property')),
+        flueless: (json.containsKey("flueless") ? json["flueless"] : throw FormatException('Missing required property')),
+        furtively: (json.containsKey("furtively") ? json["furtively"] : throw FormatException('Missing required property')),
+        gritter: (json.containsKey("gritter") ? json["gritter"] : throw FormatException('Missing required property')),
+        interwish: (json.containsKey("interwish") ? json["interwish"] : throw FormatException('Missing required property')),
+        monoxylic: (json.containsKey("monoxylic") ? json["monoxylic"] : throw FormatException('Missing required property')),
+        myristic: (json.containsKey("myristic") ? json["myristic"] : throw FormatException('Missing required property')),
+        nightwear: (json.containsKey("nightwear") ? json["nightwear"] : throw FormatException('Missing required property')),
+        peruser: (json.containsKey("peruser") ? json["peruser"] : throw FormatException('Missing required property')),
+        theoastrological: (json.containsKey("theoastrological") ? json["theoastrological"] : throw FormatException('Missing required property')),
+        thumby: (json.containsKey("thumby") ? json["thumby"] : throw FormatException('Missing required property')),
+        tingitid: (json.containsKey("tingitid") ? json["tingitid"] : throw FormatException('Missing required property')),
+        trailless: (json.containsKey("trailless") ? json["trailless"] : throw FormatException('Missing required property')),
+        unpocketed: (json.containsKey("unpocketed") ? json["unpocketed"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "beholdable": beholdable,
+        "brotuliform": brotuliform,
+        "Chimakum": chimakum,
+        "doodler": doodler,
+        "emulsin": emulsin,
+        "Fin": fin,
+        "flourishing": flourishing,
+        "flueless": flueless,
+        "furtively": furtively,
+        "gritter": gritter,
+        "interwish": interwish,
+        "monoxylic": monoxylic,
+        "myristic": myristic,
+        "nightwear": nightwear,
+        "peruser": peruser,
+        "theoastrological": theoastrological,
+        "thumby": thumby,
+        "tingitid": tingitid,
+        "trailless": trailless,
+        "unpocketed": unpocketed,
+    };
+}
+
+class OutrivalClass {
+    final dynamic adroitly;
+    final dynamic bridehood;
+    final dynamic castoroides;
+    final dynamic czechoslovak;
+    final dynamic diagenesis;
+    final dynamic dihexahedron;
+    final dynamic dopester;
+    final dynamic eumerism;
+    final dynamic flyness;
+    final dynamic fouler;
+    final dynamic laudanosine;
+    final dynamic lingulidae;
+    final dynamic minutary;
+    final dynamic mitra;
+    final dynamic opisthorchiasis;
+    final dynamic pensively;
+    final dynamic pubigerous;
+    final dynamic rebellious;
+    final dynamic recodify;
+    final dynamic unpaced;
+
+    OutrivalClass({
+        required this.adroitly,
+        required this.bridehood,
+        required this.castoroides,
+        required this.czechoslovak,
+        required this.diagenesis,
+        required this.dihexahedron,
+        required this.dopester,
+        required this.eumerism,
+        required this.flyness,
+        required this.fouler,
+        required this.laudanosine,
+        required this.lingulidae,
+        required this.minutary,
+        required this.mitra,
+        required this.opisthorchiasis,
+        required this.pensively,
+        required this.pubigerous,
+        required this.rebellious,
+        required this.recodify,
+        required this.unpaced,
+    });
+
+    OutrivalClass copyWith({
+        dynamic adroitly,
+        dynamic bridehood,
+        dynamic castoroides,
+        dynamic czechoslovak,
+        dynamic diagenesis,
+        dynamic dihexahedron,
+        dynamic dopester,
+        dynamic eumerism,
+        dynamic flyness,
+        dynamic fouler,
+        dynamic laudanosine,
+        dynamic lingulidae,
+        dynamic minutary,
+        dynamic mitra,
+        dynamic opisthorchiasis,
+        dynamic pensively,
+        dynamic pubigerous,
+        dynamic rebellious,
+        dynamic recodify,
+        dynamic unpaced,
+    }) => 
+        OutrivalClass(
+            adroitly: adroitly ?? this.adroitly,
+            bridehood: bridehood ?? this.bridehood,
+            castoroides: castoroides ?? this.castoroides,
+            czechoslovak: czechoslovak ?? this.czechoslovak,
+            diagenesis: diagenesis ?? this.diagenesis,
+            dihexahedron: dihexahedron ?? this.dihexahedron,
+            dopester: dopester ?? this.dopester,
+            eumerism: eumerism ?? this.eumerism,
+            flyness: flyness ?? this.flyness,
+            fouler: fouler ?? this.fouler,
+            laudanosine: laudanosine ?? this.laudanosine,
+            lingulidae: lingulidae ?? this.lingulidae,
+            minutary: minutary ?? this.minutary,
+            mitra: mitra ?? this.mitra,
+            opisthorchiasis: opisthorchiasis ?? this.opisthorchiasis,
+            pensively: pensively ?? this.pensively,
+            pubigerous: pubigerous ?? this.pubigerous,
+            rebellious: rebellious ?? this.rebellious,
+            recodify: recodify ?? this.recodify,
+            unpaced: unpaced ?? this.unpaced,
+        );
+
+    factory OutrivalClass.fromJson(Map<String, dynamic> json) => OutrivalClass(
+        adroitly: (json.containsKey("adroitly") ? json["adroitly"] : throw FormatException('Missing required property')),
+        bridehood: (json.containsKey("bridehood") ? json["bridehood"] : throw FormatException('Missing required property')),
+        castoroides: (json.containsKey("Castoroides") ? json["Castoroides"] : throw FormatException('Missing required property')),
+        czechoslovak: (json.containsKey("Czechoslovak") ? json["Czechoslovak"] : throw FormatException('Missing required property')),
+        diagenesis: (json.containsKey("diagenesis") ? json["diagenesis"] : throw FormatException('Missing required property')),
+        dihexahedron: (json.containsKey("dihexahedron") ? json["dihexahedron"] : throw FormatException('Missing required property')),
+        dopester: (json.containsKey("dopester") ? json["dopester"] : throw FormatException('Missing required property')),
+        eumerism: (json.containsKey("eumerism") ? json["eumerism"] : throw FormatException('Missing required property')),
+        flyness: (json.containsKey("flyness") ? json["flyness"] : throw FormatException('Missing required property')),
+        fouler: (json.containsKey("fouler") ? json["fouler"] : throw FormatException('Missing required property')),
+        laudanosine: (json.containsKey("laudanosine") ? json["laudanosine"] : throw FormatException('Missing required property')),
+        lingulidae: (json.containsKey("Lingulidae") ? json["Lingulidae"] : throw FormatException('Missing required property')),
+        minutary: (json.containsKey("minutary") ? json["minutary"] : throw FormatException('Missing required property')),
+        mitra: (json.containsKey("mitra") ? json["mitra"] : throw FormatException('Missing required property')),
+        opisthorchiasis: (json.containsKey("opisthorchiasis") ? json["opisthorchiasis"] : throw FormatException('Missing required property')),
+        pensively: (json.containsKey("pensively") ? json["pensively"] : throw FormatException('Missing required property')),
+        pubigerous: (json.containsKey("pubigerous") ? json["pubigerous"] : throw FormatException('Missing required property')),
+        rebellious: (json.containsKey("rebellious") ? json["rebellious"] : throw FormatException('Missing required property')),
+        recodify: (json.containsKey("recodify") ? json["recodify"] : throw FormatException('Missing required property')),
+        unpaced: (json.containsKey("unpaced") ? json["unpaced"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "adroitly": adroitly,
+        "bridehood": bridehood,
+        "Castoroides": castoroides,
+        "Czechoslovak": czechoslovak,
+        "diagenesis": diagenesis,
+        "dihexahedron": dihexahedron,
+        "dopester": dopester,
+        "eumerism": eumerism,
+        "flyness": flyness,
+        "fouler": fouler,
+        "laudanosine": laudanosine,
+        "Lingulidae": lingulidae,
+        "minutary": minutary,
+        "mitra": mitra,
+        "opisthorchiasis": opisthorchiasis,
+        "pensively": pensively,
+        "pubigerous": pubigerous,
+        "rebellious": rebellious,
+        "recodify": recodify,
+        "unpaced": unpaced,
+    };
+}
+
+class PiaculumClass {
+    final int? alada;
+    final int? amphistomous;
+    final int? boysenberry;
+    final double? catharticalness;
+    final int? chirotherium;
+    final int? decardinalize;
+    final int? discouragement;
+    final String? disdiapason;
+    final int? doitrified;
+    final int? hexaspermous;
+    final bool? homocerc;
+    final int? insinking;
+    final int? loathfulness;
+    final int? miasmatical;
+    final int? neurofibril;
+    final dynamic nonbookish;
+    final int? phonendoscope;
+    final int? pilferment;
+    final int? predismissory;
+    final int? preinscription;
+    final int? quotative;
+    final int? sienna;
+    final int? thorax;
+    final int? yachting;
+    final int? zipper;
+
+    PiaculumClass({
+        this.alada,
+        this.amphistomous,
+        this.boysenberry,
+        this.catharticalness,
+        this.chirotherium,
+        this.decardinalize,
+        this.discouragement,
+        this.disdiapason,
+        this.doitrified,
+        this.hexaspermous,
+        this.homocerc,
+        this.insinking,
+        this.loathfulness,
+        this.miasmatical,
+        this.neurofibril,
+        this.nonbookish,
+        this.phonendoscope,
+        this.pilferment,
+        this.predismissory,
+        this.preinscription,
+        this.quotative,
+        this.sienna,
+        this.thorax,
+        this.yachting,
+        this.zipper,
+    });
+
+    PiaculumClass copyWith({
+        int? alada,
+        int? amphistomous,
+        int? boysenberry,
+        double? catharticalness,
+        int? chirotherium,
+        int? decardinalize,
+        int? discouragement,
+        String? disdiapason,
+        int? doitrified,
+        int? hexaspermous,
+        bool? homocerc,
+        int? insinking,
+        int? loathfulness,
+        int? miasmatical,
+        int? neurofibril,
+        dynamic nonbookish,
+        int? phonendoscope,
+        int? pilferment,
+        int? predismissory,
+        int? preinscription,
+        int? quotative,
+        int? sienna,
+        int? thorax,
+        int? yachting,
+        int? zipper,
+    }) => 
+        PiaculumClass(
+            alada: alada ?? this.alada,
+            amphistomous: amphistomous ?? this.amphistomous,
+            boysenberry: boysenberry ?? this.boysenberry,
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            decardinalize: decardinalize ?? this.decardinalize,
+            discouragement: discouragement ?? this.discouragement,
+            disdiapason: disdiapason ?? this.disdiapason,
+            doitrified: doitrified ?? this.doitrified,
+            hexaspermous: hexaspermous ?? this.hexaspermous,
+            homocerc: homocerc ?? this.homocerc,
+            insinking: insinking ?? this.insinking,
+            loathfulness: loathfulness ?? this.loathfulness,
+            miasmatical: miasmatical ?? this.miasmatical,
+            neurofibril: neurofibril ?? this.neurofibril,
+            nonbookish: nonbookish ?? this.nonbookish,
+            phonendoscope: phonendoscope ?? this.phonendoscope,
+            pilferment: pilferment ?? this.pilferment,
+            predismissory: predismissory ?? this.predismissory,
+            preinscription: preinscription ?? this.preinscription,
+            quotative: quotative ?? this.quotative,
+            sienna: sienna ?? this.sienna,
+            thorax: thorax ?? this.thorax,
+            yachting: yachting ?? this.yachting,
+            zipper: zipper ?? this.zipper,
+        );
+
+    factory PiaculumClass.fromJson(Map<String, dynamic> json) => PiaculumClass(
+        alada: json["alada"],
+        amphistomous: json["amphistomous"],
+        boysenberry: json["boysenberry"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        decardinalize: json["decardinalize"],
+        discouragement: json["discouragement"],
+        disdiapason: json["disdiapason"],
+        doitrified: json["doitrified"],
+        hexaspermous: json["hexaspermous"],
+        homocerc: json["homocerc"],
+        insinking: json["insinking"],
+        loathfulness: json["loathfulness"],
+        miasmatical: json["miasmatical"],
+        neurofibril: json["neurofibril"],
+        nonbookish: json["nonbookish"],
+        phonendoscope: json["phonendoscope"],
+        pilferment: json["pilferment"],
+        predismissory: json["predismissory"],
+        preinscription: json["preinscription"],
+        quotative: json["quotative"],
+        sienna: json["sienna"],
+        thorax: json["thorax"],
+        yachting: json["yachting"],
+        zipper: json["Zipper"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "alada": alada,
+        "amphistomous": amphistomous,
+        "boysenberry": boysenberry,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "decardinalize": decardinalize,
+        "discouragement": discouragement,
+        "disdiapason": disdiapason,
+        "doitrified": doitrified,
+        "hexaspermous": hexaspermous,
+        "homocerc": homocerc,
+        "insinking": insinking,
+        "loathfulness": loathfulness,
+        "miasmatical": miasmatical,
+        "neurofibril": neurofibril,
+        "nonbookish": nonbookish,
+        "phonendoscope": phonendoscope,
+        "pilferment": pilferment,
+        "predismissory": predismissory,
+        "preinscription": preinscription,
+        "quotative": quotative,
+        "sienna": sienna,
+        "thorax": thorax,
+        "yachting": yachting,
+        "Zipper": zipper,
+    };
+}
+
+class Pneumocele {
+    final dynamic carbonarism;
+    final double? catharticalness;
+    final int? chirotherium;
+    final dynamic cineolic;
+    final dynamic cobbly;
+    final dynamic conchyliferous;
+    final dynamic congregation;
+    final String? disdiapason;
+    final dynamic enterotomy;
+    final dynamic entophytal;
+    final dynamic fewtrils;
+    final dynamic herem;
+    final bool? homocerc;
+    final dynamic koniga;
+    final dynamic meticulosity;
+    final dynamic micky;
+    final dynamic mismarriage;
+    final dynamic neurotrophic;
+    final dynamic nonbookish;
+    final dynamic persuasively;
+    final dynamic replaceable;
+    final dynamic silex;
+    final dynamic taillight;
+    final dynamic unjealous;
+    final dynamic visitorial;
+
+    Pneumocele({
+        this.carbonarism,
+        this.catharticalness,
+        this.chirotherium,
+        this.cineolic,
+        this.cobbly,
+        this.conchyliferous,
+        this.congregation,
+        this.disdiapason,
+        this.enterotomy,
+        this.entophytal,
+        this.fewtrils,
+        this.herem,
+        this.homocerc,
+        this.koniga,
+        this.meticulosity,
+        this.micky,
+        this.mismarriage,
+        this.neurotrophic,
+        this.nonbookish,
+        this.persuasively,
+        this.replaceable,
+        this.silex,
+        this.taillight,
+        this.unjealous,
+        this.visitorial,
+    });
+
+    Pneumocele copyWith({
+        dynamic carbonarism,
+        double? catharticalness,
+        int? chirotherium,
+        dynamic cineolic,
+        dynamic cobbly,
+        dynamic conchyliferous,
+        dynamic congregation,
+        String? disdiapason,
+        dynamic enterotomy,
+        dynamic entophytal,
+        dynamic fewtrils,
+        dynamic herem,
+        bool? homocerc,
+        dynamic koniga,
+        dynamic meticulosity,
+        dynamic micky,
+        dynamic mismarriage,
+        dynamic neurotrophic,
+        dynamic nonbookish,
+        dynamic persuasively,
+        dynamic replaceable,
+        dynamic silex,
+        dynamic taillight,
+        dynamic unjealous,
+        dynamic visitorial,
+    }) => 
+        Pneumocele(
+            carbonarism: carbonarism ?? this.carbonarism,
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            cineolic: cineolic ?? this.cineolic,
+            cobbly: cobbly ?? this.cobbly,
+            conchyliferous: conchyliferous ?? this.conchyliferous,
+            congregation: congregation ?? this.congregation,
+            disdiapason: disdiapason ?? this.disdiapason,
+            enterotomy: enterotomy ?? this.enterotomy,
+            entophytal: entophytal ?? this.entophytal,
+            fewtrils: fewtrils ?? this.fewtrils,
+            herem: herem ?? this.herem,
+            homocerc: homocerc ?? this.homocerc,
+            koniga: koniga ?? this.koniga,
+            meticulosity: meticulosity ?? this.meticulosity,
+            micky: micky ?? this.micky,
+            mismarriage: mismarriage ?? this.mismarriage,
+            neurotrophic: neurotrophic ?? this.neurotrophic,
+            nonbookish: nonbookish ?? this.nonbookish,
+            persuasively: persuasively ?? this.persuasively,
+            replaceable: replaceable ?? this.replaceable,
+            silex: silex ?? this.silex,
+            taillight: taillight ?? this.taillight,
+            unjealous: unjealous ?? this.unjealous,
+            visitorial: visitorial ?? this.visitorial,
+        );
+
+    factory Pneumocele.fromJson(Map<String, dynamic> json) => Pneumocele(
+        carbonarism: json["Carbonarism"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        cineolic: json["cineolic"],
+        cobbly: json["cobbly"],
+        conchyliferous: json["conchyliferous"],
+        congregation: json["congregation"],
+        disdiapason: json["disdiapason"],
+        enterotomy: json["enterotomy"],
+        entophytal: json["entophytal"],
+        fewtrils: json["fewtrils"],
+        herem: json["herem"],
+        homocerc: json["homocerc"],
+        koniga: json["Koniga"],
+        meticulosity: json["meticulosity"],
+        micky: json["Micky"],
+        mismarriage: json["mismarriage"],
+        neurotrophic: json["neurotrophic"],
+        nonbookish: json["nonbookish"],
+        persuasively: json["persuasively"],
+        replaceable: json["replaceable"],
+        silex: json["silex"],
+        taillight: json["taillight"],
+        unjealous: json["unjealous"],
+        visitorial: json["visitorial"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "Carbonarism": carbonarism,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "cineolic": cineolic,
+        "cobbly": cobbly,
+        "conchyliferous": conchyliferous,
+        "congregation": congregation,
+        "disdiapason": disdiapason,
+        "enterotomy": enterotomy,
+        "entophytal": entophytal,
+        "fewtrils": fewtrils,
+        "herem": herem,
+        "homocerc": homocerc,
+        "Koniga": koniga,
+        "meticulosity": meticulosity,
+        "Micky": micky,
+        "mismarriage": mismarriage,
+        "neurotrophic": neurotrophic,
+        "nonbookish": nonbookish,
+        "persuasively": persuasively,
+        "replaceable": replaceable,
+        "silex": silex,
+        "taillight": taillight,
+        "unjealous": unjealous,
+        "visitorial": visitorial,
+    };
+}
+
+class PotwhiskyClass {
+    final dynamic arciform;
+    final dynamic cresolin;
+    final dynamic disheartener;
+    final dynamic disproportionable;
+    final dynamic euchorda;
+    final dynamic ferryway;
+    final dynamic filamentiferous;
+    final dynamic flemish;
+    final dynamic forgainst;
+    final dynamic grainering;
+    final dynamic irrevoluble;
+    final dynamic kindredship;
+    final dynamic pinguitudinous;
+    final dynamic simpletonic;
+    final dynamic singsong;
+    final dynamic submergement;
+    final dynamic supraoesophagal;
+    final dynamic thrashel;
+    final dynamic tyremesis;
+    final dynamic yoruba;
+
+    PotwhiskyClass({
+        required this.arciform,
+        required this.cresolin,
+        required this.disheartener,
+        required this.disproportionable,
+        required this.euchorda,
+        required this.ferryway,
+        required this.filamentiferous,
+        required this.flemish,
+        required this.forgainst,
+        required this.grainering,
+        required this.irrevoluble,
+        required this.kindredship,
+        required this.pinguitudinous,
+        required this.simpletonic,
+        required this.singsong,
+        required this.submergement,
+        required this.supraoesophagal,
+        required this.thrashel,
+        required this.tyremesis,
+        required this.yoruba,
+    });
+
+    PotwhiskyClass copyWith({
+        dynamic arciform,
+        dynamic cresolin,
+        dynamic disheartener,
+        dynamic disproportionable,
+        dynamic euchorda,
+        dynamic ferryway,
+        dynamic filamentiferous,
+        dynamic flemish,
+        dynamic forgainst,
+        dynamic grainering,
+        dynamic irrevoluble,
+        dynamic kindredship,
+        dynamic pinguitudinous,
+        dynamic simpletonic,
+        dynamic singsong,
+        dynamic submergement,
+        dynamic supraoesophagal,
+        dynamic thrashel,
+        dynamic tyremesis,
+        dynamic yoruba,
+    }) => 
+        PotwhiskyClass(
+            arciform: arciform ?? this.arciform,
+            cresolin: cresolin ?? this.cresolin,
+            disheartener: disheartener ?? this.disheartener,
+            disproportionable: disproportionable ?? this.disproportionable,
+            euchorda: euchorda ?? this.euchorda,
+            ferryway: ferryway ?? this.ferryway,
+            filamentiferous: filamentiferous ?? this.filamentiferous,
+            flemish: flemish ?? this.flemish,
+            forgainst: forgainst ?? this.forgainst,
+            grainering: grainering ?? this.grainering,
+            irrevoluble: irrevoluble ?? this.irrevoluble,
+            kindredship: kindredship ?? this.kindredship,
+            pinguitudinous: pinguitudinous ?? this.pinguitudinous,
+            simpletonic: simpletonic ?? this.simpletonic,
+            singsong: singsong ?? this.singsong,
+            submergement: submergement ?? this.submergement,
+            supraoesophagal: supraoesophagal ?? this.supraoesophagal,
+            thrashel: thrashel ?? this.thrashel,
+            tyremesis: tyremesis ?? this.tyremesis,
+            yoruba: yoruba ?? this.yoruba,
+        );
+
+    factory PotwhiskyClass.fromJson(Map<String, dynamic> json) => PotwhiskyClass(
+        arciform: (json.containsKey("arciform") ? json["arciform"] : throw FormatException('Missing required property')),
+        cresolin: (json.containsKey("cresolin") ? json["cresolin"] : throw FormatException('Missing required property')),
+        disheartener: (json.containsKey("disheartener") ? json["disheartener"] : throw FormatException('Missing required property')),
+        disproportionable: (json.containsKey("disproportionable") ? json["disproportionable"] : throw FormatException('Missing required property')),
+        euchorda: (json.containsKey("Euchorda") ? json["Euchorda"] : throw FormatException('Missing required property')),
+        ferryway: (json.containsKey("ferryway") ? json["ferryway"] : throw FormatException('Missing required property')),
+        filamentiferous: (json.containsKey("filamentiferous") ? json["filamentiferous"] : throw FormatException('Missing required property')),
+        flemish: (json.containsKey("flemish") ? json["flemish"] : throw FormatException('Missing required property')),
+        forgainst: (json.containsKey("forgainst") ? json["forgainst"] : throw FormatException('Missing required property')),
+        grainering: (json.containsKey("grainering") ? json["grainering"] : throw FormatException('Missing required property')),
+        irrevoluble: (json.containsKey("irrevoluble") ? json["irrevoluble"] : throw FormatException('Missing required property')),
+        kindredship: (json.containsKey("kindredship") ? json["kindredship"] : throw FormatException('Missing required property')),
+        pinguitudinous: (json.containsKey("pinguitudinous") ? json["pinguitudinous"] : throw FormatException('Missing required property')),
+        simpletonic: (json.containsKey("simpletonic") ? json["simpletonic"] : throw FormatException('Missing required property')),
+        singsong: (json.containsKey("singsong") ? json["singsong"] : throw FormatException('Missing required property')),
+        submergement: (json.containsKey("submergement") ? json["submergement"] : throw FormatException('Missing required property')),
+        supraoesophagal: (json.containsKey("supraoesophagal") ? json["supraoesophagal"] : throw FormatException('Missing required property')),
+        thrashel: (json.containsKey("thrashel") ? json["thrashel"] : throw FormatException('Missing required property')),
+        tyremesis: (json.containsKey("tyremesis") ? json["tyremesis"] : throw FormatException('Missing required property')),
+        yoruba: (json.containsKey("Yoruba") ? json["Yoruba"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "arciform": arciform,
+        "cresolin": cresolin,
+        "disheartener": disheartener,
+        "disproportionable": disproportionable,
+        "Euchorda": euchorda,
+        "ferryway": ferryway,
+        "filamentiferous": filamentiferous,
+        "flemish": flemish,
+        "forgainst": forgainst,
+        "grainering": grainering,
+        "irrevoluble": irrevoluble,
+        "kindredship": kindredship,
+        "pinguitudinous": pinguitudinous,
+        "simpletonic": simpletonic,
+        "singsong": singsong,
+        "submergement": submergement,
+        "supraoesophagal": supraoesophagal,
+        "thrashel": thrashel,
+        "tyremesis": tyremesis,
+        "Yoruba": yoruba,
+    };
+}
+
+class PrefreshmanClass {
+    final dynamic azorubine;
+    final dynamic choroiditis;
+    final dynamic coagulatory;
+    final dynamic cyclorama;
+    final dynamic dolphus;
+    final dynamic duckhearted;
+    final dynamic ficus;
+    final dynamic gemaric;
+    final dynamic jugation;
+    final dynamic myoliposis;
+    final dynamic nonnomination;
+    final dynamic palay;
+    final dynamic pentactinal;
+    final dynamic phaet;
+    final dynamic piquant;
+    final dynamic registration;
+    final dynamic remancipation;
+    final dynamic scutatiform;
+    final dynamic theodolite;
+    final dynamic underward;
+
+    PrefreshmanClass({
+        required this.azorubine,
+        required this.choroiditis,
+        required this.coagulatory,
+        required this.cyclorama,
+        required this.dolphus,
+        required this.duckhearted,
+        required this.ficus,
+        required this.gemaric,
+        required this.jugation,
+        required this.myoliposis,
+        required this.nonnomination,
+        required this.palay,
+        required this.pentactinal,
+        required this.phaet,
+        required this.piquant,
+        required this.registration,
+        required this.remancipation,
+        required this.scutatiform,
+        required this.theodolite,
+        required this.underward,
+    });
+
+    PrefreshmanClass copyWith({
+        dynamic azorubine,
+        dynamic choroiditis,
+        dynamic coagulatory,
+        dynamic cyclorama,
+        dynamic dolphus,
+        dynamic duckhearted,
+        dynamic ficus,
+        dynamic gemaric,
+        dynamic jugation,
+        dynamic myoliposis,
+        dynamic nonnomination,
+        dynamic palay,
+        dynamic pentactinal,
+        dynamic phaet,
+        dynamic piquant,
+        dynamic registration,
+        dynamic remancipation,
+        dynamic scutatiform,
+        dynamic theodolite,
+        dynamic underward,
+    }) => 
+        PrefreshmanClass(
+            azorubine: azorubine ?? this.azorubine,
+            choroiditis: choroiditis ?? this.choroiditis,
+            coagulatory: coagulatory ?? this.coagulatory,
+            cyclorama: cyclorama ?? this.cyclorama,
+            dolphus: dolphus ?? this.dolphus,
+            duckhearted: duckhearted ?? this.duckhearted,
+            ficus: ficus ?? this.ficus,
+            gemaric: gemaric ?? this.gemaric,
+            jugation: jugation ?? this.jugation,
+            myoliposis: myoliposis ?? this.myoliposis,
+            nonnomination: nonnomination ?? this.nonnomination,
+            palay: palay ?? this.palay,
+            pentactinal: pentactinal ?? this.pentactinal,
+            phaet: phaet ?? this.phaet,
+            piquant: piquant ?? this.piquant,
+            registration: registration ?? this.registration,
+            remancipation: remancipation ?? this.remancipation,
+            scutatiform: scutatiform ?? this.scutatiform,
+            theodolite: theodolite ?? this.theodolite,
+            underward: underward ?? this.underward,
+        );
+
+    factory PrefreshmanClass.fromJson(Map<String, dynamic> json) => PrefreshmanClass(
+        azorubine: (json.containsKey("azorubine") ? json["azorubine"] : throw FormatException('Missing required property')),
+        choroiditis: (json.containsKey("choroiditis") ? json["choroiditis"] : throw FormatException('Missing required property')),
+        coagulatory: (json.containsKey("coagulatory") ? json["coagulatory"] : throw FormatException('Missing required property')),
+        cyclorama: (json.containsKey("cyclorama") ? json["cyclorama"] : throw FormatException('Missing required property')),
+        dolphus: (json.containsKey("Dolphus") ? json["Dolphus"] : throw FormatException('Missing required property')),
+        duckhearted: (json.containsKey("duckhearted") ? json["duckhearted"] : throw FormatException('Missing required property')),
+        ficus: (json.containsKey("Ficus") ? json["Ficus"] : throw FormatException('Missing required property')),
+        gemaric: (json.containsKey("Gemaric") ? json["Gemaric"] : throw FormatException('Missing required property')),
+        jugation: (json.containsKey("jugation") ? json["jugation"] : throw FormatException('Missing required property')),
+        myoliposis: (json.containsKey("myoliposis") ? json["myoliposis"] : throw FormatException('Missing required property')),
+        nonnomination: (json.containsKey("nonnomination") ? json["nonnomination"] : throw FormatException('Missing required property')),
+        palay: (json.containsKey("palay") ? json["palay"] : throw FormatException('Missing required property')),
+        pentactinal: (json.containsKey("pentactinal") ? json["pentactinal"] : throw FormatException('Missing required property')),
+        phaet: (json.containsKey("Phaet") ? json["Phaet"] : throw FormatException('Missing required property')),
+        piquant: (json.containsKey("piquant") ? json["piquant"] : throw FormatException('Missing required property')),
+        registration: (json.containsKey("registration") ? json["registration"] : throw FormatException('Missing required property')),
+        remancipation: (json.containsKey("remancipation") ? json["remancipation"] : throw FormatException('Missing required property')),
+        scutatiform: (json.containsKey("scutatiform") ? json["scutatiform"] : throw FormatException('Missing required property')),
+        theodolite: (json.containsKey("theodolite") ? json["theodolite"] : throw FormatException('Missing required property')),
+        underward: (json.containsKey("underward") ? json["underward"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "azorubine": azorubine,
+        "choroiditis": choroiditis,
+        "coagulatory": coagulatory,
+        "cyclorama": cyclorama,
+        "Dolphus": dolphus,
+        "duckhearted": duckhearted,
+        "Ficus": ficus,
+        "Gemaric": gemaric,
+        "jugation": jugation,
+        "myoliposis": myoliposis,
+        "nonnomination": nonnomination,
+        "palay": palay,
+        "pentactinal": pentactinal,
+        "Phaet": phaet,
+        "piquant": piquant,
+        "registration": registration,
+        "remancipation": remancipation,
+        "scutatiform": scutatiform,
+        "theodolite": theodolite,
+        "underward": underward,
+    };
+}
diff --git a/head/dart/test/inputs/json/priority/combinations3.json/from-map-true--d222f65b3fee/TopLevel.dart b/head/dart/test/inputs/json/priority/combinations3.json/from-map-true--d222f65b3fee/TopLevel.dart
new file mode 100644
index 0000000..ab644d5
--- /dev/null
+++ b/head/dart/test/inputs/json/priority/combinations3.json/from-map-true--d222f65b3fee/TopLevel.dart
@@ -0,0 +1,1537 @@
+// To parse this JSON data, do
+//
+//     final topLevel = topLevelFromJson(jsonString);
+
+import 'dart:convert';
+
+TopLevel topLevelFromJson(String str) => TopLevel.fromMap(json.decode(str));
+
+String topLevelToJson(TopLevel data) => json.encode(data.toMap());
+
+class TopLevel {
+    final List<dynamic> juror;
+    final List<dynamic> kongoni;
+    final List<dynamic> ladronism;
+    final List<dynamic> landlubberly;
+    final List<dynamic> listener;
+    final List<dynamic> lupus;
+    final List<Maslin> maslin;
+    final List<dynamic> monazite;
+    final List<dynamic> monoliteral;
+    final List<dynamic> monotheistically;
+    final List<dynamic> montage;
+    final List<dynamic> moralness;
+    final List<MonaziteClass?> mowra;
+    final List<dynamic> mulishly;
+    final List<dynamic> myoscope;
+    final List<List<int?>?> nach;
+    final List<dynamic> neuromastic;
+    final List<Noncontributing> noncontributing;
+    final List<dynamic> nonnervous;
+    final List<dynamic> nonvaluation;
+    final List<dynamic> occupationalist;
+    final List<dynamic> outrival;
+    final List<dynamic> paleographically;
+    final List<dynamic> pamphletwise;
+    final List<dynamic> pediatrics;
+    final List<bool> perceptive;
+    final List<dynamic> piaculum;
+    final List<dynamic> piccadilly;
+    final List<dynamic> piffler;
+    final List<dynamic> pithful;
+    final List<dynamic> placuntitis;
+    final List<dynamic> plectopterous;
+    final List<Pneumocele?> pneumocele;
+    final List<dynamic> poliorcetic;
+    final List<dynamic> poormaster;
+    final List<dynamic> potwhisky;
+    final List<dynamic> practicalizer;
+    final List<dynamic> prefreshman;
+    final List<dynamic> prehensility;
+    final List<dynamic> prevoidance;
+    final List<Map<String, int?>> probant;
+    final List<dynamic> protext;
+
+    TopLevel({
+        required this.juror,
+        required this.kongoni,
+        required this.ladronism,
+        required this.landlubberly,
+        required this.listener,
+        required this.lupus,
+        required this.maslin,
+        required this.monazite,
+        required this.monoliteral,
+        required this.monotheistically,
+        required this.montage,
+        required this.moralness,
+        required this.mowra,
+        required this.mulishly,
+        required this.myoscope,
+        required this.nach,
+        required this.neuromastic,
+        required this.noncontributing,
+        required this.nonnervous,
+        required this.nonvaluation,
+        required this.occupationalist,
+        required this.outrival,
+        required this.paleographically,
+        required this.pamphletwise,
+        required this.pediatrics,
+        required this.perceptive,
+        required this.piaculum,
+        required this.piccadilly,
+        required this.piffler,
+        required this.pithful,
+        required this.placuntitis,
+        required this.plectopterous,
+        required this.pneumocele,
+        required this.poliorcetic,
+        required this.poormaster,
+        required this.potwhisky,
+        required this.practicalizer,
+        required this.prefreshman,
+        required this.prehensility,
+        required this.prevoidance,
+        required this.probant,
+        required this.protext,
+    });
+
+    factory TopLevel.fromMap(Map<String, dynamic> json) => TopLevel(
+        juror: List<dynamic>.from(json["juror"].map((x) => x)),
+        kongoni: List<dynamic>.from(json["kongoni"].map((x) => x)),
+        ladronism: List<dynamic>.from(json["ladronism"].map((x) => x)),
+        landlubberly: List<dynamic>.from(json["landlubberly"].map((x) => x)),
+        listener: List<dynamic>.from(json["listener"].map((x) => x)),
+        lupus: List<dynamic>.from(json["lupus"].map((x) => x)),
+        maslin: List<Maslin>.from(json["maslin"].map((x) => Maslin.fromMap(x))),
+        monazite: List<dynamic>.from(json["monazite"].map((x) => x)),
+        monoliteral: List<dynamic>.from(json["monoliteral"].map((x) => x)),
+        monotheistically: List<dynamic>.from(json["monotheistically"].map((x) => x)),
+        montage: List<dynamic>.from(json["montage"].map((x) => x)),
+        moralness: List<dynamic>.from(json["moralness"].map((x) => x)),
+        mowra: List<MonaziteClass?>.from(json["mowra"].map((x) => x == null ? null : MonaziteClass.fromMap(x))),
+        mulishly: List<dynamic>.from(json["mulishly"].map((x) => x)),
+        myoscope: List<dynamic>.from(json["myoscope"].map((x) => x)),
+        nach: List<List<int?>?>.from(json["nach"].map((x) => x == null ? null : List<int?>.from(x!.map((x) => x)))),
+        neuromastic: List<dynamic>.from(json["neuromastic"].map((x) => x)),
+        noncontributing: List<Noncontributing>.from(json["noncontributing"].map((x) => Noncontributing.fromMap(x))),
+        nonnervous: List<dynamic>.from(json["nonnervous"].map((x) => x)),
+        nonvaluation: List<dynamic>.from(json["nonvaluation"].map((x) => x)),
+        occupationalist: List<dynamic>.from(json["occupationalist"].map((x) => x)),
+        outrival: List<dynamic>.from(json["outrival"].map((x) => x)),
+        paleographically: List<dynamic>.from(json["paleographically"].map((x) => x)),
+        pamphletwise: List<dynamic>.from(json["pamphletwise"].map((x) => x)),
+        pediatrics: List<dynamic>.from(json["pediatrics"].map((x) => x)),
+        perceptive: List<bool>.from(json["perceptive"].map((x) => x)),
+        piaculum: List<dynamic>.from(json["piaculum"].map((x) => x)),
+        piccadilly: List<dynamic>.from(json["piccadilly"].map((x) => x)),
+        piffler: List<dynamic>.from(json["piffler"].map((x) => x)),
+        pithful: List<dynamic>.from(json["pithful"].map((x) => x)),
+        placuntitis: List<dynamic>.from(json["placuntitis"].map((x) => x)),
+        plectopterous: List<dynamic>.from(json["plectopterous"].map((x) => x)),
+        pneumocele: List<Pneumocele?>.from(json["pneumocele"].map((x) => x == null ? null : Pneumocele.fromMap(x))),
+        poliorcetic: List<dynamic>.from(json["poliorcetic"].map((x) => x)),
+        poormaster: List<dynamic>.from(json["poormaster"].map((x) => x)),
+        potwhisky: List<dynamic>.from(json["potwhisky"].map((x) => x)),
+        practicalizer: List<dynamic>.from(json["practicalizer"].map((x) => x)),
+        prefreshman: List<dynamic>.from(json["prefreshman"].map((x) => x)),
+        prehensility: List<dynamic>.from(json["prehensility"].map((x) => x)),
+        prevoidance: List<dynamic>.from(json["prevoidance"].map((x) => x)),
+        probant: List<Map<String, int?>>.from(json["probant"].map((x) => Map.from(x).map((k, v) => MapEntry<String, int?>(k, v)))),
+        protext: List<dynamic>.from(json["protext"].map((x) => x)),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "juror": List<dynamic>.from(juror.map((x) => x)),
+        "kongoni": List<dynamic>.from(kongoni.map((x) => x)),
+        "ladronism": List<dynamic>.from(ladronism.map((x) => x)),
+        "landlubberly": List<dynamic>.from(landlubberly.map((x) => x)),
+        "listener": List<dynamic>.from(listener.map((x) => x)),
+        "lupus": List<dynamic>.from(lupus.map((x) => x)),
+        "maslin": List<dynamic>.from(maslin.map((x) => x.toMap())),
+        "monazite": List<dynamic>.from(monazite.map((x) => x)),
+        "monoliteral": List<dynamic>.from(monoliteral.map((x) => x)),
+        "monotheistically": List<dynamic>.from(monotheistically.map((x) => x)),
+        "montage": List<dynamic>.from(montage.map((x) => x)),
+        "moralness": List<dynamic>.from(moralness.map((x) => x)),
+        "mowra": List<dynamic>.from(mowra.map((x) => x?.toMap())),
+        "mulishly": List<dynamic>.from(mulishly.map((x) => x)),
+        "myoscope": List<dynamic>.from(myoscope.map((x) => x)),
+        "nach": List<dynamic>.from(nach.map((x) => x == null ? null : List<dynamic>.from(x!.map((x) => x)))),
+        "neuromastic": List<dynamic>.from(neuromastic.map((x) => x)),
+        "noncontributing": List<dynamic>.from(noncontributing.map((x) => x.toMap())),
+        "nonnervous": List<dynamic>.from(nonnervous.map((x) => x)),
+        "nonvaluation": List<dynamic>.from(nonvaluation.map((x) => x)),
+        "occupationalist": List<dynamic>.from(occupationalist.map((x) => x)),
+        "outrival": List<dynamic>.from(outrival.map((x) => x)),
+        "paleographically": List<dynamic>.from(paleographically.map((x) => x)),
+        "pamphletwise": List<dynamic>.from(pamphletwise.map((x) => x)),
+        "pediatrics": List<dynamic>.from(pediatrics.map((x) => x)),
+        "perceptive": List<dynamic>.from(perceptive.map((x) => x)),
+        "piaculum": List<dynamic>.from(piaculum.map((x) => x)),
+        "piccadilly": List<dynamic>.from(piccadilly.map((x) => x)),
+        "piffler": List<dynamic>.from(piffler.map((x) => x)),
+        "pithful": List<dynamic>.from(pithful.map((x) => x)),
+        "placuntitis": List<dynamic>.from(placuntitis.map((x) => x)),
+        "plectopterous": List<dynamic>.from(plectopterous.map((x) => x)),
+        "pneumocele": List<dynamic>.from(pneumocele.map((x) => x?.toMap())),
+        "poliorcetic": List<dynamic>.from(poliorcetic.map((x) => x)),
+        "poormaster": List<dynamic>.from(poormaster.map((x) => x)),
+        "potwhisky": List<dynamic>.from(potwhisky.map((x) => x)),
+        "practicalizer": List<dynamic>.from(practicalizer.map((x) => x)),
+        "prefreshman": List<dynamic>.from(prefreshman.map((x) => x)),
+        "prehensility": List<dynamic>.from(prehensility.map((x) => x)),
+        "prevoidance": List<dynamic>.from(prevoidance.map((x) => x)),
+        "probant": List<dynamic>.from(probant.map((x) => Map.from(x).map((k, v) => MapEntry<String, dynamic>(k, v)))),
+        "protext": List<dynamic>.from(protext.map((x) => x)),
+    };
+}
+
+class JurorClass {
+    final dynamic adipsy;
+    final dynamic auxiliator;
+    final dynamic benda;
+    final dynamic benjamin;
+    final dynamic brandling;
+    final dynamic epicurishly;
+    final dynamic eremochaetous;
+    final dynamic marten;
+    final dynamic monocline;
+    final dynamic olea;
+    final dynamic palgat;
+    final dynamic pennyworth;
+    final dynamic pioury;
+    final dynamic pragmatistic;
+    final dynamic stylelessness;
+    final dynamic systematical;
+    final dynamic thready;
+    final dynamic uncontemporary;
+    final dynamic uncouched;
+    final dynamic uninhabitedness;
+
+    JurorClass({
+        required this.adipsy,
+        required this.auxiliator,
+        required this.benda,
+        required this.benjamin,
+        required this.brandling,
+        required this.epicurishly,
+        required this.eremochaetous,
+        required this.marten,
+        required this.monocline,
+        required this.olea,
+        required this.palgat,
+        required this.pennyworth,
+        required this.pioury,
+        required this.pragmatistic,
+        required this.stylelessness,
+        required this.systematical,
+        required this.thready,
+        required this.uncontemporary,
+        required this.uncouched,
+        required this.uninhabitedness,
+    });
+
+    factory JurorClass.fromMap(Map<String, dynamic> json) => JurorClass(
+        adipsy: (json.containsKey("adipsy") ? json["adipsy"] : throw FormatException('Missing required property')),
+        auxiliator: (json.containsKey("auxiliator") ? json["auxiliator"] : throw FormatException('Missing required property')),
+        benda: (json.containsKey("benda") ? json["benda"] : throw FormatException('Missing required property')),
+        benjamin: (json.containsKey("benjamin") ? json["benjamin"] : throw FormatException('Missing required property')),
+        brandling: (json.containsKey("brandling") ? json["brandling"] : throw FormatException('Missing required property')),
+        epicurishly: (json.containsKey("epicurishly") ? json["epicurishly"] : throw FormatException('Missing required property')),
+        eremochaetous: (json.containsKey("eremochaetous") ? json["eremochaetous"] : throw FormatException('Missing required property')),
+        marten: (json.containsKey("marten") ? json["marten"] : throw FormatException('Missing required property')),
+        monocline: (json.containsKey("monocline") ? json["monocline"] : throw FormatException('Missing required property')),
+        olea: (json.containsKey("Olea") ? json["Olea"] : throw FormatException('Missing required property')),
+        palgat: (json.containsKey("palgat") ? json["palgat"] : throw FormatException('Missing required property')),
+        pennyworth: (json.containsKey("pennyworth") ? json["pennyworth"] : throw FormatException('Missing required property')),
+        pioury: (json.containsKey("pioury") ? json["pioury"] : throw FormatException('Missing required property')),
+        pragmatistic: (json.containsKey("pragmatistic") ? json["pragmatistic"] : throw FormatException('Missing required property')),
+        stylelessness: (json.containsKey("stylelessness") ? json["stylelessness"] : throw FormatException('Missing required property')),
+        systematical: (json.containsKey("systematical") ? json["systematical"] : throw FormatException('Missing required property')),
+        thready: (json.containsKey("thready") ? json["thready"] : throw FormatException('Missing required property')),
+        uncontemporary: (json.containsKey("uncontemporary") ? json["uncontemporary"] : throw FormatException('Missing required property')),
+        uncouched: (json.containsKey("uncouched") ? json["uncouched"] : throw FormatException('Missing required property')),
+        uninhabitedness: (json.containsKey("uninhabitedness") ? json["uninhabitedness"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "adipsy": adipsy,
+        "auxiliator": auxiliator,
+        "benda": benda,
+        "benjamin": benjamin,
+        "brandling": brandling,
+        "epicurishly": epicurishly,
+        "eremochaetous": eremochaetous,
+        "marten": marten,
+        "monocline": monocline,
+        "Olea": olea,
+        "palgat": palgat,
+        "pennyworth": pennyworth,
+        "pioury": pioury,
+        "pragmatistic": pragmatistic,
+        "stylelessness": stylelessness,
+        "systematical": systematical,
+        "thready": thready,
+        "uncontemporary": uncontemporary,
+        "uncouched": uncouched,
+        "uninhabitedness": uninhabitedness,
+    };
+}
+
+class LadronismClass {
+    final dynamic acclaimer;
+    final dynamic achree;
+    final dynamic base;
+    final dynamic conundrumize;
+    final dynamic degerminator;
+    final dynamic describable;
+    final dynamic exasperatedly;
+    final dynamic heroine;
+    final dynamic indazin;
+    final dynamic luteous;
+    final dynamic papular;
+    final dynamic pritch;
+    final dynamic prodenia;
+    final dynamic seege;
+    final dynamic shopgirl;
+    final dynamic tragedietta;
+    final dynamic unsparse;
+    final dynamic uplook;
+    final dynamic vermiformis;
+    final dynamic whafabout;
+
+    LadronismClass({
+        required this.acclaimer,
+        required this.achree,
+        required this.base,
+        required this.conundrumize,
+        required this.degerminator,
+        required this.describable,
+        required this.exasperatedly,
+        required this.heroine,
+        required this.indazin,
+        required this.luteous,
+        required this.papular,
+        required this.pritch,
+        required this.prodenia,
+        required this.seege,
+        required this.shopgirl,
+        required this.tragedietta,
+        required this.unsparse,
+        required this.uplook,
+        required this.vermiformis,
+        required this.whafabout,
+    });
+
+    factory LadronismClass.fromMap(Map<String, dynamic> json) => LadronismClass(
+        acclaimer: (json.containsKey("acclaimer") ? json["acclaimer"] : throw FormatException('Missing required property')),
+        achree: (json.containsKey("achree") ? json["achree"] : throw FormatException('Missing required property')),
+        base: (json.containsKey("base") ? json["base"] : throw FormatException('Missing required property')),
+        conundrumize: (json.containsKey("conundrumize") ? json["conundrumize"] : throw FormatException('Missing required property')),
+        degerminator: (json.containsKey("degerminator") ? json["degerminator"] : throw FormatException('Missing required property')),
+        describable: (json.containsKey("describable") ? json["describable"] : throw FormatException('Missing required property')),
+        exasperatedly: (json.containsKey("exasperatedly") ? json["exasperatedly"] : throw FormatException('Missing required property')),
+        heroine: (json.containsKey("heroine") ? json["heroine"] : throw FormatException('Missing required property')),
+        indazin: (json.containsKey("indazin") ? json["indazin"] : throw FormatException('Missing required property')),
+        luteous: (json.containsKey("luteous") ? json["luteous"] : throw FormatException('Missing required property')),
+        papular: (json.containsKey("papular") ? json["papular"] : throw FormatException('Missing required property')),
+        pritch: (json.containsKey("pritch") ? json["pritch"] : throw FormatException('Missing required property')),
+        prodenia: (json.containsKey("Prodenia") ? json["Prodenia"] : throw FormatException('Missing required property')),
+        seege: (json.containsKey("seege") ? json["seege"] : throw FormatException('Missing required property')),
+        shopgirl: (json.containsKey("shopgirl") ? json["shopgirl"] : throw FormatException('Missing required property')),
+        tragedietta: (json.containsKey("tragedietta") ? json["tragedietta"] : throw FormatException('Missing required property')),
+        unsparse: (json.containsKey("unsparse") ? json["unsparse"] : throw FormatException('Missing required property')),
+        uplook: (json.containsKey("uplook") ? json["uplook"] : throw FormatException('Missing required property')),
+        vermiformis: (json.containsKey("vermiformis") ? json["vermiformis"] : throw FormatException('Missing required property')),
+        whafabout: (json.containsKey("whafabout") ? json["whafabout"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "acclaimer": acclaimer,
+        "achree": achree,
+        "base": base,
+        "conundrumize": conundrumize,
+        "degerminator": degerminator,
+        "describable": describable,
+        "exasperatedly": exasperatedly,
+        "heroine": heroine,
+        "indazin": indazin,
+        "luteous": luteous,
+        "papular": papular,
+        "pritch": pritch,
+        "Prodenia": prodenia,
+        "seege": seege,
+        "shopgirl": shopgirl,
+        "tragedietta": tragedietta,
+        "unsparse": unsparse,
+        "uplook": uplook,
+        "vermiformis": vermiformis,
+        "whafabout": whafabout,
+    };
+}
+
+class LandlubberlyClass {
+    final dynamic acropoleis;
+    final dynamic aminate;
+    final dynamic amyraldism;
+    final dynamic bipenniform;
+    final dynamic bugre;
+    final dynamic calycule;
+    final dynamic caoutchouc;
+    final dynamic disprover;
+    final dynamic fitroot;
+    final dynamic fulgently;
+    final dynamic kickup;
+    final dynamic laevoversion;
+    final dynamic moter;
+    final dynamic objectivity;
+    final dynamic posterity;
+    final dynamic postnuptial;
+    final dynamic precedentary;
+    final dynamic saddling;
+    final dynamic subcurrent;
+    final dynamic unrecriminative;
+
+    LandlubberlyClass({
+        required this.acropoleis,
+        required this.aminate,
+        required this.amyraldism,
+        required this.bipenniform,
+        required this.bugre,
+        required this.calycule,
+        required this.caoutchouc,
+        required this.disprover,
+        required this.fitroot,
+        required this.fulgently,
+        required this.kickup,
+        required this.laevoversion,
+        required this.moter,
+        required this.objectivity,
+        required this.posterity,
+        required this.postnuptial,
+        required this.precedentary,
+        required this.saddling,
+        required this.subcurrent,
+        required this.unrecriminative,
+    });
+
+    factory LandlubberlyClass.fromMap(Map<String, dynamic> json) => LandlubberlyClass(
+        acropoleis: (json.containsKey("acropoleis") ? json["acropoleis"] : throw FormatException('Missing required property')),
+        aminate: (json.containsKey("aminate") ? json["aminate"] : throw FormatException('Missing required property')),
+        amyraldism: (json.containsKey("Amyraldism") ? json["Amyraldism"] : throw FormatException('Missing required property')),
+        bipenniform: (json.containsKey("bipenniform") ? json["bipenniform"] : throw FormatException('Missing required property')),
+        bugre: (json.containsKey("bugre") ? json["bugre"] : throw FormatException('Missing required property')),
+        calycule: (json.containsKey("calycule") ? json["calycule"] : throw FormatException('Missing required property')),
+        caoutchouc: (json.containsKey("caoutchouc") ? json["caoutchouc"] : throw FormatException('Missing required property')),
+        disprover: (json.containsKey("disprover") ? json["disprover"] : throw FormatException('Missing required property')),
+        fitroot: (json.containsKey("fitroot") ? json["fitroot"] : throw FormatException('Missing required property')),
+        fulgently: (json.containsKey("fulgently") ? json["fulgently"] : throw FormatException('Missing required property')),
+        kickup: (json.containsKey("kickup") ? json["kickup"] : throw FormatException('Missing required property')),
+        laevoversion: (json.containsKey("laevoversion") ? json["laevoversion"] : throw FormatException('Missing required property')),
+        moter: (json.containsKey("moter") ? json["moter"] : throw FormatException('Missing required property')),
+        objectivity: (json.containsKey("objectivity") ? json["objectivity"] : throw FormatException('Missing required property')),
+        posterity: (json.containsKey("posterity") ? json["posterity"] : throw FormatException('Missing required property')),
+        postnuptial: (json.containsKey("postnuptial") ? json["postnuptial"] : throw FormatException('Missing required property')),
+        precedentary: (json.containsKey("precedentary") ? json["precedentary"] : throw FormatException('Missing required property')),
+        saddling: (json.containsKey("saddling") ? json["saddling"] : throw FormatException('Missing required property')),
+        subcurrent: (json.containsKey("subcurrent") ? json["subcurrent"] : throw FormatException('Missing required property')),
+        unrecriminative: (json.containsKey("unrecriminative") ? json["unrecriminative"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "acropoleis": acropoleis,
+        "aminate": aminate,
+        "Amyraldism": amyraldism,
+        "bipenniform": bipenniform,
+        "bugre": bugre,
+        "calycule": calycule,
+        "caoutchouc": caoutchouc,
+        "disprover": disprover,
+        "fitroot": fitroot,
+        "fulgently": fulgently,
+        "kickup": kickup,
+        "laevoversion": laevoversion,
+        "moter": moter,
+        "objectivity": objectivity,
+        "posterity": posterity,
+        "postnuptial": postnuptial,
+        "precedentary": precedentary,
+        "saddling": saddling,
+        "subcurrent": subcurrent,
+        "unrecriminative": unrecriminative,
+    };
+}
+
+class LupusClass {
+    final double? catharticalness;
+    final int? chirotherium;
+    final int? chlorioninae;
+    final int? corvinae;
+    final int? crassina;
+    final String? disdiapason;
+    final int? exiguity;
+    final int? farcist;
+    final int? holographical;
+    final bool? homocerc;
+    final int? ichthyophagan;
+    final int? implacable;
+    final dynamic nonbookish;
+    final int? outshiner;
+    final int? overweather;
+    final int? protonegroid;
+    final int? shallowish;
+    final int? snoke;
+    final int? snout;
+    final int? surveillance;
+    final int? threshingtime;
+    final int? thysanocarpus;
+    final int? unsignificantly;
+    final int? unsnap;
+    final int? vendible;
+
+    LupusClass({
+        this.catharticalness,
+        this.chirotherium,
+        this.chlorioninae,
+        this.corvinae,
+        this.crassina,
+        this.disdiapason,
+        this.exiguity,
+        this.farcist,
+        this.holographical,
+        this.homocerc,
+        this.ichthyophagan,
+        this.implacable,
+        this.nonbookish,
+        this.outshiner,
+        this.overweather,
+        this.protonegroid,
+        this.shallowish,
+        this.snoke,
+        this.snout,
+        this.surveillance,
+        this.threshingtime,
+        this.thysanocarpus,
+        this.unsignificantly,
+        this.unsnap,
+        this.vendible,
+    });
+
+    factory LupusClass.fromMap(Map<String, dynamic> json) => LupusClass(
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        chlorioninae: json["Chlorioninae"],
+        corvinae: json["Corvinae"],
+        crassina: json["Crassina"],
+        disdiapason: json["disdiapason"],
+        exiguity: json["exiguity"],
+        farcist: json["farcist"],
+        holographical: json["holographical"],
+        homocerc: json["homocerc"],
+        ichthyophagan: json["ichthyophagan"],
+        implacable: json["implacable"],
+        nonbookish: json["nonbookish"],
+        outshiner: json["outshiner"],
+        overweather: json["overweather"],
+        protonegroid: json["protonegroid"],
+        shallowish: json["shallowish"],
+        snoke: json["snoke"],
+        snout: json["snout"],
+        surveillance: json["surveillance"],
+        threshingtime: json["threshingtime"],
+        thysanocarpus: json["Thysanocarpus"],
+        unsignificantly: json["unsignificantly"],
+        unsnap: json["unsnap"],
+        vendible: json["vendible"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "Chlorioninae": chlorioninae,
+        "Corvinae": corvinae,
+        "Crassina": crassina,
+        "disdiapason": disdiapason,
+        "exiguity": exiguity,
+        "farcist": farcist,
+        "holographical": holographical,
+        "homocerc": homocerc,
+        "ichthyophagan": ichthyophagan,
+        "implacable": implacable,
+        "nonbookish": nonbookish,
+        "outshiner": outshiner,
+        "overweather": overweather,
+        "protonegroid": protonegroid,
+        "shallowish": shallowish,
+        "snoke": snoke,
+        "snout": snout,
+        "surveillance": surveillance,
+        "threshingtime": threshingtime,
+        "Thysanocarpus": thysanocarpus,
+        "unsignificantly": unsignificantly,
+        "unsnap": unsnap,
+        "vendible": vendible,
+    };
+}
+
+class Maslin {
+    final int? alicant;
+    final dynamic antiatonement;
+    final int? anticorrosive;
+    final dynamic aphidozer;
+    final dynamic bakuninist;
+    final int? be;
+    final double? catharticalness;
+    final int? chirotherium;
+    final int? chub;
+    final int? cuprosilicon;
+    final int? curtailedly;
+    final int? dellenite;
+    final int? dimitry;
+    final String? disdiapason;
+    final dynamic edifying;
+    final int? ethmoiditis;
+    final dynamic gastralgy;
+    final int? goatherd;
+    final int? hammerdress;
+    final dynamic hangfire;
+    final bool? homocerc;
+    final int? lacunosity;
+    final dynamic longiloquence;
+    final int? mameliere;
+    final dynamic motherless;
+    final dynamic nonbookish;
+    final dynamic noncorrodible;
+    final dynamic nonsensicality;
+    final int? oafishly;
+    final dynamic pfund;
+    final dynamic preadvisory;
+    final dynamic retroflexed;
+    final int? saccharulmic;
+    final int? scowlful;
+    final dynamic secluded;
+    final dynamic slackage;
+    final int? sphaeridial;
+    final dynamic spondulics;
+    final int? subsecive;
+    final dynamic swellmobsman;
+    final int? trachyglossate;
+    final dynamic trialogue;
+    final int? unassuaged;
+    final dynamic ungross;
+    final dynamic unjudiciously;
+
+    Maslin({
+        this.alicant,
+        this.antiatonement,
+        this.anticorrosive,
+        this.aphidozer,
+        this.bakuninist,
+        this.be,
+        this.catharticalness,
+        this.chirotherium,
+        this.chub,
+        this.cuprosilicon,
+        this.curtailedly,
+        this.dellenite,
+        this.dimitry,
+        this.disdiapason,
+        this.edifying,
+        this.ethmoiditis,
+        this.gastralgy,
+        this.goatherd,
+        this.hammerdress,
+        this.hangfire,
+        this.homocerc,
+        this.lacunosity,
+        this.longiloquence,
+        this.mameliere,
+        this.motherless,
+        this.nonbookish,
+        this.noncorrodible,
+        this.nonsensicality,
+        this.oafishly,
+        this.pfund,
+        this.preadvisory,
+        this.retroflexed,
+        this.saccharulmic,
+        this.scowlful,
+        this.secluded,
+        this.slackage,
+        this.sphaeridial,
+        this.spondulics,
+        this.subsecive,
+        this.swellmobsman,
+        this.trachyglossate,
+        this.trialogue,
+        this.unassuaged,
+        this.ungross,
+        this.unjudiciously,
+    });
+
+    factory Maslin.fromMap(Map<String, dynamic> json) => Maslin(
+        alicant: json["Alicant"],
+        antiatonement: json["antiatonement"],
+        anticorrosive: json["anticorrosive"],
+        aphidozer: json["aphidozer"],
+        bakuninist: json["Bakuninist"],
+        be: json["be"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        chub: json["chub"],
+        cuprosilicon: json["cuprosilicon"],
+        curtailedly: json["curtailedly"],
+        dellenite: json["dellenite"],
+        dimitry: json["Dimitry"],
+        disdiapason: json["disdiapason"],
+        edifying: json["edifying"],
+        ethmoiditis: json["ethmoiditis"],
+        gastralgy: json["gastralgy"],
+        goatherd: json["goatherd"],
+        hammerdress: json["hammerdress"],
+        hangfire: json["hangfire"],
+        homocerc: json["homocerc"],
+        lacunosity: json["lacunosity"],
+        longiloquence: json["longiloquence"],
+        mameliere: json["mameliere"],
+        motherless: json["motherless"],
+        nonbookish: json["nonbookish"],
+        noncorrodible: json["noncorrodible"],
+        nonsensicality: json["nonsensicality"],
+        oafishly: json["oafishly"],
+        pfund: json["pfund"],
+        preadvisory: json["preadvisory"],
+        retroflexed: json["retroflexed"],
+        saccharulmic: json["saccharulmic"],
+        scowlful: json["scowlful"],
+        secluded: json["secluded"],
+        slackage: json["slackage"],
+        sphaeridial: json["sphaeridial"],
+        spondulics: json["spondulics"],
+        subsecive: json["subsecive"],
+        swellmobsman: json["swellmobsman"],
+        trachyglossate: json["trachyglossate"],
+        trialogue: json["trialogue"],
+        unassuaged: json["unassuaged"],
+        ungross: json["ungross"],
+        unjudiciously: json["unjudiciously"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "Alicant": alicant,
+        "antiatonement": antiatonement,
+        "anticorrosive": anticorrosive,
+        "aphidozer": aphidozer,
+        "Bakuninist": bakuninist,
+        "be": be,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "chub": chub,
+        "cuprosilicon": cuprosilicon,
+        "curtailedly": curtailedly,
+        "dellenite": dellenite,
+        "Dimitry": dimitry,
+        "disdiapason": disdiapason,
+        "edifying": edifying,
+        "ethmoiditis": ethmoiditis,
+        "gastralgy": gastralgy,
+        "goatherd": goatherd,
+        "hammerdress": hammerdress,
+        "hangfire": hangfire,
+        "homocerc": homocerc,
+        "lacunosity": lacunosity,
+        "longiloquence": longiloquence,
+        "mameliere": mameliere,
+        "motherless": motherless,
+        "nonbookish": nonbookish,
+        "noncorrodible": noncorrodible,
+        "nonsensicality": nonsensicality,
+        "oafishly": oafishly,
+        "pfund": pfund,
+        "preadvisory": preadvisory,
+        "retroflexed": retroflexed,
+        "saccharulmic": saccharulmic,
+        "scowlful": scowlful,
+        "secluded": secluded,
+        "slackage": slackage,
+        "sphaeridial": sphaeridial,
+        "spondulics": spondulics,
+        "subsecive": subsecive,
+        "swellmobsman": swellmobsman,
+        "trachyglossate": trachyglossate,
+        "trialogue": trialogue,
+        "unassuaged": unassuaged,
+        "ungross": ungross,
+        "unjudiciously": unjudiciously,
+    };
+}
+
+class MonaziteClass {
+    final double catharticalness;
+    final int chirotherium;
+    final String disdiapason;
+    final bool homocerc;
+    final dynamic nonbookish;
+
+    MonaziteClass({
+        required this.catharticalness,
+        required this.chirotherium,
+        required this.disdiapason,
+        required this.homocerc,
+        required this.nonbookish,
+    });
+
+    factory MonaziteClass.fromMap(Map<String, dynamic> json) => MonaziteClass(
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        homocerc: json["homocerc"],
+        nonbookish: (json.containsKey("nonbookish") ? json["nonbookish"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "homocerc": homocerc,
+        "nonbookish": nonbookish,
+    };
+}
+
+class MonotheisticallyClass {
+    final dynamic blaspheme;
+    final double? catharticalness;
+    final dynamic celiosalpingectomy;
+    final int? chirotherium;
+    final dynamic consummativeness;
+    final String? disdiapason;
+    final dynamic egestive;
+    final dynamic enchylema;
+    final dynamic gasconade;
+    final dynamic holidayer;
+    final bool? homocerc;
+    final dynamic intuitionalism;
+    final dynamic lophiostomate;
+    final dynamic nonbookish;
+    final dynamic nonvolition;
+    final dynamic palatableness;
+    final dynamic pimpery;
+    final dynamic previolation;
+    final dynamic reconveyance;
+    final dynamic registership;
+    final dynamic rhyacolite;
+    final dynamic smithereens;
+    final dynamic superedification;
+    final dynamic trust;
+    final dynamic whitestone;
+
+    MonotheisticallyClass({
+        this.blaspheme,
+        this.catharticalness,
+        this.celiosalpingectomy,
+        this.chirotherium,
+        this.consummativeness,
+        this.disdiapason,
+        this.egestive,
+        this.enchylema,
+        this.gasconade,
+        this.holidayer,
+        this.homocerc,
+        this.intuitionalism,
+        this.lophiostomate,
+        this.nonbookish,
+        this.nonvolition,
+        this.palatableness,
+        this.pimpery,
+        this.previolation,
+        this.reconveyance,
+        this.registership,
+        this.rhyacolite,
+        this.smithereens,
+        this.superedification,
+        this.trust,
+        this.whitestone,
+    });
+
+    factory MonotheisticallyClass.fromMap(Map<String, dynamic> json) => MonotheisticallyClass(
+        blaspheme: json["blaspheme"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        celiosalpingectomy: json["celiosalpingectomy"],
+        chirotherium: json["Chirotherium"],
+        consummativeness: json["consummativeness"],
+        disdiapason: json["disdiapason"],
+        egestive: json["egestive"],
+        enchylema: json["enchylema"],
+        gasconade: json["gasconade"],
+        holidayer: json["holidayer"],
+        homocerc: json["homocerc"],
+        intuitionalism: json["intuitionalism"],
+        lophiostomate: json["lophiostomate"],
+        nonbookish: json["nonbookish"],
+        nonvolition: json["nonvolition"],
+        palatableness: json["palatableness"],
+        pimpery: json["pimpery"],
+        previolation: json["previolation"],
+        reconveyance: json["reconveyance"],
+        registership: json["registership"],
+        rhyacolite: json["rhyacolite"],
+        smithereens: json["smithereens"],
+        superedification: json["superedification"],
+        trust: json["trust"],
+        whitestone: json["whitestone"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "blaspheme": blaspheme,
+        "catharticalness": catharticalness,
+        "celiosalpingectomy": celiosalpingectomy,
+        "Chirotherium": chirotherium,
+        "consummativeness": consummativeness,
+        "disdiapason": disdiapason,
+        "egestive": egestive,
+        "enchylema": enchylema,
+        "gasconade": gasconade,
+        "holidayer": holidayer,
+        "homocerc": homocerc,
+        "intuitionalism": intuitionalism,
+        "lophiostomate": lophiostomate,
+        "nonbookish": nonbookish,
+        "nonvolition": nonvolition,
+        "palatableness": palatableness,
+        "pimpery": pimpery,
+        "previolation": previolation,
+        "reconveyance": reconveyance,
+        "registership": registership,
+        "rhyacolite": rhyacolite,
+        "smithereens": smithereens,
+        "superedification": superedification,
+        "trust": trust,
+        "whitestone": whitestone,
+    };
+}
+
+class Noncontributing {
+    final String estevin;
+    final double jolterhead;
+    final int sauternes;
+    final bool sparsely;
+    final dynamic unrequested;
+
+    Noncontributing({
+        required this.estevin,
+        required this.jolterhead,
+        required this.sauternes,
+        required this.sparsely,
+        required this.unrequested,
+    });
+
+    factory Noncontributing.fromMap(Map<String, dynamic> json) => Noncontributing(
+        estevin: json["estevin"],
+        jolterhead: json["jolterhead"]?.toDouble(),
+        sauternes: json["sauternes"],
+        sparsely: json["sparsely"],
+        unrequested: (json.containsKey("unrequested") ? json["unrequested"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "estevin": estevin,
+        "jolterhead": jolterhead,
+        "sauternes": sauternes,
+        "sparsely": sparsely,
+        "unrequested": unrequested,
+    };
+}
+
+class OccupationalistClass {
+    final dynamic beholdable;
+    final dynamic brotuliform;
+    final dynamic chimakum;
+    final dynamic doodler;
+    final dynamic emulsin;
+    final dynamic fin;
+    final dynamic flourishing;
+    final dynamic flueless;
+    final dynamic furtively;
+    final dynamic gritter;
+    final dynamic interwish;
+    final dynamic monoxylic;
+    final dynamic myristic;
+    final dynamic nightwear;
+    final dynamic peruser;
+    final dynamic theoastrological;
+    final dynamic thumby;
+    final dynamic tingitid;
+    final dynamic trailless;
+    final dynamic unpocketed;
+
+    OccupationalistClass({
+        required this.beholdable,
+        required this.brotuliform,
+        required this.chimakum,
+        required this.doodler,
+        required this.emulsin,
+        required this.fin,
+        required this.flourishing,
+        required this.flueless,
+        required this.furtively,
+        required this.gritter,
+        required this.interwish,
+        required this.monoxylic,
+        required this.myristic,
+        required this.nightwear,
+        required this.peruser,
+        required this.theoastrological,
+        required this.thumby,
+        required this.tingitid,
+        required this.trailless,
+        required this.unpocketed,
+    });
+
+    factory OccupationalistClass.fromMap(Map<String, dynamic> json) => OccupationalistClass(
+        beholdable: (json.containsKey("beholdable") ? json["beholdable"] : throw FormatException('Missing required property')),
+        brotuliform: (json.containsKey("brotuliform") ? json["brotuliform"] : throw FormatException('Missing required property')),
+        chimakum: (json.containsKey("Chimakum") ? json["Chimakum"] : throw FormatException('Missing required property')),
+        doodler: (json.containsKey("doodler") ? json["doodler"] : throw FormatException('Missing required property')),
+        emulsin: (json.containsKey("emulsin") ? json["emulsin"] : throw FormatException('Missing required property')),
+        fin: (json.containsKey("Fin") ? json["Fin"] : throw FormatException('Missing required property')),
+        flourishing: (json.containsKey("flourishing") ? json["flourishing"] : throw FormatException('Missing required property')),
+        flueless: (json.containsKey("flueless") ? json["flueless"] : throw FormatException('Missing required property')),
+        furtively: (json.containsKey("furtively") ? json["furtively"] : throw FormatException('Missing required property')),
+        gritter: (json.containsKey("gritter") ? json["gritter"] : throw FormatException('Missing required property')),
+        interwish: (json.containsKey("interwish") ? json["interwish"] : throw FormatException('Missing required property')),
+        monoxylic: (json.containsKey("monoxylic") ? json["monoxylic"] : throw FormatException('Missing required property')),
+        myristic: (json.containsKey("myristic") ? json["myristic"] : throw FormatException('Missing required property')),
+        nightwear: (json.containsKey("nightwear") ? json["nightwear"] : throw FormatException('Missing required property')),
+        peruser: (json.containsKey("peruser") ? json["peruser"] : throw FormatException('Missing required property')),
+        theoastrological: (json.containsKey("theoastrological") ? json["theoastrological"] : throw FormatException('Missing required property')),
+        thumby: (json.containsKey("thumby") ? json["thumby"] : throw FormatException('Missing required property')),
+        tingitid: (json.containsKey("tingitid") ? json["tingitid"] : throw FormatException('Missing required property')),
+        trailless: (json.containsKey("trailless") ? json["trailless"] : throw FormatException('Missing required property')),
+        unpocketed: (json.containsKey("unpocketed") ? json["unpocketed"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "beholdable": beholdable,
+        "brotuliform": brotuliform,
+        "Chimakum": chimakum,
+        "doodler": doodler,
+        "emulsin": emulsin,
+        "Fin": fin,
+        "flourishing": flourishing,
+        "flueless": flueless,
+        "furtively": furtively,
+        "gritter": gritter,
+        "interwish": interwish,
+        "monoxylic": monoxylic,
+        "myristic": myristic,
+        "nightwear": nightwear,
+        "peruser": peruser,
+        "theoastrological": theoastrological,
+        "thumby": thumby,
+        "tingitid": tingitid,
+        "trailless": trailless,
+        "unpocketed": unpocketed,
+    };
+}
+
+class OutrivalClass {
+    final dynamic adroitly;
+    final dynamic bridehood;
+    final dynamic castoroides;
+    final dynamic czechoslovak;
+    final dynamic diagenesis;
+    final dynamic dihexahedron;
+    final dynamic dopester;
+    final dynamic eumerism;
+    final dynamic flyness;
+    final dynamic fouler;
+    final dynamic laudanosine;
+    final dynamic lingulidae;
+    final dynamic minutary;
+    final dynamic mitra;
+    final dynamic opisthorchiasis;
+    final dynamic pensively;
+    final dynamic pubigerous;
+    final dynamic rebellious;
+    final dynamic recodify;
+    final dynamic unpaced;
+
+    OutrivalClass({
+        required this.adroitly,
+        required this.bridehood,
+        required this.castoroides,
+        required this.czechoslovak,
+        required this.diagenesis,
+        required this.dihexahedron,
+        required this.dopester,
+        required this.eumerism,
+        required this.flyness,
+        required this.fouler,
+        required this.laudanosine,
+        required this.lingulidae,
+        required this.minutary,
+        required this.mitra,
+        required this.opisthorchiasis,
+        required this.pensively,
+        required this.pubigerous,
+        required this.rebellious,
+        required this.recodify,
+        required this.unpaced,
+    });
+
+    factory OutrivalClass.fromMap(Map<String, dynamic> json) => OutrivalClass(
+        adroitly: (json.containsKey("adroitly") ? json["adroitly"] : throw FormatException('Missing required property')),
+        bridehood: (json.containsKey("bridehood") ? json["bridehood"] : throw FormatException('Missing required property')),
+        castoroides: (json.containsKey("Castoroides") ? json["Castoroides"] : throw FormatException('Missing required property')),
+        czechoslovak: (json.containsKey("Czechoslovak") ? json["Czechoslovak"] : throw FormatException('Missing required property')),
+        diagenesis: (json.containsKey("diagenesis") ? json["diagenesis"] : throw FormatException('Missing required property')),
+        dihexahedron: (json.containsKey("dihexahedron") ? json["dihexahedron"] : throw FormatException('Missing required property')),
+        dopester: (json.containsKey("dopester") ? json["dopester"] : throw FormatException('Missing required property')),
+        eumerism: (json.containsKey("eumerism") ? json["eumerism"] : throw FormatException('Missing required property')),
+        flyness: (json.containsKey("flyness") ? json["flyness"] : throw FormatException('Missing required property')),
+        fouler: (json.containsKey("fouler") ? json["fouler"] : throw FormatException('Missing required property')),
+        laudanosine: (json.containsKey("laudanosine") ? json["laudanosine"] : throw FormatException('Missing required property')),
+        lingulidae: (json.containsKey("Lingulidae") ? json["Lingulidae"] : throw FormatException('Missing required property')),
+        minutary: (json.containsKey("minutary") ? json["minutary"] : throw FormatException('Missing required property')),
+        mitra: (json.containsKey("mitra") ? json["mitra"] : throw FormatException('Missing required property')),
+        opisthorchiasis: (json.containsKey("opisthorchiasis") ? json["opisthorchiasis"] : throw FormatException('Missing required property')),
+        pensively: (json.containsKey("pensively") ? json["pensively"] : throw FormatException('Missing required property')),
+        pubigerous: (json.containsKey("pubigerous") ? json["pubigerous"] : throw FormatException('Missing required property')),
+        rebellious: (json.containsKey("rebellious") ? json["rebellious"] : throw FormatException('Missing required property')),
+        recodify: (json.containsKey("recodify") ? json["recodify"] : throw FormatException('Missing required property')),
+        unpaced: (json.containsKey("unpaced") ? json["unpaced"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "adroitly": adroitly,
+        "bridehood": bridehood,
+        "Castoroides": castoroides,
+        "Czechoslovak": czechoslovak,
+        "diagenesis": diagenesis,
+        "dihexahedron": dihexahedron,
+        "dopester": dopester,
+        "eumerism": eumerism,
+        "flyness": flyness,
+        "fouler": fouler,
+        "laudanosine": laudanosine,
+        "Lingulidae": lingulidae,
+        "minutary": minutary,
+        "mitra": mitra,
+        "opisthorchiasis": opisthorchiasis,
+        "pensively": pensively,
+        "pubigerous": pubigerous,
+        "rebellious": rebellious,
+        "recodify": recodify,
+        "unpaced": unpaced,
+    };
+}
+
+class PiaculumClass {
+    final int? alada;
+    final int? amphistomous;
+    final int? boysenberry;
+    final double? catharticalness;
+    final int? chirotherium;
+    final int? decardinalize;
+    final int? discouragement;
+    final String? disdiapason;
+    final int? doitrified;
+    final int? hexaspermous;
+    final bool? homocerc;
+    final int? insinking;
+    final int? loathfulness;
+    final int? miasmatical;
+    final int? neurofibril;
+    final dynamic nonbookish;
+    final int? phonendoscope;
+    final int? pilferment;
+    final int? predismissory;
+    final int? preinscription;
+    final int? quotative;
+    final int? sienna;
+    final int? thorax;
+    final int? yachting;
+    final int? zipper;
+
+    PiaculumClass({
+        this.alada,
+        this.amphistomous,
+        this.boysenberry,
+        this.catharticalness,
+        this.chirotherium,
+        this.decardinalize,
+        this.discouragement,
+        this.disdiapason,
+        this.doitrified,
+        this.hexaspermous,
+        this.homocerc,
+        this.insinking,
+        this.loathfulness,
+        this.miasmatical,
+        this.neurofibril,
+        this.nonbookish,
+        this.phonendoscope,
+        this.pilferment,
+        this.predismissory,
+        this.preinscription,
+        this.quotative,
+        this.sienna,
+        this.thorax,
+        this.yachting,
+        this.zipper,
+    });
+
+    factory PiaculumClass.fromMap(Map<String, dynamic> json) => PiaculumClass(
+        alada: json["alada"],
+        amphistomous: json["amphistomous"],
+        boysenberry: json["boysenberry"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        decardinalize: json["decardinalize"],
+        discouragement: json["discouragement"],
+        disdiapason: json["disdiapason"],
+        doitrified: json["doitrified"],
+        hexaspermous: json["hexaspermous"],
+        homocerc: json["homocerc"],
+        insinking: json["insinking"],
+        loathfulness: json["loathfulness"],
+        miasmatical: json["miasmatical"],
+        neurofibril: json["neurofibril"],
+        nonbookish: json["nonbookish"],
+        phonendoscope: json["phonendoscope"],
+        pilferment: json["pilferment"],
+        predismissory: json["predismissory"],
+        preinscription: json["preinscription"],
+        quotative: json["quotative"],
+        sienna: json["sienna"],
+        thorax: json["thorax"],
+        yachting: json["yachting"],
+        zipper: json["Zipper"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "alada": alada,
+        "amphistomous": amphistomous,
+        "boysenberry": boysenberry,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "decardinalize": decardinalize,
+        "discouragement": discouragement,
+        "disdiapason": disdiapason,
+        "doitrified": doitrified,
+        "hexaspermous": hexaspermous,
+        "homocerc": homocerc,
+        "insinking": insinking,
+        "loathfulness": loathfulness,
+        "miasmatical": miasmatical,
+        "neurofibril": neurofibril,
+        "nonbookish": nonbookish,
+        "phonendoscope": phonendoscope,
+        "pilferment": pilferment,
+        "predismissory": predismissory,
+        "preinscription": preinscription,
+        "quotative": quotative,
+        "sienna": sienna,
+        "thorax": thorax,
+        "yachting": yachting,
+        "Zipper": zipper,
+    };
+}
+
+class Pneumocele {
+    final dynamic carbonarism;
+    final double? catharticalness;
+    final int? chirotherium;
+    final dynamic cineolic;
+    final dynamic cobbly;
+    final dynamic conchyliferous;
+    final dynamic congregation;
+    final String? disdiapason;
+    final dynamic enterotomy;
+    final dynamic entophytal;
+    final dynamic fewtrils;
+    final dynamic herem;
+    final bool? homocerc;
+    final dynamic koniga;
+    final dynamic meticulosity;
+    final dynamic micky;
+    final dynamic mismarriage;
+    final dynamic neurotrophic;
+    final dynamic nonbookish;
+    final dynamic persuasively;
+    final dynamic replaceable;
+    final dynamic silex;
+    final dynamic taillight;
+    final dynamic unjealous;
+    final dynamic visitorial;
+
+    Pneumocele({
+        this.carbonarism,
+        this.catharticalness,
+        this.chirotherium,
+        this.cineolic,
+        this.cobbly,
+        this.conchyliferous,
+        this.congregation,
+        this.disdiapason,
+        this.enterotomy,
+        this.entophytal,
+        this.fewtrils,
+        this.herem,
+        this.homocerc,
+        this.koniga,
+        this.meticulosity,
+        this.micky,
+        this.mismarriage,
+        this.neurotrophic,
+        this.nonbookish,
+        this.persuasively,
+        this.replaceable,
+        this.silex,
+        this.taillight,
+        this.unjealous,
+        this.visitorial,
+    });
+
+    factory Pneumocele.fromMap(Map<String, dynamic> json) => Pneumocele(
+        carbonarism: json["Carbonarism"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        cineolic: json["cineolic"],
+        cobbly: json["cobbly"],
+        conchyliferous: json["conchyliferous"],
+        congregation: json["congregation"],
+        disdiapason: json["disdiapason"],
+        enterotomy: json["enterotomy"],
+        entophytal: json["entophytal"],
+        fewtrils: json["fewtrils"],
+        herem: json["herem"],
+        homocerc: json["homocerc"],
+        koniga: json["Koniga"],
+        meticulosity: json["meticulosity"],
+        micky: json["Micky"],
+        mismarriage: json["mismarriage"],
+        neurotrophic: json["neurotrophic"],
+        nonbookish: json["nonbookish"],
+        persuasively: json["persuasively"],
+        replaceable: json["replaceable"],
+        silex: json["silex"],
+        taillight: json["taillight"],
+        unjealous: json["unjealous"],
+        visitorial: json["visitorial"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "Carbonarism": carbonarism,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "cineolic": cineolic,
+        "cobbly": cobbly,
+        "conchyliferous": conchyliferous,
+        "congregation": congregation,
+        "disdiapason": disdiapason,
+        "enterotomy": enterotomy,
+        "entophytal": entophytal,
+        "fewtrils": fewtrils,
+        "herem": herem,
+        "homocerc": homocerc,
+        "Koniga": koniga,
+        "meticulosity": meticulosity,
+        "Micky": micky,
+        "mismarriage": mismarriage,
+        "neurotrophic": neurotrophic,
+        "nonbookish": nonbookish,
+        "persuasively": persuasively,
+        "replaceable": replaceable,
+        "silex": silex,
+        "taillight": taillight,
+        "unjealous": unjealous,
+        "visitorial": visitorial,
+    };
+}
+
+class PotwhiskyClass {
+    final dynamic arciform;
+    final dynamic cresolin;
+    final dynamic disheartener;
+    final dynamic disproportionable;
+    final dynamic euchorda;
+    final dynamic ferryway;
+    final dynamic filamentiferous;
+    final dynamic flemish;
+    final dynamic forgainst;
+    final dynamic grainering;
+    final dynamic irrevoluble;
+    final dynamic kindredship;
+    final dynamic pinguitudinous;
+    final dynamic simpletonic;
+    final dynamic singsong;
+    final dynamic submergement;
+    final dynamic supraoesophagal;
+    final dynamic thrashel;
+    final dynamic tyremesis;
+    final dynamic yoruba;
+
+    PotwhiskyClass({
+        required this.arciform,
+        required this.cresolin,
+        required this.disheartener,
+        required this.disproportionable,
+        required this.euchorda,
+        required this.ferryway,
+        required this.filamentiferous,
+        required this.flemish,
+        required this.forgainst,
+        required this.grainering,
+        required this.irrevoluble,
+        required this.kindredship,
+        required this.pinguitudinous,
+        required this.simpletonic,
+        required this.singsong,
+        required this.submergement,
+        required this.supraoesophagal,
+        required this.thrashel,
+        required this.tyremesis,
+        required this.yoruba,
+    });
+
+    factory PotwhiskyClass.fromMap(Map<String, dynamic> json) => PotwhiskyClass(
+        arciform: (json.containsKey("arciform") ? json["arciform"] : throw FormatException('Missing required property')),
+        cresolin: (json.containsKey("cresolin") ? json["cresolin"] : throw FormatException('Missing required property')),
+        disheartener: (json.containsKey("disheartener") ? json["disheartener"] : throw FormatException('Missing required property')),
+        disproportionable: (json.containsKey("disproportionable") ? json["disproportionable"] : throw FormatException('Missing required property')),
+        euchorda: (json.containsKey("Euchorda") ? json["Euchorda"] : throw FormatException('Missing required property')),
+        ferryway: (json.containsKey("ferryway") ? json["ferryway"] : throw FormatException('Missing required property')),
+        filamentiferous: (json.containsKey("filamentiferous") ? json["filamentiferous"] : throw FormatException('Missing required property')),
+        flemish: (json.containsKey("flemish") ? json["flemish"] : throw FormatException('Missing required property')),
+        forgainst: (json.containsKey("forgainst") ? json["forgainst"] : throw FormatException('Missing required property')),
+        grainering: (json.containsKey("grainering") ? json["grainering"] : throw FormatException('Missing required property')),
+        irrevoluble: (json.containsKey("irrevoluble") ? json["irrevoluble"] : throw FormatException('Missing required property')),
+        kindredship: (json.containsKey("kindredship") ? json["kindredship"] : throw FormatException('Missing required property')),
+        pinguitudinous: (json.containsKey("pinguitudinous") ? json["pinguitudinous"] : throw FormatException('Missing required property')),
+        simpletonic: (json.containsKey("simpletonic") ? json["simpletonic"] : throw FormatException('Missing required property')),
+        singsong: (json.containsKey("singsong") ? json["singsong"] : throw FormatException('Missing required property')),
+        submergement: (json.containsKey("submergement") ? json["submergement"] : throw FormatException('Missing required property')),
+        supraoesophagal: (json.containsKey("supraoesophagal") ? json["supraoesophagal"] : throw FormatException('Missing required property')),
+        thrashel: (json.containsKey("thrashel") ? json["thrashel"] : throw FormatException('Missing required property')),
+        tyremesis: (json.containsKey("tyremesis") ? json["tyremesis"] : throw FormatException('Missing required property')),
+        yoruba: (json.containsKey("Yoruba") ? json["Yoruba"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "arciform": arciform,
+        "cresolin": cresolin,
+        "disheartener": disheartener,
+        "disproportionable": disproportionable,
+        "Euchorda": euchorda,
+        "ferryway": ferryway,
+        "filamentiferous": filamentiferous,
+        "flemish": flemish,
+        "forgainst": forgainst,
+        "grainering": grainering,
+        "irrevoluble": irrevoluble,
+        "kindredship": kindredship,
+        "pinguitudinous": pinguitudinous,
+        "simpletonic": simpletonic,
+        "singsong": singsong,
+        "submergement": submergement,
+        "supraoesophagal": supraoesophagal,
+        "thrashel": thrashel,
+        "tyremesis": tyremesis,
+        "Yoruba": yoruba,
+    };
+}
+
+class PrefreshmanClass {
+    final dynamic azorubine;
+    final dynamic choroiditis;
+    final dynamic coagulatory;
+    final dynamic cyclorama;
+    final dynamic dolphus;
+    final dynamic duckhearted;
+    final dynamic ficus;
+    final dynamic gemaric;
+    final dynamic jugation;
+    final dynamic myoliposis;
+    final dynamic nonnomination;
+    final dynamic palay;
+    final dynamic pentactinal;
+    final dynamic phaet;
+    final dynamic piquant;
+    final dynamic registration;
+    final dynamic remancipation;
+    final dynamic scutatiform;
+    final dynamic theodolite;
+    final dynamic underward;
+
+    PrefreshmanClass({
+        required this.azorubine,
+        required this.choroiditis,
+        required this.coagulatory,
+        required this.cyclorama,
+        required this.dolphus,
+        required this.duckhearted,
+        required this.ficus,
+        required this.gemaric,
+        required this.jugation,
+        required this.myoliposis,
+        required this.nonnomination,
+        required this.palay,
+        required this.pentactinal,
+        required this.phaet,
+        required this.piquant,
+        required this.registration,
+        required this.remancipation,
+        required this.scutatiform,
+        required this.theodolite,
+        required this.underward,
+    });
+
+    factory PrefreshmanClass.fromMap(Map<String, dynamic> json) => PrefreshmanClass(
+        azorubine: (json.containsKey("azorubine") ? json["azorubine"] : throw FormatException('Missing required property')),
+        choroiditis: (json.containsKey("choroiditis") ? json["choroiditis"] : throw FormatException('Missing required property')),
+        coagulatory: (json.containsKey("coagulatory") ? json["coagulatory"] : throw FormatException('Missing required property')),
+        cyclorama: (json.containsKey("cyclorama") ? json["cyclorama"] : throw FormatException('Missing required property')),
+        dolphus: (json.containsKey("Dolphus") ? json["Dolphus"] : throw FormatException('Missing required property')),
+        duckhearted: (json.containsKey("duckhearted") ? json["duckhearted"] : throw FormatException('Missing required property')),
+        ficus: (json.containsKey("Ficus") ? json["Ficus"] : throw FormatException('Missing required property')),
+        gemaric: (json.containsKey("Gemaric") ? json["Gemaric"] : throw FormatException('Missing required property')),
+        jugation: (json.containsKey("jugation") ? json["jugation"] : throw FormatException('Missing required property')),
+        myoliposis: (json.containsKey("myoliposis") ? json["myoliposis"] : throw FormatException('Missing required property')),
+        nonnomination: (json.containsKey("nonnomination") ? json["nonnomination"] : throw FormatException('Missing required property')),
+        palay: (json.containsKey("palay") ? json["palay"] : throw FormatException('Missing required property')),
+        pentactinal: (json.containsKey("pentactinal") ? json["pentactinal"] : throw FormatException('Missing required property')),
+        phaet: (json.containsKey("Phaet") ? json["Phaet"] : throw FormatException('Missing required property')),
+        piquant: (json.containsKey("piquant") ? json["piquant"] : throw FormatException('Missing required property')),
+        registration: (json.containsKey("registration") ? json["registration"] : throw FormatException('Missing required property')),
+        remancipation: (json.containsKey("remancipation") ? json["remancipation"] : throw FormatException('Missing required property')),
+        scutatiform: (json.containsKey("scutatiform") ? json["scutatiform"] : throw FormatException('Missing required property')),
+        theodolite: (json.containsKey("theodolite") ? json["theodolite"] : throw FormatException('Missing required property')),
+        underward: (json.containsKey("underward") ? json["underward"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "azorubine": azorubine,
+        "choroiditis": choroiditis,
+        "coagulatory": coagulatory,
+        "cyclorama": cyclorama,
+        "Dolphus": dolphus,
+        "duckhearted": duckhearted,
+        "Ficus": ficus,
+        "Gemaric": gemaric,
+        "jugation": jugation,
+        "myoliposis": myoliposis,
+        "nonnomination": nonnomination,
+        "palay": palay,
+        "pentactinal": pentactinal,
+        "Phaet": phaet,
+        "piquant": piquant,
+        "registration": registration,
+        "remancipation": remancipation,
+        "scutatiform": scutatiform,
+        "theodolite": theodolite,
+        "underward": underward,
+    };
+}
diff --git a/head/dart/test/inputs/json/priority/combinations4.json/copy-with-true--bb7e994c05fe/TopLevel.dart b/head/dart/test/inputs/json/priority/combinations4.json/copy-with-true--bb7e994c05fe/TopLevel.dart
new file mode 100644
index 0000000..a6a80e9
--- /dev/null
+++ b/head/dart/test/inputs/json/priority/combinations4.json/copy-with-true--bb7e994c05fe/TopLevel.dart
@@ -0,0 +1,2620 @@
+// To parse this JSON data, do
+//
+//     final topLevel = topLevelFromJson(jsonString);
+
+import 'dart:convert';
+
+TopLevel topLevelFromJson(String str) => TopLevel.fromJson(json.decode(str));
+
+String topLevelToJson(TopLevel data) => json.encode(data.toJson());
+
+class TopLevel {
+    final List<dynamic> protrusive;
+    final List<dynamic> pulpitism;
+    final List<dynamic> pyodermia;
+    final List<dynamic> quebrachine;
+    final List<dynamic> querier;
+    final List<dynamic> rebarbative;
+    final List<Reimagine> reimagine;
+    final Ressaut ressaut;
+    final List<dynamic> retrocervical;
+    final List<dynamic> revert;
+    final List<dynamic> rewrite;
+    final List<dynamic> saccoderm;
+    final List<dynamic> santir;
+    final List<dynamic> saprophilous;
+    final List<dynamic> saxten;
+    final List<Scatty?> scatty;
+    final List<dynamic> scoffer;
+    final List<dynamic> scrampum;
+    final double semantic;
+    final List<dynamic> serpentinic;
+    final List<dynamic> shadowable;
+    final List<dynamic> sistering;
+    final List<Staghunting> staghunting;
+    final List<dynamic> stagmometer;
+    final List<dynamic> stimulability;
+    final List<dynamic> strangleable;
+    final List<dynamic> strenuosity;
+    final List<dynamic> tabaxir;
+    final List<dynamic> talpiform;
+    final List<dynamic> thwack;
+    final List<double?> to;
+    final List<dynamic> tortricine;
+    final List<dynamic> truantcy;
+    final List<String> turgesce;
+    final List<dynamic> unbeginning;
+    final List<double> underdunged;
+    final List<dynamic> undesirability;
+    final List<dynamic> unerasing;
+    final List<dynamic> unguentarium;
+    final List<dynamic> unimpeachably;
+    final List<dynamic> unmortgaged;
+    final List<dynamic> unobstructed;
+    final List<dynamic> unreceptivity;
+    final List<dynamic> unsatisfactoriness;
+    final List<int> unsecurity;
+    final List<dynamic> unstressed;
+    final List<dynamic> untasked;
+    final List<dynamic> unvarying;
+    final List<dynamic> vehemently;
+    final Map<String, bool> warriorship;
+    final List<dynamic> whitepot;
+    final List<dynamic> wrothy;
+
+    TopLevel({
+        required this.protrusive,
+        required this.pulpitism,
+        required this.pyodermia,
+        required this.quebrachine,
+        required this.querier,
+        required this.rebarbative,
+        required this.reimagine,
+        required this.ressaut,
+        required this.retrocervical,
+        required this.revert,
+        required this.rewrite,
+        required this.saccoderm,
+        required this.santir,
+        required this.saprophilous,
+        required this.saxten,
+        required this.scatty,
+        required this.scoffer,
+        required this.scrampum,
+        required this.semantic,
+        required this.serpentinic,
+        required this.shadowable,
+        required this.sistering,
+        required this.staghunting,
+        required this.stagmometer,
+        required this.stimulability,
+        required this.strangleable,
+        required this.strenuosity,
+        required this.tabaxir,
+        required this.talpiform,
+        required this.thwack,
+        required this.to,
+        required this.tortricine,
+        required this.truantcy,
+        required this.turgesce,
+        required this.unbeginning,
+        required this.underdunged,
+        required this.undesirability,
+        required this.unerasing,
+        required this.unguentarium,
+        required this.unimpeachably,
+        required this.unmortgaged,
+        required this.unobstructed,
+        required this.unreceptivity,
+        required this.unsatisfactoriness,
+        required this.unsecurity,
+        required this.unstressed,
+        required this.untasked,
+        required this.unvarying,
+        required this.vehemently,
+        required this.warriorship,
+        required this.whitepot,
+        required this.wrothy,
+    });
+
+    TopLevel copyWith({
+        List<dynamic>? protrusive,
+        List<dynamic>? pulpitism,
+        List<dynamic>? pyodermia,
+        List<dynamic>? quebrachine,
+        List<dynamic>? querier,
+        List<dynamic>? rebarbative,
+        List<Reimagine>? reimagine,
+        Ressaut? ressaut,
+        List<dynamic>? retrocervical,
+        List<dynamic>? revert,
+        List<dynamic>? rewrite,
+        List<dynamic>? saccoderm,
+        List<dynamic>? santir,
+        List<dynamic>? saprophilous,
+        List<dynamic>? saxten,
+        List<Scatty?>? scatty,
+        List<dynamic>? scoffer,
+        List<dynamic>? scrampum,
+        double? semantic,
+        List<dynamic>? serpentinic,
+        List<dynamic>? shadowable,
+        List<dynamic>? sistering,
+        List<Staghunting>? staghunting,
+        List<dynamic>? stagmometer,
+        List<dynamic>? stimulability,
+        List<dynamic>? strangleable,
+        List<dynamic>? strenuosity,
+        List<dynamic>? tabaxir,
+        List<dynamic>? talpiform,
+        List<dynamic>? thwack,
+        List<double?>? to,
+        List<dynamic>? tortricine,
+        List<dynamic>? truantcy,
+        List<String>? turgesce,
+        List<dynamic>? unbeginning,
+        List<double>? underdunged,
+        List<dynamic>? undesirability,
+        List<dynamic>? unerasing,
+        List<dynamic>? unguentarium,
+        List<dynamic>? unimpeachably,
+        List<dynamic>? unmortgaged,
+        List<dynamic>? unobstructed,
+        List<dynamic>? unreceptivity,
+        List<dynamic>? unsatisfactoriness,
+        List<int>? unsecurity,
+        List<dynamic>? unstressed,
+        List<dynamic>? untasked,
+        List<dynamic>? unvarying,
+        List<dynamic>? vehemently,
+        Map<String, bool>? warriorship,
+        List<dynamic>? whitepot,
+        List<dynamic>? wrothy,
+    }) => 
+        TopLevel(
+            protrusive: protrusive ?? this.protrusive,
+            pulpitism: pulpitism ?? this.pulpitism,
+            pyodermia: pyodermia ?? this.pyodermia,
+            quebrachine: quebrachine ?? this.quebrachine,
+            querier: querier ?? this.querier,
+            rebarbative: rebarbative ?? this.rebarbative,
+            reimagine: reimagine ?? this.reimagine,
+            ressaut: ressaut ?? this.ressaut,
+            retrocervical: retrocervical ?? this.retrocervical,
+            revert: revert ?? this.revert,
+            rewrite: rewrite ?? this.rewrite,
+            saccoderm: saccoderm ?? this.saccoderm,
+            santir: santir ?? this.santir,
+            saprophilous: saprophilous ?? this.saprophilous,
+            saxten: saxten ?? this.saxten,
+            scatty: scatty ?? this.scatty,
+            scoffer: scoffer ?? this.scoffer,
+            scrampum: scrampum ?? this.scrampum,
+            semantic: semantic ?? this.semantic,
+            serpentinic: serpentinic ?? this.serpentinic,
+            shadowable: shadowable ?? this.shadowable,
+            sistering: sistering ?? this.sistering,
+            staghunting: staghunting ?? this.staghunting,
+            stagmometer: stagmometer ?? this.stagmometer,
+            stimulability: stimulability ?? this.stimulability,
+            strangleable: strangleable ?? this.strangleable,
+            strenuosity: strenuosity ?? this.strenuosity,
+            tabaxir: tabaxir ?? this.tabaxir,
+            talpiform: talpiform ?? this.talpiform,
+            thwack: thwack ?? this.thwack,
+            to: to ?? this.to,
+            tortricine: tortricine ?? this.tortricine,
+            truantcy: truantcy ?? this.truantcy,
+            turgesce: turgesce ?? this.turgesce,
+            unbeginning: unbeginning ?? this.unbeginning,
+            underdunged: underdunged ?? this.underdunged,
+            undesirability: undesirability ?? this.undesirability,
+            unerasing: unerasing ?? this.unerasing,
+            unguentarium: unguentarium ?? this.unguentarium,
+            unimpeachably: unimpeachably ?? this.unimpeachably,
+            unmortgaged: unmortgaged ?? this.unmortgaged,
+            unobstructed: unobstructed ?? this.unobstructed,
+            unreceptivity: unreceptivity ?? this.unreceptivity,
+            unsatisfactoriness: unsatisfactoriness ?? this.unsatisfactoriness,
+            unsecurity: unsecurity ?? this.unsecurity,
+            unstressed: unstressed ?? this.unstressed,
+            untasked: untasked ?? this.untasked,
+            unvarying: unvarying ?? this.unvarying,
+            vehemently: vehemently ?? this.vehemently,
+            warriorship: warriorship ?? this.warriorship,
+            whitepot: whitepot ?? this.whitepot,
+            wrothy: wrothy ?? this.wrothy,
+        );
+
+    factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
+        protrusive: List<dynamic>.from(json["protrusive"].map((x) => x)),
+        pulpitism: List<dynamic>.from(json["pulpitism"].map((x) => x)),
+        pyodermia: List<dynamic>.from(json["pyodermia"].map((x) => x)),
+        quebrachine: List<dynamic>.from(json["quebrachine"].map((x) => x)),
+        querier: List<dynamic>.from(json["querier"].map((x) => x)),
+        rebarbative: List<dynamic>.from(json["rebarbative"].map((x) => x)),
+        reimagine: List<Reimagine>.from(json["reimagine"].map((x) => Reimagine.fromJson(x))),
+        ressaut: Ressaut.fromJson(json["ressaut"]),
+        retrocervical: List<dynamic>.from(json["retrocervical"].map((x) => x)),
+        revert: List<dynamic>.from(json["revert"].map((x) => x)),
+        rewrite: List<dynamic>.from(json["rewrite"].map((x) => x)),
+        saccoderm: List<dynamic>.from(json["saccoderm"].map((x) => x)),
+        santir: List<dynamic>.from(json["santir"].map((x) => x)),
+        saprophilous: List<dynamic>.from(json["saprophilous"].map((x) => x)),
+        saxten: List<dynamic>.from(json["saxten"].map((x) => x)),
+        scatty: List<Scatty?>.from(json["scatty"].map((x) => x == null ? null : Scatty.fromJson(x))),
+        scoffer: List<dynamic>.from(json["scoffer"].map((x) => x)),
+        scrampum: List<dynamic>.from(json["scrampum"].map((x) => x)),
+        semantic: json["semantic"]?.toDouble(),
+        serpentinic: List<dynamic>.from(json["serpentinic"].map((x) => x)),
+        shadowable: List<dynamic>.from(json["shadowable"].map((x) => x)),
+        sistering: List<dynamic>.from(json["sistering"].map((x) => x)),
+        staghunting: List<Staghunting>.from(json["staghunting"].map((x) => Staghunting.fromJson(x))),
+        stagmometer: List<dynamic>.from(json["stagmometer"].map((x) => x)),
+        stimulability: List<dynamic>.from(json["stimulability"].map((x) => x)),
+        strangleable: List<dynamic>.from(json["strangleable"].map((x) => x)),
+        strenuosity: List<dynamic>.from(json["strenuosity"].map((x) => x)),
+        tabaxir: List<dynamic>.from(json["tabaxir"].map((x) => x)),
+        talpiform: List<dynamic>.from(json["talpiform"].map((x) => x)),
+        thwack: List<dynamic>.from(json["thwack"].map((x) => x)),
+        to: List<double?>.from(json["to"].map((x) => x?.toDouble())),
+        tortricine: List<dynamic>.from(json["tortricine"].map((x) => x)),
+        truantcy: List<dynamic>.from(json["truantcy"].map((x) => x)),
+        turgesce: List<String>.from(json["turgesce"].map((x) => x)),
+        unbeginning: List<dynamic>.from(json["unbeginning"].map((x) => x)),
+        underdunged: List<double>.from(json["underdunged"].map((x) => x?.toDouble())),
+        undesirability: List<dynamic>.from(json["undesirability"].map((x) => x)),
+        unerasing: List<dynamic>.from(json["unerasing"].map((x) => x)),
+        unguentarium: List<dynamic>.from(json["unguentarium"].map((x) => x)),
+        unimpeachably: List<dynamic>.from(json["unimpeachably"].map((x) => x)),
+        unmortgaged: List<dynamic>.from(json["unmortgaged"].map((x) => x)),
+        unobstructed: List<dynamic>.from(json["unobstructed"].map((x) => x)),
+        unreceptivity: List<dynamic>.from(json["unreceptivity"].map((x) => x)),
+        unsatisfactoriness: List<dynamic>.from(json["unsatisfactoriness"].map((x) => x)),
+        unsecurity: List<int>.from(json["unsecurity"].map((x) => x)),
+        unstressed: List<dynamic>.from(json["unstressed"].map((x) => x)),
+        untasked: List<dynamic>.from(json["untasked"].map((x) => x)),
+        unvarying: List<dynamic>.from(json["unvarying"].map((x) => x)),
+        vehemently: List<dynamic>.from(json["vehemently"].map((x) => x)),
+        warriorship: Map.from(json["warriorship"]).map((k, v) => MapEntry<String, bool>(k, v)),
+        whitepot: List<dynamic>.from(json["whitepot"].map((x) => x)),
+        wrothy: List<dynamic>.from(json["wrothy"].map((x) => x)),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "protrusive": List<dynamic>.from(protrusive.map((x) => x)),
+        "pulpitism": List<dynamic>.from(pulpitism.map((x) => x)),
+        "pyodermia": List<dynamic>.from(pyodermia.map((x) => x)),
+        "quebrachine": List<dynamic>.from(quebrachine.map((x) => x)),
+        "querier": List<dynamic>.from(querier.map((x) => x)),
+        "rebarbative": List<dynamic>.from(rebarbative.map((x) => x)),
+        "reimagine": List<dynamic>.from(reimagine.map((x) => x.toJson())),
+        "ressaut": ressaut.toJson(),
+        "retrocervical": List<dynamic>.from(retrocervical.map((x) => x)),
+        "revert": List<dynamic>.from(revert.map((x) => x)),
+        "rewrite": List<dynamic>.from(rewrite.map((x) => x)),
+        "saccoderm": List<dynamic>.from(saccoderm.map((x) => x)),
+        "santir": List<dynamic>.from(santir.map((x) => x)),
+        "saprophilous": List<dynamic>.from(saprophilous.map((x) => x)),
+        "saxten": List<dynamic>.from(saxten.map((x) => x)),
+        "scatty": List<dynamic>.from(scatty.map((x) => x?.toJson())),
+        "scoffer": List<dynamic>.from(scoffer.map((x) => x)),
+        "scrampum": List<dynamic>.from(scrampum.map((x) => x)),
+        "semantic": semantic,
+        "serpentinic": List<dynamic>.from(serpentinic.map((x) => x)),
+        "shadowable": List<dynamic>.from(shadowable.map((x) => x)),
+        "sistering": List<dynamic>.from(sistering.map((x) => x)),
+        "staghunting": List<dynamic>.from(staghunting.map((x) => x.toJson())),
+        "stagmometer": List<dynamic>.from(stagmometer.map((x) => x)),
+        "stimulability": List<dynamic>.from(stimulability.map((x) => x)),
+        "strangleable": List<dynamic>.from(strangleable.map((x) => x)),
+        "strenuosity": List<dynamic>.from(strenuosity.map((x) => x)),
+        "tabaxir": List<dynamic>.from(tabaxir.map((x) => x)),
+        "talpiform": List<dynamic>.from(talpiform.map((x) => x)),
+        "thwack": List<dynamic>.from(thwack.map((x) => x)),
+        "to": List<dynamic>.from(to.map((x) => x)),
+        "tortricine": List<dynamic>.from(tortricine.map((x) => x)),
+        "truantcy": List<dynamic>.from(truantcy.map((x) => x)),
+        "turgesce": List<dynamic>.from(turgesce.map((x) => x)),
+        "unbeginning": List<dynamic>.from(unbeginning.map((x) => x)),
+        "underdunged": List<dynamic>.from(underdunged.map((x) => x)),
+        "undesirability": List<dynamic>.from(undesirability.map((x) => x)),
+        "unerasing": List<dynamic>.from(unerasing.map((x) => x)),
+        "unguentarium": List<dynamic>.from(unguentarium.map((x) => x)),
+        "unimpeachably": List<dynamic>.from(unimpeachably.map((x) => x)),
+        "unmortgaged": List<dynamic>.from(unmortgaged.map((x) => x)),
+        "unobstructed": List<dynamic>.from(unobstructed.map((x) => x)),
+        "unreceptivity": List<dynamic>.from(unreceptivity.map((x) => x)),
+        "unsatisfactoriness": List<dynamic>.from(unsatisfactoriness.map((x) => x)),
+        "unsecurity": List<dynamic>.from(unsecurity.map((x) => x)),
+        "unstressed": List<dynamic>.from(unstressed.map((x) => x)),
+        "untasked": List<dynamic>.from(untasked.map((x) => x)),
+        "unvarying": List<dynamic>.from(unvarying.map((x) => x)),
+        "vehemently": List<dynamic>.from(vehemently.map((x) => x)),
+        "warriorship": Map.from(warriorship).map((k, v) => MapEntry<String, dynamic>(k, v)),
+        "whitepot": List<dynamic>.from(whitepot.map((x) => x)),
+        "wrothy": List<dynamic>.from(wrothy.map((x) => x)),
+    };
+}
+
+class PulpitismClass {
+    final dynamic abnet;
+    final dynamic buckhorn;
+    final dynamic calciform;
+    final dynamic chelophore;
+    final dynamic cogitation;
+    final dynamic decreeable;
+    final dynamic despicable;
+    final dynamic isodiazo;
+    final dynamic jadedly;
+    final dynamic leptochlorite;
+    final dynamic nursling;
+    final dynamic palamedean;
+    final dynamic photoheliograph;
+    final dynamic pipewood;
+    final dynamic roberd;
+    final dynamic statable;
+    final dynamic superassume;
+    final dynamic syllabe;
+    final dynamic toughhead;
+    final dynamic underburn;
+
+    PulpitismClass({
+        required this.abnet,
+        required this.buckhorn,
+        required this.calciform,
+        required this.chelophore,
+        required this.cogitation,
+        required this.decreeable,
+        required this.despicable,
+        required this.isodiazo,
+        required this.jadedly,
+        required this.leptochlorite,
+        required this.nursling,
+        required this.palamedean,
+        required this.photoheliograph,
+        required this.pipewood,
+        required this.roberd,
+        required this.statable,
+        required this.superassume,
+        required this.syllabe,
+        required this.toughhead,
+        required this.underburn,
+    });
+
+    PulpitismClass copyWith({
+        dynamic abnet,
+        dynamic buckhorn,
+        dynamic calciform,
+        dynamic chelophore,
+        dynamic cogitation,
+        dynamic decreeable,
+        dynamic despicable,
+        dynamic isodiazo,
+        dynamic jadedly,
+        dynamic leptochlorite,
+        dynamic nursling,
+        dynamic palamedean,
+        dynamic photoheliograph,
+        dynamic pipewood,
+        dynamic roberd,
+        dynamic statable,
+        dynamic superassume,
+        dynamic syllabe,
+        dynamic toughhead,
+        dynamic underburn,
+    }) => 
+        PulpitismClass(
+            abnet: abnet ?? this.abnet,
+            buckhorn: buckhorn ?? this.buckhorn,
+            calciform: calciform ?? this.calciform,
+            chelophore: chelophore ?? this.chelophore,
+            cogitation: cogitation ?? this.cogitation,
+            decreeable: decreeable ?? this.decreeable,
+            despicable: despicable ?? this.despicable,
+            isodiazo: isodiazo ?? this.isodiazo,
+            jadedly: jadedly ?? this.jadedly,
+            leptochlorite: leptochlorite ?? this.leptochlorite,
+            nursling: nursling ?? this.nursling,
+            palamedean: palamedean ?? this.palamedean,
+            photoheliograph: photoheliograph ?? this.photoheliograph,
+            pipewood: pipewood ?? this.pipewood,
+            roberd: roberd ?? this.roberd,
+            statable: statable ?? this.statable,
+            superassume: superassume ?? this.superassume,
+            syllabe: syllabe ?? this.syllabe,
+            toughhead: toughhead ?? this.toughhead,
+            underburn: underburn ?? this.underburn,
+        );
+
+    factory PulpitismClass.fromJson(Map<String, dynamic> json) => PulpitismClass(
+        abnet: (json.containsKey("abnet") ? json["abnet"] : throw FormatException('Missing required property')),
+        buckhorn: (json.containsKey("buckhorn") ? json["buckhorn"] : throw FormatException('Missing required property')),
+        calciform: (json.containsKey("calciform") ? json["calciform"] : throw FormatException('Missing required property')),
+        chelophore: (json.containsKey("chelophore") ? json["chelophore"] : throw FormatException('Missing required property')),
+        cogitation: (json.containsKey("cogitation") ? json["cogitation"] : throw FormatException('Missing required property')),
+        decreeable: (json.containsKey("decreeable") ? json["decreeable"] : throw FormatException('Missing required property')),
+        despicable: (json.containsKey("despicable") ? json["despicable"] : throw FormatException('Missing required property')),
+        isodiazo: (json.containsKey("isodiazo") ? json["isodiazo"] : throw FormatException('Missing required property')),
+        jadedly: (json.containsKey("jadedly") ? json["jadedly"] : throw FormatException('Missing required property')),
+        leptochlorite: (json.containsKey("leptochlorite") ? json["leptochlorite"] : throw FormatException('Missing required property')),
+        nursling: (json.containsKey("nursling") ? json["nursling"] : throw FormatException('Missing required property')),
+        palamedean: (json.containsKey("palamedean") ? json["palamedean"] : throw FormatException('Missing required property')),
+        photoheliograph: (json.containsKey("photoheliograph") ? json["photoheliograph"] : throw FormatException('Missing required property')),
+        pipewood: (json.containsKey("pipewood") ? json["pipewood"] : throw FormatException('Missing required property')),
+        roberd: (json.containsKey("roberd") ? json["roberd"] : throw FormatException('Missing required property')),
+        statable: (json.containsKey("statable") ? json["statable"] : throw FormatException('Missing required property')),
+        superassume: (json.containsKey("superassume") ? json["superassume"] : throw FormatException('Missing required property')),
+        syllabe: (json.containsKey("syllabe") ? json["syllabe"] : throw FormatException('Missing required property')),
+        toughhead: (json.containsKey("toughhead") ? json["toughhead"] : throw FormatException('Missing required property')),
+        underburn: (json.containsKey("underburn") ? json["underburn"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "abnet": abnet,
+        "buckhorn": buckhorn,
+        "calciform": calciform,
+        "chelophore": chelophore,
+        "cogitation": cogitation,
+        "decreeable": decreeable,
+        "despicable": despicable,
+        "isodiazo": isodiazo,
+        "jadedly": jadedly,
+        "leptochlorite": leptochlorite,
+        "nursling": nursling,
+        "palamedean": palamedean,
+        "photoheliograph": photoheliograph,
+        "pipewood": pipewood,
+        "roberd": roberd,
+        "statable": statable,
+        "superassume": superassume,
+        "syllabe": syllabe,
+        "toughhead": toughhead,
+        "underburn": underburn,
+    };
+}
+
+class PyodermiaClass {
+    final dynamic aphoristically;
+    final dynamic apophyllous;
+    final dynamic cognize;
+    final dynamic dermonosology;
+    final dynamic gyppo;
+    final dynamic ither;
+    final dynamic juglandaceous;
+    final dynamic litho;
+    final dynamic macropterous;
+    final dynamic photographer;
+    final dynamic romancing;
+    final dynamic rumness;
+    final dynamic somniloquist;
+    final dynamic stressfully;
+    final dynamic tactically;
+    final dynamic tracheophony;
+    final dynamic unappositely;
+    final dynamic unclothedly;
+    final dynamic unimplied;
+    final dynamic unsyncopated;
+
+    PyodermiaClass({
+        required this.aphoristically,
+        required this.apophyllous,
+        required this.cognize,
+        required this.dermonosology,
+        required this.gyppo,
+        required this.ither,
+        required this.juglandaceous,
+        required this.litho,
+        required this.macropterous,
+        required this.photographer,
+        required this.romancing,
+        required this.rumness,
+        required this.somniloquist,
+        required this.stressfully,
+        required this.tactically,
+        required this.tracheophony,
+        required this.unappositely,
+        required this.unclothedly,
+        required this.unimplied,
+        required this.unsyncopated,
+    });
+
+    PyodermiaClass copyWith({
+        dynamic aphoristically,
+        dynamic apophyllous,
+        dynamic cognize,
+        dynamic dermonosology,
+        dynamic gyppo,
+        dynamic ither,
+        dynamic juglandaceous,
+        dynamic litho,
+        dynamic macropterous,
+        dynamic photographer,
+        dynamic romancing,
+        dynamic rumness,
+        dynamic somniloquist,
+        dynamic stressfully,
+        dynamic tactically,
+        dynamic tracheophony,
+        dynamic unappositely,
+        dynamic unclothedly,
+        dynamic unimplied,
+        dynamic unsyncopated,
+    }) => 
+        PyodermiaClass(
+            aphoristically: aphoristically ?? this.aphoristically,
+            apophyllous: apophyllous ?? this.apophyllous,
+            cognize: cognize ?? this.cognize,
+            dermonosology: dermonosology ?? this.dermonosology,
+            gyppo: gyppo ?? this.gyppo,
+            ither: ither ?? this.ither,
+            juglandaceous: juglandaceous ?? this.juglandaceous,
+            litho: litho ?? this.litho,
+            macropterous: macropterous ?? this.macropterous,
+            photographer: photographer ?? this.photographer,
+            romancing: romancing ?? this.romancing,
+            rumness: rumness ?? this.rumness,
+            somniloquist: somniloquist ?? this.somniloquist,
+            stressfully: stressfully ?? this.stressfully,
+            tactically: tactically ?? this.tactically,
+            tracheophony: tracheophony ?? this.tracheophony,
+            unappositely: unappositely ?? this.unappositely,
+            unclothedly: unclothedly ?? this.unclothedly,
+            unimplied: unimplied ?? this.unimplied,
+            unsyncopated: unsyncopated ?? this.unsyncopated,
+        );
+
+    factory PyodermiaClass.fromJson(Map<String, dynamic> json) => PyodermiaClass(
+        aphoristically: (json.containsKey("aphoristically") ? json["aphoristically"] : throw FormatException('Missing required property')),
+        apophyllous: (json.containsKey("apophyllous") ? json["apophyllous"] : throw FormatException('Missing required property')),
+        cognize: (json.containsKey("cognize") ? json["cognize"] : throw FormatException('Missing required property')),
+        dermonosology: (json.containsKey("dermonosology") ? json["dermonosology"] : throw FormatException('Missing required property')),
+        gyppo: (json.containsKey("Gyppo") ? json["Gyppo"] : throw FormatException('Missing required property')),
+        ither: (json.containsKey("ither") ? json["ither"] : throw FormatException('Missing required property')),
+        juglandaceous: (json.containsKey("juglandaceous") ? json["juglandaceous"] : throw FormatException('Missing required property')),
+        litho: (json.containsKey("litho") ? json["litho"] : throw FormatException('Missing required property')),
+        macropterous: (json.containsKey("macropterous") ? json["macropterous"] : throw FormatException('Missing required property')),
+        photographer: (json.containsKey("photographer") ? json["photographer"] : throw FormatException('Missing required property')),
+        romancing: (json.containsKey("romancing") ? json["romancing"] : throw FormatException('Missing required property')),
+        rumness: (json.containsKey("rumness") ? json["rumness"] : throw FormatException('Missing required property')),
+        somniloquist: (json.containsKey("somniloquist") ? json["somniloquist"] : throw FormatException('Missing required property')),
+        stressfully: (json.containsKey("stressfully") ? json["stressfully"] : throw FormatException('Missing required property')),
+        tactically: (json.containsKey("tactically") ? json["tactically"] : throw FormatException('Missing required property')),
+        tracheophony: (json.containsKey("tracheophony") ? json["tracheophony"] : throw FormatException('Missing required property')),
+        unappositely: (json.containsKey("unappositely") ? json["unappositely"] : throw FormatException('Missing required property')),
+        unclothedly: (json.containsKey("unclothedly") ? json["unclothedly"] : throw FormatException('Missing required property')),
+        unimplied: (json.containsKey("unimplied") ? json["unimplied"] : throw FormatException('Missing required property')),
+        unsyncopated: (json.containsKey("unsyncopated") ? json["unsyncopated"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "aphoristically": aphoristically,
+        "apophyllous": apophyllous,
+        "cognize": cognize,
+        "dermonosology": dermonosology,
+        "Gyppo": gyppo,
+        "ither": ither,
+        "juglandaceous": juglandaceous,
+        "litho": litho,
+        "macropterous": macropterous,
+        "photographer": photographer,
+        "romancing": romancing,
+        "rumness": rumness,
+        "somniloquist": somniloquist,
+        "stressfully": stressfully,
+        "tactically": tactically,
+        "tracheophony": tracheophony,
+        "unappositely": unappositely,
+        "unclothedly": unclothedly,
+        "unimplied": unimplied,
+        "unsyncopated": unsyncopated,
+    };
+}
+
+class QuebrachineClass {
+    final double catharticalness;
+    final int chirotherium;
+    final String disdiapason;
+    final bool homocerc;
+    final dynamic nonbookish;
+
+    QuebrachineClass({
+        required this.catharticalness,
+        required this.chirotherium,
+        required this.disdiapason,
+        required this.homocerc,
+        required this.nonbookish,
+    });
+
+    QuebrachineClass copyWith({
+        double? catharticalness,
+        int? chirotherium,
+        String? disdiapason,
+        bool? homocerc,
+        dynamic nonbookish,
+    }) => 
+        QuebrachineClass(
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            disdiapason: disdiapason ?? this.disdiapason,
+            homocerc: homocerc ?? this.homocerc,
+            nonbookish: nonbookish ?? this.nonbookish,
+        );
+
+    factory QuebrachineClass.fromJson(Map<String, dynamic> json) => QuebrachineClass(
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        homocerc: json["homocerc"],
+        nonbookish: (json.containsKey("nonbookish") ? json["nonbookish"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "homocerc": homocerc,
+        "nonbookish": nonbookish,
+    };
+}
+
+class Reimagine {
+    final dynamic adducible;
+    final dynamic anabolin;
+    final dynamic brainy;
+    final double? catharticalness;
+    final int? chirotherium;
+    final dynamic chrysamine;
+    final String? disdiapason;
+    final dynamic fluxweed;
+    final dynamic glaucine;
+    final dynamic grobianism;
+    final dynamic hermo;
+    final dynamic hieroglyphist;
+    final bool? homocerc;
+    final dynamic icteroid;
+    final dynamic immortal;
+    final dynamic impetulant;
+    final dynamic irrigate;
+    final dynamic myxedema;
+    final dynamic nonbookish;
+    final dynamic onyx;
+    final dynamic repasser;
+    final dynamic septomarginal;
+    final dynamic subdie;
+    final dynamic tibiometatarsal;
+    final dynamic waltzlike;
+
+    Reimagine({
+        this.adducible,
+        this.anabolin,
+        this.brainy,
+        this.catharticalness,
+        this.chirotherium,
+        this.chrysamine,
+        this.disdiapason,
+        this.fluxweed,
+        this.glaucine,
+        this.grobianism,
+        this.hermo,
+        this.hieroglyphist,
+        this.homocerc,
+        this.icteroid,
+        this.immortal,
+        this.impetulant,
+        this.irrigate,
+        this.myxedema,
+        this.nonbookish,
+        this.onyx,
+        this.repasser,
+        this.septomarginal,
+        this.subdie,
+        this.tibiometatarsal,
+        this.waltzlike,
+    });
+
+    Reimagine copyWith({
+        dynamic adducible,
+        dynamic anabolin,
+        dynamic brainy,
+        double? catharticalness,
+        int? chirotherium,
+        dynamic chrysamine,
+        String? disdiapason,
+        dynamic fluxweed,
+        dynamic glaucine,
+        dynamic grobianism,
+        dynamic hermo,
+        dynamic hieroglyphist,
+        bool? homocerc,
+        dynamic icteroid,
+        dynamic immortal,
+        dynamic impetulant,
+        dynamic irrigate,
+        dynamic myxedema,
+        dynamic nonbookish,
+        dynamic onyx,
+        dynamic repasser,
+        dynamic septomarginal,
+        dynamic subdie,
+        dynamic tibiometatarsal,
+        dynamic waltzlike,
+    }) => 
+        Reimagine(
+            adducible: adducible ?? this.adducible,
+            anabolin: anabolin ?? this.anabolin,
+            brainy: brainy ?? this.brainy,
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            chrysamine: chrysamine ?? this.chrysamine,
+            disdiapason: disdiapason ?? this.disdiapason,
+            fluxweed: fluxweed ?? this.fluxweed,
+            glaucine: glaucine ?? this.glaucine,
+            grobianism: grobianism ?? this.grobianism,
+            hermo: hermo ?? this.hermo,
+            hieroglyphist: hieroglyphist ?? this.hieroglyphist,
+            homocerc: homocerc ?? this.homocerc,
+            icteroid: icteroid ?? this.icteroid,
+            immortal: immortal ?? this.immortal,
+            impetulant: impetulant ?? this.impetulant,
+            irrigate: irrigate ?? this.irrigate,
+            myxedema: myxedema ?? this.myxedema,
+            nonbookish: nonbookish ?? this.nonbookish,
+            onyx: onyx ?? this.onyx,
+            repasser: repasser ?? this.repasser,
+            septomarginal: septomarginal ?? this.septomarginal,
+            subdie: subdie ?? this.subdie,
+            tibiometatarsal: tibiometatarsal ?? this.tibiometatarsal,
+            waltzlike: waltzlike ?? this.waltzlike,
+        );
+
+    factory Reimagine.fromJson(Map<String, dynamic> json) => Reimagine(
+        adducible: json["adducible"],
+        anabolin: json["anabolin"],
+        brainy: json["brainy"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        chrysamine: json["chrysamine"],
+        disdiapason: json["disdiapason"],
+        fluxweed: json["fluxweed"],
+        glaucine: json["glaucine"],
+        grobianism: json["grobianism"],
+        hermo: json["Hermo"],
+        hieroglyphist: json["hieroglyphist"],
+        homocerc: json["homocerc"],
+        icteroid: json["icteroid"],
+        immortal: json["immortal"],
+        impetulant: json["impetulant"],
+        irrigate: json["irrigate"],
+        myxedema: json["myxedema"],
+        nonbookish: json["nonbookish"],
+        onyx: json["onyx"],
+        repasser: json["repasser"],
+        septomarginal: json["septomarginal"],
+        subdie: json["subdie"],
+        tibiometatarsal: json["tibiometatarsal"],
+        waltzlike: json["waltzlike"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "adducible": adducible,
+        "anabolin": anabolin,
+        "brainy": brainy,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "chrysamine": chrysamine,
+        "disdiapason": disdiapason,
+        "fluxweed": fluxweed,
+        "glaucine": glaucine,
+        "grobianism": grobianism,
+        "Hermo": hermo,
+        "hieroglyphist": hieroglyphist,
+        "homocerc": homocerc,
+        "icteroid": icteroid,
+        "immortal": immortal,
+        "impetulant": impetulant,
+        "irrigate": irrigate,
+        "myxedema": myxedema,
+        "nonbookish": nonbookish,
+        "onyx": onyx,
+        "repasser": repasser,
+        "septomarginal": septomarginal,
+        "subdie": subdie,
+        "tibiometatarsal": tibiometatarsal,
+        "waltzlike": waltzlike,
+    };
+}
+
+class Ressaut {
+    final String apperceptive;
+    final String cuttoo;
+    final String douser;
+    final String drinkproof;
+    final String forementioned;
+    final String freesia;
+    final String genevieve;
+    final String hyperdiabolical;
+    final String hypocone;
+    final String irreverentially;
+    final String jumart;
+    final String mimosaceae;
+    final String mollicrush;
+    final String nedder;
+    final String retinasphalt;
+    final String sough;
+    final String steading;
+    final String theopaschitism;
+    final String undurableness;
+    final String unmingleable;
+
+    Ressaut({
+        required this.apperceptive,
+        required this.cuttoo,
+        required this.douser,
+        required this.drinkproof,
+        required this.forementioned,
+        required this.freesia,
+        required this.genevieve,
+        required this.hyperdiabolical,
+        required this.hypocone,
+        required this.irreverentially,
+        required this.jumart,
+        required this.mimosaceae,
+        required this.mollicrush,
+        required this.nedder,
+        required this.retinasphalt,
+        required this.sough,
+        required this.steading,
+        required this.theopaschitism,
+        required this.undurableness,
+        required this.unmingleable,
+    });
+
+    Ressaut copyWith({
+        String? apperceptive,
+        String? cuttoo,
+        String? douser,
+        String? drinkproof,
+        String? forementioned,
+        String? freesia,
+        String? genevieve,
+        String? hyperdiabolical,
+        String? hypocone,
+        String? irreverentially,
+        String? jumart,
+        String? mimosaceae,
+        String? mollicrush,
+        String? nedder,
+        String? retinasphalt,
+        String? sough,
+        String? steading,
+        String? theopaschitism,
+        String? undurableness,
+        String? unmingleable,
+    }) => 
+        Ressaut(
+            apperceptive: apperceptive ?? this.apperceptive,
+            cuttoo: cuttoo ?? this.cuttoo,
+            douser: douser ?? this.douser,
+            drinkproof: drinkproof ?? this.drinkproof,
+            forementioned: forementioned ?? this.forementioned,
+            freesia: freesia ?? this.freesia,
+            genevieve: genevieve ?? this.genevieve,
+            hyperdiabolical: hyperdiabolical ?? this.hyperdiabolical,
+            hypocone: hypocone ?? this.hypocone,
+            irreverentially: irreverentially ?? this.irreverentially,
+            jumart: jumart ?? this.jumart,
+            mimosaceae: mimosaceae ?? this.mimosaceae,
+            mollicrush: mollicrush ?? this.mollicrush,
+            nedder: nedder ?? this.nedder,
+            retinasphalt: retinasphalt ?? this.retinasphalt,
+            sough: sough ?? this.sough,
+            steading: steading ?? this.steading,
+            theopaschitism: theopaschitism ?? this.theopaschitism,
+            undurableness: undurableness ?? this.undurableness,
+            unmingleable: unmingleable ?? this.unmingleable,
+        );
+
+    factory Ressaut.fromJson(Map<String, dynamic> json) => Ressaut(
+        apperceptive: json["apperceptive"],
+        cuttoo: json["cuttoo"],
+        douser: json["douser"],
+        drinkproof: json["drinkproof"],
+        forementioned: json["forementioned"],
+        freesia: json["Freesia"],
+        genevieve: json["Genevieve"],
+        hyperdiabolical: json["hyperdiabolical"],
+        hypocone: json["hypocone"],
+        irreverentially: json["irreverentially"],
+        jumart: json["jumart"],
+        mimosaceae: json["Mimosaceae"],
+        mollicrush: json["mollicrush"],
+        nedder: json["nedder"],
+        retinasphalt: json["retinasphalt"],
+        sough: json["sough"],
+        steading: json["steading"],
+        theopaschitism: json["Theopaschitism"],
+        undurableness: json["undurableness"],
+        unmingleable: json["unmingleable"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "apperceptive": apperceptive,
+        "cuttoo": cuttoo,
+        "douser": douser,
+        "drinkproof": drinkproof,
+        "forementioned": forementioned,
+        "Freesia": freesia,
+        "Genevieve": genevieve,
+        "hyperdiabolical": hyperdiabolical,
+        "hypocone": hypocone,
+        "irreverentially": irreverentially,
+        "jumart": jumart,
+        "Mimosaceae": mimosaceae,
+        "mollicrush": mollicrush,
+        "nedder": nedder,
+        "retinasphalt": retinasphalt,
+        "sough": sough,
+        "steading": steading,
+        "Theopaschitism": theopaschitism,
+        "undurableness": undurableness,
+        "unmingleable": unmingleable,
+    };
+}
+
+class RewriteClass {
+    final dynamic accountancy;
+    final dynamic cacotrophic;
+    final dynamic contest;
+    final dynamic couthily;
+    final dynamic falculate;
+    final dynamic foreseize;
+    final dynamic hyades;
+    final dynamic lemnad;
+    final dynamic monotheistically;
+    final dynamic nonflying;
+    final dynamic ptenoglossa;
+    final dynamic repatch;
+    final dynamic rodman;
+    final dynamic strung;
+    final dynamic titmal;
+    final dynamic twalpennyworth;
+    final dynamic unblamable;
+    final dynamic vertical;
+    final dynamic whiggification;
+    final dynamic yardman;
+
+    RewriteClass({
+        required this.accountancy,
+        required this.cacotrophic,
+        required this.contest,
+        required this.couthily,
+        required this.falculate,
+        required this.foreseize,
+        required this.hyades,
+        required this.lemnad,
+        required this.monotheistically,
+        required this.nonflying,
+        required this.ptenoglossa,
+        required this.repatch,
+        required this.rodman,
+        required this.strung,
+        required this.titmal,
+        required this.twalpennyworth,
+        required this.unblamable,
+        required this.vertical,
+        required this.whiggification,
+        required this.yardman,
+    });
+
+    RewriteClass copyWith({
+        dynamic accountancy,
+        dynamic cacotrophic,
+        dynamic contest,
+        dynamic couthily,
+        dynamic falculate,
+        dynamic foreseize,
+        dynamic hyades,
+        dynamic lemnad,
+        dynamic monotheistically,
+        dynamic nonflying,
+        dynamic ptenoglossa,
+        dynamic repatch,
+        dynamic rodman,
+        dynamic strung,
+        dynamic titmal,
+        dynamic twalpennyworth,
+        dynamic unblamable,
+        dynamic vertical,
+        dynamic whiggification,
+        dynamic yardman,
+    }) => 
+        RewriteClass(
+            accountancy: accountancy ?? this.accountancy,
+            cacotrophic: cacotrophic ?? this.cacotrophic,
+            contest: contest ?? this.contest,
+            couthily: couthily ?? this.couthily,
+            falculate: falculate ?? this.falculate,
+            foreseize: foreseize ?? this.foreseize,
+            hyades: hyades ?? this.hyades,
+            lemnad: lemnad ?? this.lemnad,
+            monotheistically: monotheistically ?? this.monotheistically,
+            nonflying: nonflying ?? this.nonflying,
+            ptenoglossa: ptenoglossa ?? this.ptenoglossa,
+            repatch: repatch ?? this.repatch,
+            rodman: rodman ?? this.rodman,
+            strung: strung ?? this.strung,
+            titmal: titmal ?? this.titmal,
+            twalpennyworth: twalpennyworth ?? this.twalpennyworth,
+            unblamable: unblamable ?? this.unblamable,
+            vertical: vertical ?? this.vertical,
+            whiggification: whiggification ?? this.whiggification,
+            yardman: yardman ?? this.yardman,
+        );
+
+    factory RewriteClass.fromJson(Map<String, dynamic> json) => RewriteClass(
+        accountancy: (json.containsKey("accountancy") ? json["accountancy"] : throw FormatException('Missing required property')),
+        cacotrophic: (json.containsKey("cacotrophic") ? json["cacotrophic"] : throw FormatException('Missing required property')),
+        contest: (json.containsKey("contest") ? json["contest"] : throw FormatException('Missing required property')),
+        couthily: (json.containsKey("couthily") ? json["couthily"] : throw FormatException('Missing required property')),
+        falculate: (json.containsKey("falculate") ? json["falculate"] : throw FormatException('Missing required property')),
+        foreseize: (json.containsKey("foreseize") ? json["foreseize"] : throw FormatException('Missing required property')),
+        hyades: (json.containsKey("Hyades") ? json["Hyades"] : throw FormatException('Missing required property')),
+        lemnad: (json.containsKey("lemnad") ? json["lemnad"] : throw FormatException('Missing required property')),
+        monotheistically: (json.containsKey("monotheistically") ? json["monotheistically"] : throw FormatException('Missing required property')),
+        nonflying: (json.containsKey("nonflying") ? json["nonflying"] : throw FormatException('Missing required property')),
+        ptenoglossa: (json.containsKey("Ptenoglossa") ? json["Ptenoglossa"] : throw FormatException('Missing required property')),
+        repatch: (json.containsKey("repatch") ? json["repatch"] : throw FormatException('Missing required property')),
+        rodman: (json.containsKey("rodman") ? json["rodman"] : throw FormatException('Missing required property')),
+        strung: (json.containsKey("strung") ? json["strung"] : throw FormatException('Missing required property')),
+        titmal: (json.containsKey("titmal") ? json["titmal"] : throw FormatException('Missing required property')),
+        twalpennyworth: (json.containsKey("twalpennyworth") ? json["twalpennyworth"] : throw FormatException('Missing required property')),
+        unblamable: (json.containsKey("unblamable") ? json["unblamable"] : throw FormatException('Missing required property')),
+        vertical: (json.containsKey("vertical") ? json["vertical"] : throw FormatException('Missing required property')),
+        whiggification: (json.containsKey("Whiggification") ? json["Whiggification"] : throw FormatException('Missing required property')),
+        yardman: (json.containsKey("yardman") ? json["yardman"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "accountancy": accountancy,
+        "cacotrophic": cacotrophic,
+        "contest": contest,
+        "couthily": couthily,
+        "falculate": falculate,
+        "foreseize": foreseize,
+        "Hyades": hyades,
+        "lemnad": lemnad,
+        "monotheistically": monotheistically,
+        "nonflying": nonflying,
+        "Ptenoglossa": ptenoglossa,
+        "repatch": repatch,
+        "rodman": rodman,
+        "strung": strung,
+        "titmal": titmal,
+        "twalpennyworth": twalpennyworth,
+        "unblamable": unblamable,
+        "vertical": vertical,
+        "Whiggification": whiggification,
+        "yardman": yardman,
+    };
+}
+
+class SantirClass {
+    final dynamic admiredly;
+    final dynamic demicaponier;
+    final dynamic epitympanic;
+    final dynamic investitor;
+    final dynamic lupiform;
+    final dynamic monoflagellate;
+    final dynamic paleoethnic;
+    final dynamic prediscountable;
+    final dynamic rhetoricals;
+    final dynamic roomth;
+    final dynamic saccharose;
+    final dynamic septonasal;
+    final dynamic serpenticide;
+    final dynamic setarious;
+    final dynamic spaework;
+    final dynamic stylite;
+    final dynamic suessiones;
+    final dynamic timelily;
+    final dynamic unprofaned;
+    final dynamic vorticular;
+
+    SantirClass({
+        required this.admiredly,
+        required this.demicaponier,
+        required this.epitympanic,
+        required this.investitor,
+        required this.lupiform,
+        required this.monoflagellate,
+        required this.paleoethnic,
+        required this.prediscountable,
+        required this.rhetoricals,
+        required this.roomth,
+        required this.saccharose,
+        required this.septonasal,
+        required this.serpenticide,
+        required this.setarious,
+        required this.spaework,
+        required this.stylite,
+        required this.suessiones,
+        required this.timelily,
+        required this.unprofaned,
+        required this.vorticular,
+    });
+
+    SantirClass copyWith({
+        dynamic admiredly,
+        dynamic demicaponier,
+        dynamic epitympanic,
+        dynamic investitor,
+        dynamic lupiform,
+        dynamic monoflagellate,
+        dynamic paleoethnic,
+        dynamic prediscountable,
+        dynamic rhetoricals,
+        dynamic roomth,
+        dynamic saccharose,
+        dynamic septonasal,
+        dynamic serpenticide,
+        dynamic setarious,
+        dynamic spaework,
+        dynamic stylite,
+        dynamic suessiones,
+        dynamic timelily,
+        dynamic unprofaned,
+        dynamic vorticular,
+    }) => 
+        SantirClass(
+            admiredly: admiredly ?? this.admiredly,
+            demicaponier: demicaponier ?? this.demicaponier,
+            epitympanic: epitympanic ?? this.epitympanic,
+            investitor: investitor ?? this.investitor,
+            lupiform: lupiform ?? this.lupiform,
+            monoflagellate: monoflagellate ?? this.monoflagellate,
+            paleoethnic: paleoethnic ?? this.paleoethnic,
+            prediscountable: prediscountable ?? this.prediscountable,
+            rhetoricals: rhetoricals ?? this.rhetoricals,
+            roomth: roomth ?? this.roomth,
+            saccharose: saccharose ?? this.saccharose,
+            septonasal: septonasal ?? this.septonasal,
+            serpenticide: serpenticide ?? this.serpenticide,
+            setarious: setarious ?? this.setarious,
+            spaework: spaework ?? this.spaework,
+            stylite: stylite ?? this.stylite,
+            suessiones: suessiones ?? this.suessiones,
+            timelily: timelily ?? this.timelily,
+            unprofaned: unprofaned ?? this.unprofaned,
+            vorticular: vorticular ?? this.vorticular,
+        );
+
+    factory SantirClass.fromJson(Map<String, dynamic> json) => SantirClass(
+        admiredly: (json.containsKey("admiredly") ? json["admiredly"] : throw FormatException('Missing required property')),
+        demicaponier: (json.containsKey("demicaponier") ? json["demicaponier"] : throw FormatException('Missing required property')),
+        epitympanic: (json.containsKey("epitympanic") ? json["epitympanic"] : throw FormatException('Missing required property')),
+        investitor: (json.containsKey("investitor") ? json["investitor"] : throw FormatException('Missing required property')),
+        lupiform: (json.containsKey("lupiform") ? json["lupiform"] : throw FormatException('Missing required property')),
+        monoflagellate: (json.containsKey("monoflagellate") ? json["monoflagellate"] : throw FormatException('Missing required property')),
+        paleoethnic: (json.containsKey("paleoethnic") ? json["paleoethnic"] : throw FormatException('Missing required property')),
+        prediscountable: (json.containsKey("prediscountable") ? json["prediscountable"] : throw FormatException('Missing required property')),
+        rhetoricals: (json.containsKey("rhetoricals") ? json["rhetoricals"] : throw FormatException('Missing required property')),
+        roomth: (json.containsKey("roomth") ? json["roomth"] : throw FormatException('Missing required property')),
+        saccharose: (json.containsKey("saccharose") ? json["saccharose"] : throw FormatException('Missing required property')),
+        septonasal: (json.containsKey("septonasal") ? json["septonasal"] : throw FormatException('Missing required property')),
+        serpenticide: (json.containsKey("serpenticide") ? json["serpenticide"] : throw FormatException('Missing required property')),
+        setarious: (json.containsKey("setarious") ? json["setarious"] : throw FormatException('Missing required property')),
+        spaework: (json.containsKey("spaework") ? json["spaework"] : throw FormatException('Missing required property')),
+        stylite: (json.containsKey("stylite") ? json["stylite"] : throw FormatException('Missing required property')),
+        suessiones: (json.containsKey("Suessiones") ? json["Suessiones"] : throw FormatException('Missing required property')),
+        timelily: (json.containsKey("timelily") ? json["timelily"] : throw FormatException('Missing required property')),
+        unprofaned: (json.containsKey("unprofaned") ? json["unprofaned"] : throw FormatException('Missing required property')),
+        vorticular: (json.containsKey("vorticular") ? json["vorticular"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "admiredly": admiredly,
+        "demicaponier": demicaponier,
+        "epitympanic": epitympanic,
+        "investitor": investitor,
+        "lupiform": lupiform,
+        "monoflagellate": monoflagellate,
+        "paleoethnic": paleoethnic,
+        "prediscountable": prediscountable,
+        "rhetoricals": rhetoricals,
+        "roomth": roomth,
+        "saccharose": saccharose,
+        "septonasal": septonasal,
+        "serpenticide": serpenticide,
+        "setarious": setarious,
+        "spaework": spaework,
+        "stylite": stylite,
+        "Suessiones": suessiones,
+        "timelily": timelily,
+        "unprofaned": unprofaned,
+        "vorticular": vorticular,
+    };
+}
+
+class SaxtenClass {
+    final dynamic algarrobilla;
+    final dynamic bowgrace;
+    final double? catharticalness;
+    final dynamic centaurid;
+    final int? chirotherium;
+    final String? disdiapason;
+    final dynamic flix;
+    final dynamic germanely;
+    final bool? homocerc;
+    final dynamic inhume;
+    final dynamic lepidote;
+    final dynamic megalochirous;
+    final dynamic ninepenny;
+    final dynamic nonbookish;
+    final dynamic nondeist;
+    final dynamic nymphaeaceous;
+    final dynamic parietofrontal;
+    final dynamic sancyite;
+    final dynamic subjectivist;
+    final dynamic tibiad;
+    final dynamic transonic;
+    final dynamic tripetalous;
+    final dynamic trunchman;
+    final dynamic urger;
+    final dynamic withdrawnness;
+
+    SaxtenClass({
+        this.algarrobilla,
+        this.bowgrace,
+        this.catharticalness,
+        this.centaurid,
+        this.chirotherium,
+        this.disdiapason,
+        this.flix,
+        this.germanely,
+        this.homocerc,
+        this.inhume,
+        this.lepidote,
+        this.megalochirous,
+        this.ninepenny,
+        this.nonbookish,
+        this.nondeist,
+        this.nymphaeaceous,
+        this.parietofrontal,
+        this.sancyite,
+        this.subjectivist,
+        this.tibiad,
+        this.transonic,
+        this.tripetalous,
+        this.trunchman,
+        this.urger,
+        this.withdrawnness,
+    });
+
+    SaxtenClass copyWith({
+        dynamic algarrobilla,
+        dynamic bowgrace,
+        double? catharticalness,
+        dynamic centaurid,
+        int? chirotherium,
+        String? disdiapason,
+        dynamic flix,
+        dynamic germanely,
+        bool? homocerc,
+        dynamic inhume,
+        dynamic lepidote,
+        dynamic megalochirous,
+        dynamic ninepenny,
+        dynamic nonbookish,
+        dynamic nondeist,
+        dynamic nymphaeaceous,
+        dynamic parietofrontal,
+        dynamic sancyite,
+        dynamic subjectivist,
+        dynamic tibiad,
+        dynamic transonic,
+        dynamic tripetalous,
+        dynamic trunchman,
+        dynamic urger,
+        dynamic withdrawnness,
+    }) => 
+        SaxtenClass(
+            algarrobilla: algarrobilla ?? this.algarrobilla,
+            bowgrace: bowgrace ?? this.bowgrace,
+            catharticalness: catharticalness ?? this.catharticalness,
+            centaurid: centaurid ?? this.centaurid,
+            chirotherium: chirotherium ?? this.chirotherium,
+            disdiapason: disdiapason ?? this.disdiapason,
+            flix: flix ?? this.flix,
+            germanely: germanely ?? this.germanely,
+            homocerc: homocerc ?? this.homocerc,
+            inhume: inhume ?? this.inhume,
+            lepidote: lepidote ?? this.lepidote,
+            megalochirous: megalochirous ?? this.megalochirous,
+            ninepenny: ninepenny ?? this.ninepenny,
+            nonbookish: nonbookish ?? this.nonbookish,
+            nondeist: nondeist ?? this.nondeist,
+            nymphaeaceous: nymphaeaceous ?? this.nymphaeaceous,
+            parietofrontal: parietofrontal ?? this.parietofrontal,
+            sancyite: sancyite ?? this.sancyite,
+            subjectivist: subjectivist ?? this.subjectivist,
+            tibiad: tibiad ?? this.tibiad,
+            transonic: transonic ?? this.transonic,
+            tripetalous: tripetalous ?? this.tripetalous,
+            trunchman: trunchman ?? this.trunchman,
+            urger: urger ?? this.urger,
+            withdrawnness: withdrawnness ?? this.withdrawnness,
+        );
+
+    factory SaxtenClass.fromJson(Map<String, dynamic> json) => SaxtenClass(
+        algarrobilla: json["algarrobilla"],
+        bowgrace: json["bowgrace"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        centaurid: json["Centaurid"],
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        flix: json["flix"],
+        germanely: json["germanely"],
+        homocerc: json["homocerc"],
+        inhume: json["inhume"],
+        lepidote: json["lepidote"],
+        megalochirous: json["megalochirous"],
+        ninepenny: json["ninepenny"],
+        nonbookish: json["nonbookish"],
+        nondeist: json["nondeist"],
+        nymphaeaceous: json["nymphaeaceous"],
+        parietofrontal: json["parietofrontal"],
+        sancyite: json["sancyite"],
+        subjectivist: json["subjectivist"],
+        tibiad: json["tibiad"],
+        transonic: json["transonic"],
+        tripetalous: json["tripetalous"],
+        trunchman: json["trunchman"],
+        urger: json["urger"],
+        withdrawnness: json["withdrawnness"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "algarrobilla": algarrobilla,
+        "bowgrace": bowgrace,
+        "catharticalness": catharticalness,
+        "Centaurid": centaurid,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "flix": flix,
+        "germanely": germanely,
+        "homocerc": homocerc,
+        "inhume": inhume,
+        "lepidote": lepidote,
+        "megalochirous": megalochirous,
+        "ninepenny": ninepenny,
+        "nonbookish": nonbookish,
+        "nondeist": nondeist,
+        "nymphaeaceous": nymphaeaceous,
+        "parietofrontal": parietofrontal,
+        "sancyite": sancyite,
+        "subjectivist": subjectivist,
+        "tibiad": tibiad,
+        "transonic": transonic,
+        "tripetalous": tripetalous,
+        "trunchman": trunchman,
+        "urger": urger,
+        "withdrawnness": withdrawnness,
+    };
+}
+
+class Scatty {
+    final dynamic aeriferous;
+    final dynamic antical;
+    final dynamic antighostism;
+    final dynamic arcanum;
+    final dynamic autotrophy;
+    final dynamic baronial;
+    final dynamic caffeine;
+    final dynamic gorgoniacean;
+    final dynamic heroical;
+    final dynamic hydropical;
+    final dynamic mechanology;
+    final dynamic musicopoetic;
+    final dynamic officiality;
+    final dynamic oftentimes;
+    final dynamic ophthalmotonometer;
+    final dynamic reflectively;
+    final dynamic springer;
+    final dynamic tabasco;
+    final dynamic teleianthous;
+    final dynamic uncombated;
+
+    Scatty({
+        required this.aeriferous,
+        required this.antical,
+        required this.antighostism,
+        required this.arcanum,
+        required this.autotrophy,
+        required this.baronial,
+        required this.caffeine,
+        required this.gorgoniacean,
+        required this.heroical,
+        required this.hydropical,
+        required this.mechanology,
+        required this.musicopoetic,
+        required this.officiality,
+        required this.oftentimes,
+        required this.ophthalmotonometer,
+        required this.reflectively,
+        required this.springer,
+        required this.tabasco,
+        required this.teleianthous,
+        required this.uncombated,
+    });
+
+    Scatty copyWith({
+        dynamic aeriferous,
+        dynamic antical,
+        dynamic antighostism,
+        dynamic arcanum,
+        dynamic autotrophy,
+        dynamic baronial,
+        dynamic caffeine,
+        dynamic gorgoniacean,
+        dynamic heroical,
+        dynamic hydropical,
+        dynamic mechanology,
+        dynamic musicopoetic,
+        dynamic officiality,
+        dynamic oftentimes,
+        dynamic ophthalmotonometer,
+        dynamic reflectively,
+        dynamic springer,
+        dynamic tabasco,
+        dynamic teleianthous,
+        dynamic uncombated,
+    }) => 
+        Scatty(
+            aeriferous: aeriferous ?? this.aeriferous,
+            antical: antical ?? this.antical,
+            antighostism: antighostism ?? this.antighostism,
+            arcanum: arcanum ?? this.arcanum,
+            autotrophy: autotrophy ?? this.autotrophy,
+            baronial: baronial ?? this.baronial,
+            caffeine: caffeine ?? this.caffeine,
+            gorgoniacean: gorgoniacean ?? this.gorgoniacean,
+            heroical: heroical ?? this.heroical,
+            hydropical: hydropical ?? this.hydropical,
+            mechanology: mechanology ?? this.mechanology,
+            musicopoetic: musicopoetic ?? this.musicopoetic,
+            officiality: officiality ?? this.officiality,
+            oftentimes: oftentimes ?? this.oftentimes,
+            ophthalmotonometer: ophthalmotonometer ?? this.ophthalmotonometer,
+            reflectively: reflectively ?? this.reflectively,
+            springer: springer ?? this.springer,
+            tabasco: tabasco ?? this.tabasco,
+            teleianthous: teleianthous ?? this.teleianthous,
+            uncombated: uncombated ?? this.uncombated,
+        );
+
+    factory Scatty.fromJson(Map<String, dynamic> json) => Scatty(
+        aeriferous: (json.containsKey("aeriferous") ? json["aeriferous"] : throw FormatException('Missing required property')),
+        antical: (json.containsKey("antical") ? json["antical"] : throw FormatException('Missing required property')),
+        antighostism: (json.containsKey("antighostism") ? json["antighostism"] : throw FormatException('Missing required property')),
+        arcanum: (json.containsKey("arcanum") ? json["arcanum"] : throw FormatException('Missing required property')),
+        autotrophy: (json.containsKey("autotrophy") ? json["autotrophy"] : throw FormatException('Missing required property')),
+        baronial: (json.containsKey("baronial") ? json["baronial"] : throw FormatException('Missing required property')),
+        caffeine: (json.containsKey("caffeine") ? json["caffeine"] : throw FormatException('Missing required property')),
+        gorgoniacean: (json.containsKey("gorgoniacean") ? json["gorgoniacean"] : throw FormatException('Missing required property')),
+        heroical: (json.containsKey("heroical") ? json["heroical"] : throw FormatException('Missing required property')),
+        hydropical: (json.containsKey("hydropical") ? json["hydropical"] : throw FormatException('Missing required property')),
+        mechanology: (json.containsKey("mechanology") ? json["mechanology"] : throw FormatException('Missing required property')),
+        musicopoetic: (json.containsKey("musicopoetic") ? json["musicopoetic"] : throw FormatException('Missing required property')),
+        officiality: (json.containsKey("officiality") ? json["officiality"] : throw FormatException('Missing required property')),
+        oftentimes: (json.containsKey("oftentimes") ? json["oftentimes"] : throw FormatException('Missing required property')),
+        ophthalmotonometer: (json.containsKey("ophthalmotonometer") ? json["ophthalmotonometer"] : throw FormatException('Missing required property')),
+        reflectively: (json.containsKey("reflectively") ? json["reflectively"] : throw FormatException('Missing required property')),
+        springer: (json.containsKey("springer") ? json["springer"] : throw FormatException('Missing required property')),
+        tabasco: (json.containsKey("Tabasco") ? json["Tabasco"] : throw FormatException('Missing required property')),
+        teleianthous: (json.containsKey("teleianthous") ? json["teleianthous"] : throw FormatException('Missing required property')),
+        uncombated: (json.containsKey("uncombated") ? json["uncombated"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "aeriferous": aeriferous,
+        "antical": antical,
+        "antighostism": antighostism,
+        "arcanum": arcanum,
+        "autotrophy": autotrophy,
+        "baronial": baronial,
+        "caffeine": caffeine,
+        "gorgoniacean": gorgoniacean,
+        "heroical": heroical,
+        "hydropical": hydropical,
+        "mechanology": mechanology,
+        "musicopoetic": musicopoetic,
+        "officiality": officiality,
+        "oftentimes": oftentimes,
+        "ophthalmotonometer": ophthalmotonometer,
+        "reflectively": reflectively,
+        "springer": springer,
+        "Tabasco": tabasco,
+        "teleianthous": teleianthous,
+        "uncombated": uncombated,
+    };
+}
+
+class SisteringClass {
+    final dynamic amphicarpic;
+    final dynamic chianti;
+    final dynamic frigorific;
+    final dynamic haplomi;
+    final dynamic hyperkinesis;
+    final dynamic laudable;
+    final dynamic madwoman;
+    final dynamic maimedly;
+    final dynamic micropterygidae;
+    final dynamic microrhabdus;
+    final dynamic nondense;
+    final dynamic phlebemphraxis;
+    final dynamic redsear;
+    final dynamic schismatical;
+    final dynamic tartryl;
+    final dynamic unabhorred;
+    final dynamic undeliberateness;
+    final dynamic unmixable;
+    final dynamic untruckling;
+    final dynamic vineal;
+
+    SisteringClass({
+        required this.amphicarpic,
+        required this.chianti,
+        required this.frigorific,
+        required this.haplomi,
+        required this.hyperkinesis,
+        required this.laudable,
+        required this.madwoman,
+        required this.maimedly,
+        required this.micropterygidae,
+        required this.microrhabdus,
+        required this.nondense,
+        required this.phlebemphraxis,
+        required this.redsear,
+        required this.schismatical,
+        required this.tartryl,
+        required this.unabhorred,
+        required this.undeliberateness,
+        required this.unmixable,
+        required this.untruckling,
+        required this.vineal,
+    });
+
+    SisteringClass copyWith({
+        dynamic amphicarpic,
+        dynamic chianti,
+        dynamic frigorific,
+        dynamic haplomi,
+        dynamic hyperkinesis,
+        dynamic laudable,
+        dynamic madwoman,
+        dynamic maimedly,
+        dynamic micropterygidae,
+        dynamic microrhabdus,
+        dynamic nondense,
+        dynamic phlebemphraxis,
+        dynamic redsear,
+        dynamic schismatical,
+        dynamic tartryl,
+        dynamic unabhorred,
+        dynamic undeliberateness,
+        dynamic unmixable,
+        dynamic untruckling,
+        dynamic vineal,
+    }) => 
+        SisteringClass(
+            amphicarpic: amphicarpic ?? this.amphicarpic,
+            chianti: chianti ?? this.chianti,
+            frigorific: frigorific ?? this.frigorific,
+            haplomi: haplomi ?? this.haplomi,
+            hyperkinesis: hyperkinesis ?? this.hyperkinesis,
+            laudable: laudable ?? this.laudable,
+            madwoman: madwoman ?? this.madwoman,
+            maimedly: maimedly ?? this.maimedly,
+            micropterygidae: micropterygidae ?? this.micropterygidae,
+            microrhabdus: microrhabdus ?? this.microrhabdus,
+            nondense: nondense ?? this.nondense,
+            phlebemphraxis: phlebemphraxis ?? this.phlebemphraxis,
+            redsear: redsear ?? this.redsear,
+            schismatical: schismatical ?? this.schismatical,
+            tartryl: tartryl ?? this.tartryl,
+            unabhorred: unabhorred ?? this.unabhorred,
+            undeliberateness: undeliberateness ?? this.undeliberateness,
+            unmixable: unmixable ?? this.unmixable,
+            untruckling: untruckling ?? this.untruckling,
+            vineal: vineal ?? this.vineal,
+        );
+
+    factory SisteringClass.fromJson(Map<String, dynamic> json) => SisteringClass(
+        amphicarpic: (json.containsKey("amphicarpic") ? json["amphicarpic"] : throw FormatException('Missing required property')),
+        chianti: (json.containsKey("Chianti") ? json["Chianti"] : throw FormatException('Missing required property')),
+        frigorific: (json.containsKey("frigorific") ? json["frigorific"] : throw FormatException('Missing required property')),
+        haplomi: (json.containsKey("Haplomi") ? json["Haplomi"] : throw FormatException('Missing required property')),
+        hyperkinesis: (json.containsKey("hyperkinesis") ? json["hyperkinesis"] : throw FormatException('Missing required property')),
+        laudable: (json.containsKey("laudable") ? json["laudable"] : throw FormatException('Missing required property')),
+        madwoman: (json.containsKey("madwoman") ? json["madwoman"] : throw FormatException('Missing required property')),
+        maimedly: (json.containsKey("maimedly") ? json["maimedly"] : throw FormatException('Missing required property')),
+        micropterygidae: (json.containsKey("Micropterygidae") ? json["Micropterygidae"] : throw FormatException('Missing required property')),
+        microrhabdus: (json.containsKey("microrhabdus") ? json["microrhabdus"] : throw FormatException('Missing required property')),
+        nondense: (json.containsKey("nondense") ? json["nondense"] : throw FormatException('Missing required property')),
+        phlebemphraxis: (json.containsKey("phlebemphraxis") ? json["phlebemphraxis"] : throw FormatException('Missing required property')),
+        redsear: (json.containsKey("redsear") ? json["redsear"] : throw FormatException('Missing required property')),
+        schismatical: (json.containsKey("schismatical") ? json["schismatical"] : throw FormatException('Missing required property')),
+        tartryl: (json.containsKey("tartryl") ? json["tartryl"] : throw FormatException('Missing required property')),
+        unabhorred: (json.containsKey("unabhorred") ? json["unabhorred"] : throw FormatException('Missing required property')),
+        undeliberateness: (json.containsKey("undeliberateness") ? json["undeliberateness"] : throw FormatException('Missing required property')),
+        unmixable: (json.containsKey("unmixable") ? json["unmixable"] : throw FormatException('Missing required property')),
+        untruckling: (json.containsKey("untruckling") ? json["untruckling"] : throw FormatException('Missing required property')),
+        vineal: (json.containsKey("vineal") ? json["vineal"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "amphicarpic": amphicarpic,
+        "Chianti": chianti,
+        "frigorific": frigorific,
+        "Haplomi": haplomi,
+        "hyperkinesis": hyperkinesis,
+        "laudable": laudable,
+        "madwoman": madwoman,
+        "maimedly": maimedly,
+        "Micropterygidae": micropterygidae,
+        "microrhabdus": microrhabdus,
+        "nondense": nondense,
+        "phlebemphraxis": phlebemphraxis,
+        "redsear": redsear,
+        "schismatical": schismatical,
+        "tartryl": tartryl,
+        "unabhorred": unabhorred,
+        "undeliberateness": undeliberateness,
+        "unmixable": unmixable,
+        "untruckling": untruckling,
+        "vineal": vineal,
+    };
+}
+
+class Staghunting {
+    final int? calorimetric;
+    final int? canid;
+    final double? catharticalness;
+    final int? chirotherium;
+    final String? disdiapason;
+    final int? ditriglyphic;
+    final int? floriferousness;
+    final int? gamelike;
+    final int? grig;
+    final bool? homocerc;
+    final int? interloan;
+    final int? lithotomy;
+    final int? loric;
+    final int? membranocoriaceous;
+    final int? membranogenic;
+    final dynamic nonbookish;
+    final int? overtrump;
+    final int? scotino;
+    final int? seasonable;
+    final int? sephen;
+    final int? stigmarioid;
+    final int? tired;
+    final int? trifid;
+    final int? undefeatedly;
+    final int? ungirlish;
+
+    Staghunting({
+        this.calorimetric,
+        this.canid,
+        this.catharticalness,
+        this.chirotherium,
+        this.disdiapason,
+        this.ditriglyphic,
+        this.floriferousness,
+        this.gamelike,
+        this.grig,
+        this.homocerc,
+        this.interloan,
+        this.lithotomy,
+        this.loric,
+        this.membranocoriaceous,
+        this.membranogenic,
+        this.nonbookish,
+        this.overtrump,
+        this.scotino,
+        this.seasonable,
+        this.sephen,
+        this.stigmarioid,
+        this.tired,
+        this.trifid,
+        this.undefeatedly,
+        this.ungirlish,
+    });
+
+    Staghunting copyWith({
+        int? calorimetric,
+        int? canid,
+        double? catharticalness,
+        int? chirotherium,
+        String? disdiapason,
+        int? ditriglyphic,
+        int? floriferousness,
+        int? gamelike,
+        int? grig,
+        bool? homocerc,
+        int? interloan,
+        int? lithotomy,
+        int? loric,
+        int? membranocoriaceous,
+        int? membranogenic,
+        dynamic nonbookish,
+        int? overtrump,
+        int? scotino,
+        int? seasonable,
+        int? sephen,
+        int? stigmarioid,
+        int? tired,
+        int? trifid,
+        int? undefeatedly,
+        int? ungirlish,
+    }) => 
+        Staghunting(
+            calorimetric: calorimetric ?? this.calorimetric,
+            canid: canid ?? this.canid,
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            disdiapason: disdiapason ?? this.disdiapason,
+            ditriglyphic: ditriglyphic ?? this.ditriglyphic,
+            floriferousness: floriferousness ?? this.floriferousness,
+            gamelike: gamelike ?? this.gamelike,
+            grig: grig ?? this.grig,
+            homocerc: homocerc ?? this.homocerc,
+            interloan: interloan ?? this.interloan,
+            lithotomy: lithotomy ?? this.lithotomy,
+            loric: loric ?? this.loric,
+            membranocoriaceous: membranocoriaceous ?? this.membranocoriaceous,
+            membranogenic: membranogenic ?? this.membranogenic,
+            nonbookish: nonbookish ?? this.nonbookish,
+            overtrump: overtrump ?? this.overtrump,
+            scotino: scotino ?? this.scotino,
+            seasonable: seasonable ?? this.seasonable,
+            sephen: sephen ?? this.sephen,
+            stigmarioid: stigmarioid ?? this.stigmarioid,
+            tired: tired ?? this.tired,
+            trifid: trifid ?? this.trifid,
+            undefeatedly: undefeatedly ?? this.undefeatedly,
+            ungirlish: ungirlish ?? this.ungirlish,
+        );
+
+    factory Staghunting.fromJson(Map<String, dynamic> json) => Staghunting(
+        calorimetric: json["calorimetric"],
+        canid: json["canid"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        ditriglyphic: json["ditriglyphic"],
+        floriferousness: json["floriferousness"],
+        gamelike: json["gamelike"],
+        grig: json["grig"],
+        homocerc: json["homocerc"],
+        interloan: json["interloan"],
+        lithotomy: json["lithotomy"],
+        loric: json["loric"],
+        membranocoriaceous: json["membranocoriaceous"],
+        membranogenic: json["membranogenic"],
+        nonbookish: json["nonbookish"],
+        overtrump: json["overtrump"],
+        scotino: json["scotino"],
+        seasonable: json["seasonable"],
+        sephen: json["sephen"],
+        stigmarioid: json["stigmarioid"],
+        tired: json["tired"],
+        trifid: json["trifid"],
+        undefeatedly: json["undefeatedly"],
+        ungirlish: json["ungirlish"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "calorimetric": calorimetric,
+        "canid": canid,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "ditriglyphic": ditriglyphic,
+        "floriferousness": floriferousness,
+        "gamelike": gamelike,
+        "grig": grig,
+        "homocerc": homocerc,
+        "interloan": interloan,
+        "lithotomy": lithotomy,
+        "loric": loric,
+        "membranocoriaceous": membranocoriaceous,
+        "membranogenic": membranogenic,
+        "nonbookish": nonbookish,
+        "overtrump": overtrump,
+        "scotino": scotino,
+        "seasonable": seasonable,
+        "sephen": sephen,
+        "stigmarioid": stigmarioid,
+        "tired": tired,
+        "trifid": trifid,
+        "undefeatedly": undefeatedly,
+        "ungirlish": ungirlish,
+    };
+}
+
+class StrenuosityClass {
+    final int? bliss;
+    final int? buccate;
+    final int? bulletproof;
+    final double? catharticalness;
+    final int? chirotherium;
+    final int? crumblingness;
+    final String? disdiapason;
+    final int? engagedly;
+    final int? fightable;
+    final int? hoariness;
+    final bool? homocerc;
+    final int? hypopodium;
+    final int? luxurist;
+    final int? mechanician;
+    final dynamic nonbookish;
+    final int? onopordon;
+    final int? podgily;
+    final int? reformableness;
+    final int? scatterbrains;
+    final int? seminuria;
+    final int? sodomite;
+    final int? tramp;
+    final int? undueness;
+    final int? worthily;
+    final int? yankeeist;
+
+    StrenuosityClass({
+        this.bliss,
+        this.buccate,
+        this.bulletproof,
+        this.catharticalness,
+        this.chirotherium,
+        this.crumblingness,
+        this.disdiapason,
+        this.engagedly,
+        this.fightable,
+        this.hoariness,
+        this.homocerc,
+        this.hypopodium,
+        this.luxurist,
+        this.mechanician,
+        this.nonbookish,
+        this.onopordon,
+        this.podgily,
+        this.reformableness,
+        this.scatterbrains,
+        this.seminuria,
+        this.sodomite,
+        this.tramp,
+        this.undueness,
+        this.worthily,
+        this.yankeeist,
+    });
+
+    StrenuosityClass copyWith({
+        int? bliss,
+        int? buccate,
+        int? bulletproof,
+        double? catharticalness,
+        int? chirotherium,
+        int? crumblingness,
+        String? disdiapason,
+        int? engagedly,
+        int? fightable,
+        int? hoariness,
+        bool? homocerc,
+        int? hypopodium,
+        int? luxurist,
+        int? mechanician,
+        dynamic nonbookish,
+        int? onopordon,
+        int? podgily,
+        int? reformableness,
+        int? scatterbrains,
+        int? seminuria,
+        int? sodomite,
+        int? tramp,
+        int? undueness,
+        int? worthily,
+        int? yankeeist,
+    }) => 
+        StrenuosityClass(
+            bliss: bliss ?? this.bliss,
+            buccate: buccate ?? this.buccate,
+            bulletproof: bulletproof ?? this.bulletproof,
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            crumblingness: crumblingness ?? this.crumblingness,
+            disdiapason: disdiapason ?? this.disdiapason,
+            engagedly: engagedly ?? this.engagedly,
+            fightable: fightable ?? this.fightable,
+            hoariness: hoariness ?? this.hoariness,
+            homocerc: homocerc ?? this.homocerc,
+            hypopodium: hypopodium ?? this.hypopodium,
+            luxurist: luxurist ?? this.luxurist,
+            mechanician: mechanician ?? this.mechanician,
+            nonbookish: nonbookish ?? this.nonbookish,
+            onopordon: onopordon ?? this.onopordon,
+            podgily: podgily ?? this.podgily,
+            reformableness: reformableness ?? this.reformableness,
+            scatterbrains: scatterbrains ?? this.scatterbrains,
+            seminuria: seminuria ?? this.seminuria,
+            sodomite: sodomite ?? this.sodomite,
+            tramp: tramp ?? this.tramp,
+            undueness: undueness ?? this.undueness,
+            worthily: worthily ?? this.worthily,
+            yankeeist: yankeeist ?? this.yankeeist,
+        );
+
+    factory StrenuosityClass.fromJson(Map<String, dynamic> json) => StrenuosityClass(
+        bliss: json["bliss"],
+        buccate: json["buccate"],
+        bulletproof: json["bulletproof"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        crumblingness: json["crumblingness"],
+        disdiapason: json["disdiapason"],
+        engagedly: json["engagedly"],
+        fightable: json["fightable"],
+        hoariness: json["hoariness"],
+        homocerc: json["homocerc"],
+        hypopodium: json["hypopodium"],
+        luxurist: json["luxurist"],
+        mechanician: json["mechanician"],
+        nonbookish: json["nonbookish"],
+        onopordon: json["Onopordon"],
+        podgily: json["podgily"],
+        reformableness: json["reformableness"],
+        scatterbrains: json["scatterbrains"],
+        seminuria: json["seminuria"],
+        sodomite: json["Sodomite"],
+        tramp: json["tramp"],
+        undueness: json["undueness"],
+        worthily: json["worthily"],
+        yankeeist: json["Yankeeist"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "bliss": bliss,
+        "buccate": buccate,
+        "bulletproof": bulletproof,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "crumblingness": crumblingness,
+        "disdiapason": disdiapason,
+        "engagedly": engagedly,
+        "fightable": fightable,
+        "hoariness": hoariness,
+        "homocerc": homocerc,
+        "hypopodium": hypopodium,
+        "luxurist": luxurist,
+        "mechanician": mechanician,
+        "nonbookish": nonbookish,
+        "Onopordon": onopordon,
+        "podgily": podgily,
+        "reformableness": reformableness,
+        "scatterbrains": scatterbrains,
+        "seminuria": seminuria,
+        "Sodomite": sodomite,
+        "tramp": tramp,
+        "undueness": undueness,
+        "worthily": worthily,
+        "Yankeeist": yankeeist,
+    };
+}
+
+class TruantcyClass {
+    final dynamic alfiona;
+    final dynamic ascaridiasis;
+    final dynamic bungey;
+    final double? catharticalness;
+    final dynamic ceroxyle;
+    final int? chirotherium;
+    final dynamic chorology;
+    final String? disdiapason;
+    final dynamic enmarble;
+    final dynamic epeira;
+    final dynamic eurylaimi;
+    final dynamic germination;
+    final dynamic hallelujah;
+    final bool? homocerc;
+    final dynamic lev;
+    final dynamic mouthing;
+    final dynamic nonbookish;
+    final dynamic philliloo;
+    final dynamic planetal;
+    final dynamic poney;
+    final dynamic punctualist;
+    final dynamic returnlessly;
+    final dynamic skelder;
+    final dynamic windwaywardly;
+    final dynamic yuman;
+
+    TruantcyClass({
+        this.alfiona,
+        this.ascaridiasis,
+        this.bungey,
+        this.catharticalness,
+        this.ceroxyle,
+        this.chirotherium,
+        this.chorology,
+        this.disdiapason,
+        this.enmarble,
+        this.epeira,
+        this.eurylaimi,
+        this.germination,
+        this.hallelujah,
+        this.homocerc,
+        this.lev,
+        this.mouthing,
+        this.nonbookish,
+        this.philliloo,
+        this.planetal,
+        this.poney,
+        this.punctualist,
+        this.returnlessly,
+        this.skelder,
+        this.windwaywardly,
+        this.yuman,
+    });
+
+    TruantcyClass copyWith({
+        dynamic alfiona,
+        dynamic ascaridiasis,
+        dynamic bungey,
+        double? catharticalness,
+        dynamic ceroxyle,
+        int? chirotherium,
+        dynamic chorology,
+        String? disdiapason,
+        dynamic enmarble,
+        dynamic epeira,
+        dynamic eurylaimi,
+        dynamic germination,
+        dynamic hallelujah,
+        bool? homocerc,
+        dynamic lev,
+        dynamic mouthing,
+        dynamic nonbookish,
+        dynamic philliloo,
+        dynamic planetal,
+        dynamic poney,
+        dynamic punctualist,
+        dynamic returnlessly,
+        dynamic skelder,
+        dynamic windwaywardly,
+        dynamic yuman,
+    }) => 
+        TruantcyClass(
+            alfiona: alfiona ?? this.alfiona,
+            ascaridiasis: ascaridiasis ?? this.ascaridiasis,
+            bungey: bungey ?? this.bungey,
+            catharticalness: catharticalness ?? this.catharticalness,
+            ceroxyle: ceroxyle ?? this.ceroxyle,
+            chirotherium: chirotherium ?? this.chirotherium,
+            chorology: chorology ?? this.chorology,
+            disdiapason: disdiapason ?? this.disdiapason,
+            enmarble: enmarble ?? this.enmarble,
+            epeira: epeira ?? this.epeira,
+            eurylaimi: eurylaimi ?? this.eurylaimi,
+            germination: germination ?? this.germination,
+            hallelujah: hallelujah ?? this.hallelujah,
+            homocerc: homocerc ?? this.homocerc,
+            lev: lev ?? this.lev,
+            mouthing: mouthing ?? this.mouthing,
+            nonbookish: nonbookish ?? this.nonbookish,
+            philliloo: philliloo ?? this.philliloo,
+            planetal: planetal ?? this.planetal,
+            poney: poney ?? this.poney,
+            punctualist: punctualist ?? this.punctualist,
+            returnlessly: returnlessly ?? this.returnlessly,
+            skelder: skelder ?? this.skelder,
+            windwaywardly: windwaywardly ?? this.windwaywardly,
+            yuman: yuman ?? this.yuman,
+        );
+
+    factory TruantcyClass.fromJson(Map<String, dynamic> json) => TruantcyClass(
+        alfiona: json["alfiona"],
+        ascaridiasis: json["ascaridiasis"],
+        bungey: json["bungey"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        ceroxyle: json["ceroxyle"],
+        chirotherium: json["Chirotherium"],
+        chorology: json["chorology"],
+        disdiapason: json["disdiapason"],
+        enmarble: json["enmarble"],
+        epeira: json["Epeira"],
+        eurylaimi: json["Eurylaimi"],
+        germination: json["germination"],
+        hallelujah: json["hallelujah"],
+        homocerc: json["homocerc"],
+        lev: json["lev"],
+        mouthing: json["mouthing"],
+        nonbookish: json["nonbookish"],
+        philliloo: json["philliloo"],
+        planetal: json["planetal"],
+        poney: json["poney"],
+        punctualist: json["punctualist"],
+        returnlessly: json["returnlessly"],
+        skelder: json["skelder"],
+        windwaywardly: json["windwaywardly"],
+        yuman: json["Yuman"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "alfiona": alfiona,
+        "ascaridiasis": ascaridiasis,
+        "bungey": bungey,
+        "catharticalness": catharticalness,
+        "ceroxyle": ceroxyle,
+        "Chirotherium": chirotherium,
+        "chorology": chorology,
+        "disdiapason": disdiapason,
+        "enmarble": enmarble,
+        "Epeira": epeira,
+        "Eurylaimi": eurylaimi,
+        "germination": germination,
+        "hallelujah": hallelujah,
+        "homocerc": homocerc,
+        "lev": lev,
+        "mouthing": mouthing,
+        "nonbookish": nonbookish,
+        "philliloo": philliloo,
+        "planetal": planetal,
+        "poney": poney,
+        "punctualist": punctualist,
+        "returnlessly": returnlessly,
+        "skelder": skelder,
+        "windwaywardly": windwaywardly,
+        "Yuman": yuman,
+    };
+}
+
+class UnimpeachablyClass {
+    final int? acerin;
+    final int? bobadil;
+    final double? catharticalness;
+    final int? chirotherium;
+    final int? chlorophylligenous;
+    final int? conversational;
+    final int? demiowl;
+    final String? disdiapason;
+    final int? ectorhinal;
+    final int? gamblesomeness;
+    final bool? homocerc;
+    final int? irrorate;
+    final int? kindergartening;
+    final int? lateritic;
+    final int? mespil;
+    final int? misconfiguration;
+    final dynamic nonbookish;
+    final int? planometry;
+    final int? quiina;
+    final int? robert;
+    final int? rot;
+    final int? subcinctorium;
+    final int? tussocker;
+    final int? ultraproud;
+    final int? unsuggestedness;
+
+    UnimpeachablyClass({
+        this.acerin,
+        this.bobadil,
+        this.catharticalness,
+        this.chirotherium,
+        this.chlorophylligenous,
+        this.conversational,
+        this.demiowl,
+        this.disdiapason,
+        this.ectorhinal,
+        this.gamblesomeness,
+        this.homocerc,
+        this.irrorate,
+        this.kindergartening,
+        this.lateritic,
+        this.mespil,
+        this.misconfiguration,
+        this.nonbookish,
+        this.planometry,
+        this.quiina,
+        this.robert,
+        this.rot,
+        this.subcinctorium,
+        this.tussocker,
+        this.ultraproud,
+        this.unsuggestedness,
+    });
+
+    UnimpeachablyClass copyWith({
+        int? acerin,
+        int? bobadil,
+        double? catharticalness,
+        int? chirotherium,
+        int? chlorophylligenous,
+        int? conversational,
+        int? demiowl,
+        String? disdiapason,
+        int? ectorhinal,
+        int? gamblesomeness,
+        bool? homocerc,
+        int? irrorate,
+        int? kindergartening,
+        int? lateritic,
+        int? mespil,
+        int? misconfiguration,
+        dynamic nonbookish,
+        int? planometry,
+        int? quiina,
+        int? robert,
+        int? rot,
+        int? subcinctorium,
+        int? tussocker,
+        int? ultraproud,
+        int? unsuggestedness,
+    }) => 
+        UnimpeachablyClass(
+            acerin: acerin ?? this.acerin,
+            bobadil: bobadil ?? this.bobadil,
+            catharticalness: catharticalness ?? this.catharticalness,
+            chirotherium: chirotherium ?? this.chirotherium,
+            chlorophylligenous: chlorophylligenous ?? this.chlorophylligenous,
+            conversational: conversational ?? this.conversational,
+            demiowl: demiowl ?? this.demiowl,
+            disdiapason: disdiapason ?? this.disdiapason,
+            ectorhinal: ectorhinal ?? this.ectorhinal,
+            gamblesomeness: gamblesomeness ?? this.gamblesomeness,
+            homocerc: homocerc ?? this.homocerc,
+            irrorate: irrorate ?? this.irrorate,
+            kindergartening: kindergartening ?? this.kindergartening,
+            lateritic: lateritic ?? this.lateritic,
+            mespil: mespil ?? this.mespil,
+            misconfiguration: misconfiguration ?? this.misconfiguration,
+            nonbookish: nonbookish ?? this.nonbookish,
+            planometry: planometry ?? this.planometry,
+            quiina: quiina ?? this.quiina,
+            robert: robert ?? this.robert,
+            rot: rot ?? this.rot,
+            subcinctorium: subcinctorium ?? this.subcinctorium,
+            tussocker: tussocker ?? this.tussocker,
+            ultraproud: ultraproud ?? this.ultraproud,
+            unsuggestedness: unsuggestedness ?? this.unsuggestedness,
+        );
+
+    factory UnimpeachablyClass.fromJson(Map<String, dynamic> json) => UnimpeachablyClass(
+        acerin: json["acerin"],
+        bobadil: json["Bobadil"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        chlorophylligenous: json["chlorophylligenous"],
+        conversational: json["conversational"],
+        demiowl: json["demiowl"],
+        disdiapason: json["disdiapason"],
+        ectorhinal: json["ectorhinal"],
+        gamblesomeness: json["gamblesomeness"],
+        homocerc: json["homocerc"],
+        irrorate: json["irrorate"],
+        kindergartening: json["kindergartening"],
+        lateritic: json["lateritic"],
+        mespil: json["mespil"],
+        misconfiguration: json["misconfiguration"],
+        nonbookish: json["nonbookish"],
+        planometry: json["planometry"],
+        quiina: json["Quiina"],
+        robert: json["Robert"],
+        rot: json["rot"],
+        subcinctorium: json["subcinctorium"],
+        tussocker: json["tussocker"],
+        ultraproud: json["ultraproud"],
+        unsuggestedness: json["unsuggestedness"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "acerin": acerin,
+        "Bobadil": bobadil,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "chlorophylligenous": chlorophylligenous,
+        "conversational": conversational,
+        "demiowl": demiowl,
+        "disdiapason": disdiapason,
+        "ectorhinal": ectorhinal,
+        "gamblesomeness": gamblesomeness,
+        "homocerc": homocerc,
+        "irrorate": irrorate,
+        "kindergartening": kindergartening,
+        "lateritic": lateritic,
+        "mespil": mespil,
+        "misconfiguration": misconfiguration,
+        "nonbookish": nonbookish,
+        "planometry": planometry,
+        "Quiina": quiina,
+        "Robert": robert,
+        "rot": rot,
+        "subcinctorium": subcinctorium,
+        "tussocker": tussocker,
+        "ultraproud": ultraproud,
+        "unsuggestedness": unsuggestedness,
+    };
+}
+
+class UnstressedClass {
+    final dynamic alain;
+    final dynamic amphirhina;
+    final dynamic antimachinery;
+    final dynamic coldish;
+    final dynamic crantara;
+    final dynamic distinguishing;
+    final dynamic elytroposis;
+    final dynamic gentianwort;
+    final dynamic heliosis;
+    final dynamic instrumental;
+    final dynamic introinflection;
+    final dynamic kala;
+    final dynamic lincolnian;
+    final dynamic metad;
+    final dynamic sarcophilus;
+    final dynamic swingingly;
+    final dynamic unconformity;
+    final dynamic undecreed;
+    final dynamic venerable;
+    final dynamic vowellessness;
+
+    UnstressedClass({
+        required this.alain,
+        required this.amphirhina,
+        required this.antimachinery,
+        required this.coldish,
+        required this.crantara,
+        required this.distinguishing,
+        required this.elytroposis,
+        required this.gentianwort,
+        required this.heliosis,
+        required this.instrumental,
+        required this.introinflection,
+        required this.kala,
+        required this.lincolnian,
+        required this.metad,
+        required this.sarcophilus,
+        required this.swingingly,
+        required this.unconformity,
+        required this.undecreed,
+        required this.venerable,
+        required this.vowellessness,
+    });
+
+    UnstressedClass copyWith({
+        dynamic alain,
+        dynamic amphirhina,
+        dynamic antimachinery,
+        dynamic coldish,
+        dynamic crantara,
+        dynamic distinguishing,
+        dynamic elytroposis,
+        dynamic gentianwort,
+        dynamic heliosis,
+        dynamic instrumental,
+        dynamic introinflection,
+        dynamic kala,
+        dynamic lincolnian,
+        dynamic metad,
+        dynamic sarcophilus,
+        dynamic swingingly,
+        dynamic unconformity,
+        dynamic undecreed,
+        dynamic venerable,
+        dynamic vowellessness,
+    }) => 
+        UnstressedClass(
+            alain: alain ?? this.alain,
+            amphirhina: amphirhina ?? this.amphirhina,
+            antimachinery: antimachinery ?? this.antimachinery,
+            coldish: coldish ?? this.coldish,
+            crantara: crantara ?? this.crantara,
+            distinguishing: distinguishing ?? this.distinguishing,
+            elytroposis: elytroposis ?? this.elytroposis,
+            gentianwort: gentianwort ?? this.gentianwort,
+            heliosis: heliosis ?? this.heliosis,
+            instrumental: instrumental ?? this.instrumental,
+            introinflection: introinflection ?? this.introinflection,
+            kala: kala ?? this.kala,
+            lincolnian: lincolnian ?? this.lincolnian,
+            metad: metad ?? this.metad,
+            sarcophilus: sarcophilus ?? this.sarcophilus,
+            swingingly: swingingly ?? this.swingingly,
+            unconformity: unconformity ?? this.unconformity,
+            undecreed: undecreed ?? this.undecreed,
+            venerable: venerable ?? this.venerable,
+            vowellessness: vowellessness ?? this.vowellessness,
+        );
+
+    factory UnstressedClass.fromJson(Map<String, dynamic> json) => UnstressedClass(
+        alain: (json.containsKey("Alain") ? json["Alain"] : throw FormatException('Missing required property')),
+        amphirhina: (json.containsKey("Amphirhina") ? json["Amphirhina"] : throw FormatException('Missing required property')),
+        antimachinery: (json.containsKey("antimachinery") ? json["antimachinery"] : throw FormatException('Missing required property')),
+        coldish: (json.containsKey("coldish") ? json["coldish"] : throw FormatException('Missing required property')),
+        crantara: (json.containsKey("crantara") ? json["crantara"] : throw FormatException('Missing required property')),
+        distinguishing: (json.containsKey("distinguishing") ? json["distinguishing"] : throw FormatException('Missing required property')),
+        elytroposis: (json.containsKey("elytroposis") ? json["elytroposis"] : throw FormatException('Missing required property')),
+        gentianwort: (json.containsKey("gentianwort") ? json["gentianwort"] : throw FormatException('Missing required property')),
+        heliosis: (json.containsKey("heliosis") ? json["heliosis"] : throw FormatException('Missing required property')),
+        instrumental: (json.containsKey("instrumental") ? json["instrumental"] : throw FormatException('Missing required property')),
+        introinflection: (json.containsKey("introinflection") ? json["introinflection"] : throw FormatException('Missing required property')),
+        kala: (json.containsKey("kala") ? json["kala"] : throw FormatException('Missing required property')),
+        lincolnian: (json.containsKey("Lincolnian") ? json["Lincolnian"] : throw FormatException('Missing required property')),
+        metad: (json.containsKey("metad") ? json["metad"] : throw FormatException('Missing required property')),
+        sarcophilus: (json.containsKey("Sarcophilus") ? json["Sarcophilus"] : throw FormatException('Missing required property')),
+        swingingly: (json.containsKey("swingingly") ? json["swingingly"] : throw FormatException('Missing required property')),
+        unconformity: (json.containsKey("unconformity") ? json["unconformity"] : throw FormatException('Missing required property')),
+        undecreed: (json.containsKey("undecreed") ? json["undecreed"] : throw FormatException('Missing required property')),
+        venerable: (json.containsKey("venerable") ? json["venerable"] : throw FormatException('Missing required property')),
+        vowellessness: (json.containsKey("vowellessness") ? json["vowellessness"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "Alain": alain,
+        "Amphirhina": amphirhina,
+        "antimachinery": antimachinery,
+        "coldish": coldish,
+        "crantara": crantara,
+        "distinguishing": distinguishing,
+        "elytroposis": elytroposis,
+        "gentianwort": gentianwort,
+        "heliosis": heliosis,
+        "instrumental": instrumental,
+        "introinflection": introinflection,
+        "kala": kala,
+        "Lincolnian": lincolnian,
+        "metad": metad,
+        "Sarcophilus": sarcophilus,
+        "swingingly": swingingly,
+        "unconformity": unconformity,
+        "undecreed": undecreed,
+        "venerable": venerable,
+        "vowellessness": vowellessness,
+    };
+}
+
+class WrothyClass {
+    final dynamic aeschynanthus;
+    final dynamic aquiferous;
+    final dynamic cheapener;
+    final dynamic enumeration;
+    final dynamic ephesine;
+    final dynamic escadrille;
+    final dynamic estrous;
+    final dynamic interestedly;
+    final dynamic katakinetomer;
+    final dynamic mortification;
+    final dynamic morula;
+    final dynamic orthosymmetrical;
+    final dynamic overbark;
+    final dynamic politist;
+    final dynamic qualified;
+    final dynamic sphenomalar;
+    final dynamic throatful;
+    final dynamic transhumance;
+    final dynamic triandrian;
+    final dynamic unbooked;
+
+    WrothyClass({
+        required this.aeschynanthus,
+        required this.aquiferous,
+        required this.cheapener,
+        required this.enumeration,
+        required this.ephesine,
+        required this.escadrille,
+        required this.estrous,
+        required this.interestedly,
+        required this.katakinetomer,
+        required this.mortification,
+        required this.morula,
+        required this.orthosymmetrical,
+        required this.overbark,
+        required this.politist,
+        required this.qualified,
+        required this.sphenomalar,
+        required this.throatful,
+        required this.transhumance,
+        required this.triandrian,
+        required this.unbooked,
+    });
+
+    WrothyClass copyWith({
+        dynamic aeschynanthus,
+        dynamic aquiferous,
+        dynamic cheapener,
+        dynamic enumeration,
+        dynamic ephesine,
+        dynamic escadrille,
+        dynamic estrous,
+        dynamic interestedly,
+        dynamic katakinetomer,
+        dynamic mortification,
+        dynamic morula,
+        dynamic orthosymmetrical,
+        dynamic overbark,
+        dynamic politist,
+        dynamic qualified,
+        dynamic sphenomalar,
+        dynamic throatful,
+        dynamic transhumance,
+        dynamic triandrian,
+        dynamic unbooked,
+    }) => 
+        WrothyClass(
+            aeschynanthus: aeschynanthus ?? this.aeschynanthus,
+            aquiferous: aquiferous ?? this.aquiferous,
+            cheapener: cheapener ?? this.cheapener,
+            enumeration: enumeration ?? this.enumeration,
+            ephesine: ephesine ?? this.ephesine,
+            escadrille: escadrille ?? this.escadrille,
+            estrous: estrous ?? this.estrous,
+            interestedly: interestedly ?? this.interestedly,
+            katakinetomer: katakinetomer ?? this.katakinetomer,
+            mortification: mortification ?? this.mortification,
+            morula: morula ?? this.morula,
+            orthosymmetrical: orthosymmetrical ?? this.orthosymmetrical,
+            overbark: overbark ?? this.overbark,
+            politist: politist ?? this.politist,
+            qualified: qualified ?? this.qualified,
+            sphenomalar: sphenomalar ?? this.sphenomalar,
+            throatful: throatful ?? this.throatful,
+            transhumance: transhumance ?? this.transhumance,
+            triandrian: triandrian ?? this.triandrian,
+            unbooked: unbooked ?? this.unbooked,
+        );
+
+    factory WrothyClass.fromJson(Map<String, dynamic> json) => WrothyClass(
+        aeschynanthus: (json.containsKey("Aeschynanthus") ? json["Aeschynanthus"] : throw FormatException('Missing required property')),
+        aquiferous: (json.containsKey("aquiferous") ? json["aquiferous"] : throw FormatException('Missing required property')),
+        cheapener: (json.containsKey("cheapener") ? json["cheapener"] : throw FormatException('Missing required property')),
+        enumeration: (json.containsKey("enumeration") ? json["enumeration"] : throw FormatException('Missing required property')),
+        ephesine: (json.containsKey("Ephesine") ? json["Ephesine"] : throw FormatException('Missing required property')),
+        escadrille: (json.containsKey("escadrille") ? json["escadrille"] : throw FormatException('Missing required property')),
+        estrous: (json.containsKey("estrous") ? json["estrous"] : throw FormatException('Missing required property')),
+        interestedly: (json.containsKey("interestedly") ? json["interestedly"] : throw FormatException('Missing required property')),
+        katakinetomer: (json.containsKey("katakinetomer") ? json["katakinetomer"] : throw FormatException('Missing required property')),
+        mortification: (json.containsKey("mortification") ? json["mortification"] : throw FormatException('Missing required property')),
+        morula: (json.containsKey("morula") ? json["morula"] : throw FormatException('Missing required property')),
+        orthosymmetrical: (json.containsKey("orthosymmetrical") ? json["orthosymmetrical"] : throw FormatException('Missing required property')),
+        overbark: (json.containsKey("overbark") ? json["overbark"] : throw FormatException('Missing required property')),
+        politist: (json.containsKey("politist") ? json["politist"] : throw FormatException('Missing required property')),
+        qualified: (json.containsKey("qualified") ? json["qualified"] : throw FormatException('Missing required property')),
+        sphenomalar: (json.containsKey("sphenomalar") ? json["sphenomalar"] : throw FormatException('Missing required property')),
+        throatful: (json.containsKey("throatful") ? json["throatful"] : throw FormatException('Missing required property')),
+        transhumance: (json.containsKey("transhumance") ? json["transhumance"] : throw FormatException('Missing required property')),
+        triandrian: (json.containsKey("triandrian") ? json["triandrian"] : throw FormatException('Missing required property')),
+        unbooked: (json.containsKey("unbooked") ? json["unbooked"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "Aeschynanthus": aeschynanthus,
+        "aquiferous": aquiferous,
+        "cheapener": cheapener,
+        "enumeration": enumeration,
+        "Ephesine": ephesine,
+        "escadrille": escadrille,
+        "estrous": estrous,
+        "interestedly": interestedly,
+        "katakinetomer": katakinetomer,
+        "mortification": mortification,
+        "morula": morula,
+        "orthosymmetrical": orthosymmetrical,
+        "overbark": overbark,
+        "politist": politist,
+        "qualified": qualified,
+        "sphenomalar": sphenomalar,
+        "throatful": throatful,
+        "transhumance": transhumance,
+        "triandrian": triandrian,
+        "unbooked": unbooked,
+    };
+}
diff --git a/head/dart/test/inputs/json/priority/combinations4.json/from-map-true--d222f65b3fee/TopLevel.dart b/head/dart/test/inputs/json/priority/combinations4.json/from-map-true--d222f65b3fee/TopLevel.dart
new file mode 100644
index 0000000..8564d49
--- /dev/null
+++ b/head/dart/test/inputs/json/priority/combinations4.json/from-map-true--d222f65b3fee/TopLevel.dart
@@ -0,0 +1,1761 @@
+// To parse this JSON data, do
+//
+//     final topLevel = topLevelFromJson(jsonString);
+
+import 'dart:convert';
+
+TopLevel topLevelFromJson(String str) => TopLevel.fromMap(json.decode(str));
+
+String topLevelToJson(TopLevel data) => json.encode(data.toMap());
+
+class TopLevel {
+    final List<dynamic> protrusive;
+    final List<dynamic> pulpitism;
+    final List<dynamic> pyodermia;
+    final List<dynamic> quebrachine;
+    final List<dynamic> querier;
+    final List<dynamic> rebarbative;
+    final List<Reimagine> reimagine;
+    final Ressaut ressaut;
+    final List<dynamic> retrocervical;
+    final List<dynamic> revert;
+    final List<dynamic> rewrite;
+    final List<dynamic> saccoderm;
+    final List<dynamic> santir;
+    final List<dynamic> saprophilous;
+    final List<dynamic> saxten;
+    final List<Scatty?> scatty;
+    final List<dynamic> scoffer;
+    final List<dynamic> scrampum;
+    final double semantic;
+    final List<dynamic> serpentinic;
+    final List<dynamic> shadowable;
+    final List<dynamic> sistering;
+    final List<Staghunting> staghunting;
+    final List<dynamic> stagmometer;
+    final List<dynamic> stimulability;
+    final List<dynamic> strangleable;
+    final List<dynamic> strenuosity;
+    final List<dynamic> tabaxir;
+    final List<dynamic> talpiform;
+    final List<dynamic> thwack;
+    final List<double?> to;
+    final List<dynamic> tortricine;
+    final List<dynamic> truantcy;
+    final List<String> turgesce;
+    final List<dynamic> unbeginning;
+    final List<double> underdunged;
+    final List<dynamic> undesirability;
+    final List<dynamic> unerasing;
+    final List<dynamic> unguentarium;
+    final List<dynamic> unimpeachably;
+    final List<dynamic> unmortgaged;
+    final List<dynamic> unobstructed;
+    final List<dynamic> unreceptivity;
+    final List<dynamic> unsatisfactoriness;
+    final List<int> unsecurity;
+    final List<dynamic> unstressed;
+    final List<dynamic> untasked;
+    final List<dynamic> unvarying;
+    final List<dynamic> vehemently;
+    final Map<String, bool> warriorship;
+    final List<dynamic> whitepot;
+    final List<dynamic> wrothy;
+
+    TopLevel({
+        required this.protrusive,
+        required this.pulpitism,
+        required this.pyodermia,
+        required this.quebrachine,
+        required this.querier,
+        required this.rebarbative,
+        required this.reimagine,
+        required this.ressaut,
+        required this.retrocervical,
+        required this.revert,
+        required this.rewrite,
+        required this.saccoderm,
+        required this.santir,
+        required this.saprophilous,
+        required this.saxten,
+        required this.scatty,
+        required this.scoffer,
+        required this.scrampum,
+        required this.semantic,
+        required this.serpentinic,
+        required this.shadowable,
+        required this.sistering,
+        required this.staghunting,
+        required this.stagmometer,
+        required this.stimulability,
+        required this.strangleable,
+        required this.strenuosity,
+        required this.tabaxir,
+        required this.talpiform,
+        required this.thwack,
+        required this.to,
+        required this.tortricine,
+        required this.truantcy,
+        required this.turgesce,
+        required this.unbeginning,
+        required this.underdunged,
+        required this.undesirability,
+        required this.unerasing,
+        required this.unguentarium,
+        required this.unimpeachably,
+        required this.unmortgaged,
+        required this.unobstructed,
+        required this.unreceptivity,
+        required this.unsatisfactoriness,
+        required this.unsecurity,
+        required this.unstressed,
+        required this.untasked,
+        required this.unvarying,
+        required this.vehemently,
+        required this.warriorship,
+        required this.whitepot,
+        required this.wrothy,
+    });
+
+    factory TopLevel.fromMap(Map<String, dynamic> json) => TopLevel(
+        protrusive: List<dynamic>.from(json["protrusive"].map((x) => x)),
+        pulpitism: List<dynamic>.from(json["pulpitism"].map((x) => x)),
+        pyodermia: List<dynamic>.from(json["pyodermia"].map((x) => x)),
+        quebrachine: List<dynamic>.from(json["quebrachine"].map((x) => x)),
+        querier: List<dynamic>.from(json["querier"].map((x) => x)),
+        rebarbative: List<dynamic>.from(json["rebarbative"].map((x) => x)),
+        reimagine: List<Reimagine>.from(json["reimagine"].map((x) => Reimagine.fromMap(x))),
+        ressaut: Ressaut.fromMap(json["ressaut"]),
+        retrocervical: List<dynamic>.from(json["retrocervical"].map((x) => x)),
+        revert: List<dynamic>.from(json["revert"].map((x) => x)),
+        rewrite: List<dynamic>.from(json["rewrite"].map((x) => x)),
+        saccoderm: List<dynamic>.from(json["saccoderm"].map((x) => x)),
+        santir: List<dynamic>.from(json["santir"].map((x) => x)),
+        saprophilous: List<dynamic>.from(json["saprophilous"].map((x) => x)),
+        saxten: List<dynamic>.from(json["saxten"].map((x) => x)),
+        scatty: List<Scatty?>.from(json["scatty"].map((x) => x == null ? null : Scatty.fromMap(x))),
+        scoffer: List<dynamic>.from(json["scoffer"].map((x) => x)),
+        scrampum: List<dynamic>.from(json["scrampum"].map((x) => x)),
+        semantic: json["semantic"]?.toDouble(),
+        serpentinic: List<dynamic>.from(json["serpentinic"].map((x) => x)),
+        shadowable: List<dynamic>.from(json["shadowable"].map((x) => x)),
+        sistering: List<dynamic>.from(json["sistering"].map((x) => x)),
+        staghunting: List<Staghunting>.from(json["staghunting"].map((x) => Staghunting.fromMap(x))),
+        stagmometer: List<dynamic>.from(json["stagmometer"].map((x) => x)),
+        stimulability: List<dynamic>.from(json["stimulability"].map((x) => x)),
+        strangleable: List<dynamic>.from(json["strangleable"].map((x) => x)),
+        strenuosity: List<dynamic>.from(json["strenuosity"].map((x) => x)),
+        tabaxir: List<dynamic>.from(json["tabaxir"].map((x) => x)),
+        talpiform: List<dynamic>.from(json["talpiform"].map((x) => x)),
+        thwack: List<dynamic>.from(json["thwack"].map((x) => x)),
+        to: List<double?>.from(json["to"].map((x) => x?.toDouble())),
+        tortricine: List<dynamic>.from(json["tortricine"].map((x) => x)),
+        truantcy: List<dynamic>.from(json["truantcy"].map((x) => x)),
+        turgesce: List<String>.from(json["turgesce"].map((x) => x)),
+        unbeginning: List<dynamic>.from(json["unbeginning"].map((x) => x)),
+        underdunged: List<double>.from(json["underdunged"].map((x) => x?.toDouble())),
+        undesirability: List<dynamic>.from(json["undesirability"].map((x) => x)),
+        unerasing: List<dynamic>.from(json["unerasing"].map((x) => x)),
+        unguentarium: List<dynamic>.from(json["unguentarium"].map((x) => x)),
+        unimpeachably: List<dynamic>.from(json["unimpeachably"].map((x) => x)),
+        unmortgaged: List<dynamic>.from(json["unmortgaged"].map((x) => x)),
+        unobstructed: List<dynamic>.from(json["unobstructed"].map((x) => x)),
+        unreceptivity: List<dynamic>.from(json["unreceptivity"].map((x) => x)),
+        unsatisfactoriness: List<dynamic>.from(json["unsatisfactoriness"].map((x) => x)),
+        unsecurity: List<int>.from(json["unsecurity"].map((x) => x)),
+        unstressed: List<dynamic>.from(json["unstressed"].map((x) => x)),
+        untasked: List<dynamic>.from(json["untasked"].map((x) => x)),
+        unvarying: List<dynamic>.from(json["unvarying"].map((x) => x)),
+        vehemently: List<dynamic>.from(json["vehemently"].map((x) => x)),
+        warriorship: Map.from(json["warriorship"]).map((k, v) => MapEntry<String, bool>(k, v)),
+        whitepot: List<dynamic>.from(json["whitepot"].map((x) => x)),
+        wrothy: List<dynamic>.from(json["wrothy"].map((x) => x)),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "protrusive": List<dynamic>.from(protrusive.map((x) => x)),
+        "pulpitism": List<dynamic>.from(pulpitism.map((x) => x)),
+        "pyodermia": List<dynamic>.from(pyodermia.map((x) => x)),
+        "quebrachine": List<dynamic>.from(quebrachine.map((x) => x)),
+        "querier": List<dynamic>.from(querier.map((x) => x)),
+        "rebarbative": List<dynamic>.from(rebarbative.map((x) => x)),
+        "reimagine": List<dynamic>.from(reimagine.map((x) => x.toMap())),
+        "ressaut": ressaut.toMap(),
+        "retrocervical": List<dynamic>.from(retrocervical.map((x) => x)),
+        "revert": List<dynamic>.from(revert.map((x) => x)),
+        "rewrite": List<dynamic>.from(rewrite.map((x) => x)),
+        "saccoderm": List<dynamic>.from(saccoderm.map((x) => x)),
+        "santir": List<dynamic>.from(santir.map((x) => x)),
+        "saprophilous": List<dynamic>.from(saprophilous.map((x) => x)),
+        "saxten": List<dynamic>.from(saxten.map((x) => x)),
+        "scatty": List<dynamic>.from(scatty.map((x) => x?.toMap())),
+        "scoffer": List<dynamic>.from(scoffer.map((x) => x)),
+        "scrampum": List<dynamic>.from(scrampum.map((x) => x)),
+        "semantic": semantic,
+        "serpentinic": List<dynamic>.from(serpentinic.map((x) => x)),
+        "shadowable": List<dynamic>.from(shadowable.map((x) => x)),
+        "sistering": List<dynamic>.from(sistering.map((x) => x)),
+        "staghunting": List<dynamic>.from(staghunting.map((x) => x.toMap())),
+        "stagmometer": List<dynamic>.from(stagmometer.map((x) => x)),
+        "stimulability": List<dynamic>.from(stimulability.map((x) => x)),
+        "strangleable": List<dynamic>.from(strangleable.map((x) => x)),
+        "strenuosity": List<dynamic>.from(strenuosity.map((x) => x)),
+        "tabaxir": List<dynamic>.from(tabaxir.map((x) => x)),
+        "talpiform": List<dynamic>.from(talpiform.map((x) => x)),
+        "thwack": List<dynamic>.from(thwack.map((x) => x)),
+        "to": List<dynamic>.from(to.map((x) => x)),
+        "tortricine": List<dynamic>.from(tortricine.map((x) => x)),
+        "truantcy": List<dynamic>.from(truantcy.map((x) => x)),
+        "turgesce": List<dynamic>.from(turgesce.map((x) => x)),
+        "unbeginning": List<dynamic>.from(unbeginning.map((x) => x)),
+        "underdunged": List<dynamic>.from(underdunged.map((x) => x)),
+        "undesirability": List<dynamic>.from(undesirability.map((x) => x)),
+        "unerasing": List<dynamic>.from(unerasing.map((x) => x)),
+        "unguentarium": List<dynamic>.from(unguentarium.map((x) => x)),
+        "unimpeachably": List<dynamic>.from(unimpeachably.map((x) => x)),
+        "unmortgaged": List<dynamic>.from(unmortgaged.map((x) => x)),
+        "unobstructed": List<dynamic>.from(unobstructed.map((x) => x)),
+        "unreceptivity": List<dynamic>.from(unreceptivity.map((x) => x)),
+        "unsatisfactoriness": List<dynamic>.from(unsatisfactoriness.map((x) => x)),
+        "unsecurity": List<dynamic>.from(unsecurity.map((x) => x)),
+        "unstressed": List<dynamic>.from(unstressed.map((x) => x)),
+        "untasked": List<dynamic>.from(untasked.map((x) => x)),
+        "unvarying": List<dynamic>.from(unvarying.map((x) => x)),
+        "vehemently": List<dynamic>.from(vehemently.map((x) => x)),
+        "warriorship": Map.from(warriorship).map((k, v) => MapEntry<String, dynamic>(k, v)),
+        "whitepot": List<dynamic>.from(whitepot.map((x) => x)),
+        "wrothy": List<dynamic>.from(wrothy.map((x) => x)),
+    };
+}
+
+class PulpitismClass {
+    final dynamic abnet;
+    final dynamic buckhorn;
+    final dynamic calciform;
+    final dynamic chelophore;
+    final dynamic cogitation;
+    final dynamic decreeable;
+    final dynamic despicable;
+    final dynamic isodiazo;
+    final dynamic jadedly;
+    final dynamic leptochlorite;
+    final dynamic nursling;
+    final dynamic palamedean;
+    final dynamic photoheliograph;
+    final dynamic pipewood;
+    final dynamic roberd;
+    final dynamic statable;
+    final dynamic superassume;
+    final dynamic syllabe;
+    final dynamic toughhead;
+    final dynamic underburn;
+
+    PulpitismClass({
+        required this.abnet,
+        required this.buckhorn,
+        required this.calciform,
+        required this.chelophore,
+        required this.cogitation,
+        required this.decreeable,
+        required this.despicable,
+        required this.isodiazo,
+        required this.jadedly,
+        required this.leptochlorite,
+        required this.nursling,
+        required this.palamedean,
+        required this.photoheliograph,
+        required this.pipewood,
+        required this.roberd,
+        required this.statable,
+        required this.superassume,
+        required this.syllabe,
+        required this.toughhead,
+        required this.underburn,
+    });
+
+    factory PulpitismClass.fromMap(Map<String, dynamic> json) => PulpitismClass(
+        abnet: (json.containsKey("abnet") ? json["abnet"] : throw FormatException('Missing required property')),
+        buckhorn: (json.containsKey("buckhorn") ? json["buckhorn"] : throw FormatException('Missing required property')),
+        calciform: (json.containsKey("calciform") ? json["calciform"] : throw FormatException('Missing required property')),
+        chelophore: (json.containsKey("chelophore") ? json["chelophore"] : throw FormatException('Missing required property')),
+        cogitation: (json.containsKey("cogitation") ? json["cogitation"] : throw FormatException('Missing required property')),
+        decreeable: (json.containsKey("decreeable") ? json["decreeable"] : throw FormatException('Missing required property')),
+        despicable: (json.containsKey("despicable") ? json["despicable"] : throw FormatException('Missing required property')),
+        isodiazo: (json.containsKey("isodiazo") ? json["isodiazo"] : throw FormatException('Missing required property')),
+        jadedly: (json.containsKey("jadedly") ? json["jadedly"] : throw FormatException('Missing required property')),
+        leptochlorite: (json.containsKey("leptochlorite") ? json["leptochlorite"] : throw FormatException('Missing required property')),
+        nursling: (json.containsKey("nursling") ? json["nursling"] : throw FormatException('Missing required property')),
+        palamedean: (json.containsKey("palamedean") ? json["palamedean"] : throw FormatException('Missing required property')),
+        photoheliograph: (json.containsKey("photoheliograph") ? json["photoheliograph"] : throw FormatException('Missing required property')),
+        pipewood: (json.containsKey("pipewood") ? json["pipewood"] : throw FormatException('Missing required property')),
+        roberd: (json.containsKey("roberd") ? json["roberd"] : throw FormatException('Missing required property')),
+        statable: (json.containsKey("statable") ? json["statable"] : throw FormatException('Missing required property')),
+        superassume: (json.containsKey("superassume") ? json["superassume"] : throw FormatException('Missing required property')),
+        syllabe: (json.containsKey("syllabe") ? json["syllabe"] : throw FormatException('Missing required property')),
+        toughhead: (json.containsKey("toughhead") ? json["toughhead"] : throw FormatException('Missing required property')),
+        underburn: (json.containsKey("underburn") ? json["underburn"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "abnet": abnet,
+        "buckhorn": buckhorn,
+        "calciform": calciform,
+        "chelophore": chelophore,
+        "cogitation": cogitation,
+        "decreeable": decreeable,
+        "despicable": despicable,
+        "isodiazo": isodiazo,
+        "jadedly": jadedly,
+        "leptochlorite": leptochlorite,
+        "nursling": nursling,
+        "palamedean": palamedean,
+        "photoheliograph": photoheliograph,
+        "pipewood": pipewood,
+        "roberd": roberd,
+        "statable": statable,
+        "superassume": superassume,
+        "syllabe": syllabe,
+        "toughhead": toughhead,
+        "underburn": underburn,
+    };
+}
+
+class PyodermiaClass {
+    final dynamic aphoristically;
+    final dynamic apophyllous;
+    final dynamic cognize;
+    final dynamic dermonosology;
+    final dynamic gyppo;
+    final dynamic ither;
+    final dynamic juglandaceous;
+    final dynamic litho;
+    final dynamic macropterous;
+    final dynamic photographer;
+    final dynamic romancing;
+    final dynamic rumness;
+    final dynamic somniloquist;
+    final dynamic stressfully;
+    final dynamic tactically;
+    final dynamic tracheophony;
+    final dynamic unappositely;
+    final dynamic unclothedly;
+    final dynamic unimplied;
+    final dynamic unsyncopated;
+
+    PyodermiaClass({
+        required this.aphoristically,
+        required this.apophyllous,
+        required this.cognize,
+        required this.dermonosology,
+        required this.gyppo,
+        required this.ither,
+        required this.juglandaceous,
+        required this.litho,
+        required this.macropterous,
+        required this.photographer,
+        required this.romancing,
+        required this.rumness,
+        required this.somniloquist,
+        required this.stressfully,
+        required this.tactically,
+        required this.tracheophony,
+        required this.unappositely,
+        required this.unclothedly,
+        required this.unimplied,
+        required this.unsyncopated,
+    });
+
+    factory PyodermiaClass.fromMap(Map<String, dynamic> json) => PyodermiaClass(
+        aphoristically: (json.containsKey("aphoristically") ? json["aphoristically"] : throw FormatException('Missing required property')),
+        apophyllous: (json.containsKey("apophyllous") ? json["apophyllous"] : throw FormatException('Missing required property')),
+        cognize: (json.containsKey("cognize") ? json["cognize"] : throw FormatException('Missing required property')),
+        dermonosology: (json.containsKey("dermonosology") ? json["dermonosology"] : throw FormatException('Missing required property')),
+        gyppo: (json.containsKey("Gyppo") ? json["Gyppo"] : throw FormatException('Missing required property')),
+        ither: (json.containsKey("ither") ? json["ither"] : throw FormatException('Missing required property')),
+        juglandaceous: (json.containsKey("juglandaceous") ? json["juglandaceous"] : throw FormatException('Missing required property')),
+        litho: (json.containsKey("litho") ? json["litho"] : throw FormatException('Missing required property')),
+        macropterous: (json.containsKey("macropterous") ? json["macropterous"] : throw FormatException('Missing required property')),
+        photographer: (json.containsKey("photographer") ? json["photographer"] : throw FormatException('Missing required property')),
+        romancing: (json.containsKey("romancing") ? json["romancing"] : throw FormatException('Missing required property')),
+        rumness: (json.containsKey("rumness") ? json["rumness"] : throw FormatException('Missing required property')),
+        somniloquist: (json.containsKey("somniloquist") ? json["somniloquist"] : throw FormatException('Missing required property')),
+        stressfully: (json.containsKey("stressfully") ? json["stressfully"] : throw FormatException('Missing required property')),
+        tactically: (json.containsKey("tactically") ? json["tactically"] : throw FormatException('Missing required property')),
+        tracheophony: (json.containsKey("tracheophony") ? json["tracheophony"] : throw FormatException('Missing required property')),
+        unappositely: (json.containsKey("unappositely") ? json["unappositely"] : throw FormatException('Missing required property')),
+        unclothedly: (json.containsKey("unclothedly") ? json["unclothedly"] : throw FormatException('Missing required property')),
+        unimplied: (json.containsKey("unimplied") ? json["unimplied"] : throw FormatException('Missing required property')),
+        unsyncopated: (json.containsKey("unsyncopated") ? json["unsyncopated"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "aphoristically": aphoristically,
+        "apophyllous": apophyllous,
+        "cognize": cognize,
+        "dermonosology": dermonosology,
+        "Gyppo": gyppo,
+        "ither": ither,
+        "juglandaceous": juglandaceous,
+        "litho": litho,
+        "macropterous": macropterous,
+        "photographer": photographer,
+        "romancing": romancing,
+        "rumness": rumness,
+        "somniloquist": somniloquist,
+        "stressfully": stressfully,
+        "tactically": tactically,
+        "tracheophony": tracheophony,
+        "unappositely": unappositely,
+        "unclothedly": unclothedly,
+        "unimplied": unimplied,
+        "unsyncopated": unsyncopated,
+    };
+}
+
+class QuebrachineClass {
+    final double catharticalness;
+    final int chirotherium;
+    final String disdiapason;
+    final bool homocerc;
+    final dynamic nonbookish;
+
+    QuebrachineClass({
+        required this.catharticalness,
+        required this.chirotherium,
+        required this.disdiapason,
+        required this.homocerc,
+        required this.nonbookish,
+    });
+
+    factory QuebrachineClass.fromMap(Map<String, dynamic> json) => QuebrachineClass(
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        homocerc: json["homocerc"],
+        nonbookish: (json.containsKey("nonbookish") ? json["nonbookish"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "homocerc": homocerc,
+        "nonbookish": nonbookish,
+    };
+}
+
+class Reimagine {
+    final dynamic adducible;
+    final dynamic anabolin;
+    final dynamic brainy;
+    final double? catharticalness;
+    final int? chirotherium;
+    final dynamic chrysamine;
+    final String? disdiapason;
+    final dynamic fluxweed;
+    final dynamic glaucine;
+    final dynamic grobianism;
+    final dynamic hermo;
+    final dynamic hieroglyphist;
+    final bool? homocerc;
+    final dynamic icteroid;
+    final dynamic immortal;
+    final dynamic impetulant;
+    final dynamic irrigate;
+    final dynamic myxedema;
+    final dynamic nonbookish;
+    final dynamic onyx;
+    final dynamic repasser;
+    final dynamic septomarginal;
+    final dynamic subdie;
+    final dynamic tibiometatarsal;
+    final dynamic waltzlike;
+
+    Reimagine({
+        this.adducible,
+        this.anabolin,
+        this.brainy,
+        this.catharticalness,
+        this.chirotherium,
+        this.chrysamine,
+        this.disdiapason,
+        this.fluxweed,
+        this.glaucine,
+        this.grobianism,
+        this.hermo,
+        this.hieroglyphist,
+        this.homocerc,
+        this.icteroid,
+        this.immortal,
+        this.impetulant,
+        this.irrigate,
+        this.myxedema,
+        this.nonbookish,
+        this.onyx,
+        this.repasser,
+        this.septomarginal,
+        this.subdie,
+        this.tibiometatarsal,
+        this.waltzlike,
+    });
+
+    factory Reimagine.fromMap(Map<String, dynamic> json) => Reimagine(
+        adducible: json["adducible"],
+        anabolin: json["anabolin"],
+        brainy: json["brainy"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        chrysamine: json["chrysamine"],
+        disdiapason: json["disdiapason"],
+        fluxweed: json["fluxweed"],
+        glaucine: json["glaucine"],
+        grobianism: json["grobianism"],
+        hermo: json["Hermo"],
+        hieroglyphist: json["hieroglyphist"],
+        homocerc: json["homocerc"],
+        icteroid: json["icteroid"],
+        immortal: json["immortal"],
+        impetulant: json["impetulant"],
+        irrigate: json["irrigate"],
+        myxedema: json["myxedema"],
+        nonbookish: json["nonbookish"],
+        onyx: json["onyx"],
+        repasser: json["repasser"],
+        septomarginal: json["septomarginal"],
+        subdie: json["subdie"],
+        tibiometatarsal: json["tibiometatarsal"],
+        waltzlike: json["waltzlike"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "adducible": adducible,
+        "anabolin": anabolin,
+        "brainy": brainy,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "chrysamine": chrysamine,
+        "disdiapason": disdiapason,
+        "fluxweed": fluxweed,
+        "glaucine": glaucine,
+        "grobianism": grobianism,
+        "Hermo": hermo,
+        "hieroglyphist": hieroglyphist,
+        "homocerc": homocerc,
+        "icteroid": icteroid,
+        "immortal": immortal,
+        "impetulant": impetulant,
+        "irrigate": irrigate,
+        "myxedema": myxedema,
+        "nonbookish": nonbookish,
+        "onyx": onyx,
+        "repasser": repasser,
+        "septomarginal": septomarginal,
+        "subdie": subdie,
+        "tibiometatarsal": tibiometatarsal,
+        "waltzlike": waltzlike,
+    };
+}
+
+class Ressaut {
+    final String apperceptive;
+    final String cuttoo;
+    final String douser;
+    final String drinkproof;
+    final String forementioned;
+    final String freesia;
+    final String genevieve;
+    final String hyperdiabolical;
+    final String hypocone;
+    final String irreverentially;
+    final String jumart;
+    final String mimosaceae;
+    final String mollicrush;
+    final String nedder;
+    final String retinasphalt;
+    final String sough;
+    final String steading;
+    final String theopaschitism;
+    final String undurableness;
+    final String unmingleable;
+
+    Ressaut({
+        required this.apperceptive,
+        required this.cuttoo,
+        required this.douser,
+        required this.drinkproof,
+        required this.forementioned,
+        required this.freesia,
+        required this.genevieve,
+        required this.hyperdiabolical,
+        required this.hypocone,
+        required this.irreverentially,
+        required this.jumart,
+        required this.mimosaceae,
+        required this.mollicrush,
+        required this.nedder,
+        required this.retinasphalt,
+        required this.sough,
+        required this.steading,
+        required this.theopaschitism,
+        required this.undurableness,
+        required this.unmingleable,
+    });
+
+    factory Ressaut.fromMap(Map<String, dynamic> json) => Ressaut(
+        apperceptive: json["apperceptive"],
+        cuttoo: json["cuttoo"],
+        douser: json["douser"],
+        drinkproof: json["drinkproof"],
+        forementioned: json["forementioned"],
+        freesia: json["Freesia"],
+        genevieve: json["Genevieve"],
+        hyperdiabolical: json["hyperdiabolical"],
+        hypocone: json["hypocone"],
+        irreverentially: json["irreverentially"],
+        jumart: json["jumart"],
+        mimosaceae: json["Mimosaceae"],
+        mollicrush: json["mollicrush"],
+        nedder: json["nedder"],
+        retinasphalt: json["retinasphalt"],
+        sough: json["sough"],
+        steading: json["steading"],
+        theopaschitism: json["Theopaschitism"],
+        undurableness: json["undurableness"],
+        unmingleable: json["unmingleable"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "apperceptive": apperceptive,
+        "cuttoo": cuttoo,
+        "douser": douser,
+        "drinkproof": drinkproof,
+        "forementioned": forementioned,
+        "Freesia": freesia,
+        "Genevieve": genevieve,
+        "hyperdiabolical": hyperdiabolical,
+        "hypocone": hypocone,
+        "irreverentially": irreverentially,
+        "jumart": jumart,
+        "Mimosaceae": mimosaceae,
+        "mollicrush": mollicrush,
+        "nedder": nedder,
+        "retinasphalt": retinasphalt,
+        "sough": sough,
+        "steading": steading,
+        "Theopaschitism": theopaschitism,
+        "undurableness": undurableness,
+        "unmingleable": unmingleable,
+    };
+}
+
+class RewriteClass {
+    final dynamic accountancy;
+    final dynamic cacotrophic;
+    final dynamic contest;
+    final dynamic couthily;
+    final dynamic falculate;
+    final dynamic foreseize;
+    final dynamic hyades;
+    final dynamic lemnad;
+    final dynamic monotheistically;
+    final dynamic nonflying;
+    final dynamic ptenoglossa;
+    final dynamic repatch;
+    final dynamic rodman;
+    final dynamic strung;
+    final dynamic titmal;
+    final dynamic twalpennyworth;
+    final dynamic unblamable;
+    final dynamic vertical;
+    final dynamic whiggification;
+    final dynamic yardman;
+
+    RewriteClass({
+        required this.accountancy,
+        required this.cacotrophic,
+        required this.contest,
+        required this.couthily,
+        required this.falculate,
+        required this.foreseize,
+        required this.hyades,
+        required this.lemnad,
+        required this.monotheistically,
+        required this.nonflying,
+        required this.ptenoglossa,
+        required this.repatch,
+        required this.rodman,
+        required this.strung,
+        required this.titmal,
+        required this.twalpennyworth,
+        required this.unblamable,
+        required this.vertical,
+        required this.whiggification,
+        required this.yardman,
+    });
+
+    factory RewriteClass.fromMap(Map<String, dynamic> json) => RewriteClass(
+        accountancy: (json.containsKey("accountancy") ? json["accountancy"] : throw FormatException('Missing required property')),
+        cacotrophic: (json.containsKey("cacotrophic") ? json["cacotrophic"] : throw FormatException('Missing required property')),
+        contest: (json.containsKey("contest") ? json["contest"] : throw FormatException('Missing required property')),
+        couthily: (json.containsKey("couthily") ? json["couthily"] : throw FormatException('Missing required property')),
+        falculate: (json.containsKey("falculate") ? json["falculate"] : throw FormatException('Missing required property')),
+        foreseize: (json.containsKey("foreseize") ? json["foreseize"] : throw FormatException('Missing required property')),
+        hyades: (json.containsKey("Hyades") ? json["Hyades"] : throw FormatException('Missing required property')),
+        lemnad: (json.containsKey("lemnad") ? json["lemnad"] : throw FormatException('Missing required property')),
+        monotheistically: (json.containsKey("monotheistically") ? json["monotheistically"] : throw FormatException('Missing required property')),
+        nonflying: (json.containsKey("nonflying") ? json["nonflying"] : throw FormatException('Missing required property')),
+        ptenoglossa: (json.containsKey("Ptenoglossa") ? json["Ptenoglossa"] : throw FormatException('Missing required property')),
+        repatch: (json.containsKey("repatch") ? json["repatch"] : throw FormatException('Missing required property')),
+        rodman: (json.containsKey("rodman") ? json["rodman"] : throw FormatException('Missing required property')),
+        strung: (json.containsKey("strung") ? json["strung"] : throw FormatException('Missing required property')),
+        titmal: (json.containsKey("titmal") ? json["titmal"] : throw FormatException('Missing required property')),
+        twalpennyworth: (json.containsKey("twalpennyworth") ? json["twalpennyworth"] : throw FormatException('Missing required property')),
+        unblamable: (json.containsKey("unblamable") ? json["unblamable"] : throw FormatException('Missing required property')),
+        vertical: (json.containsKey("vertical") ? json["vertical"] : throw FormatException('Missing required property')),
+        whiggification: (json.containsKey("Whiggification") ? json["Whiggification"] : throw FormatException('Missing required property')),
+        yardman: (json.containsKey("yardman") ? json["yardman"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "accountancy": accountancy,
+        "cacotrophic": cacotrophic,
+        "contest": contest,
+        "couthily": couthily,
+        "falculate": falculate,
+        "foreseize": foreseize,
+        "Hyades": hyades,
+        "lemnad": lemnad,
+        "monotheistically": monotheistically,
+        "nonflying": nonflying,
+        "Ptenoglossa": ptenoglossa,
+        "repatch": repatch,
+        "rodman": rodman,
+        "strung": strung,
+        "titmal": titmal,
+        "twalpennyworth": twalpennyworth,
+        "unblamable": unblamable,
+        "vertical": vertical,
+        "Whiggification": whiggification,
+        "yardman": yardman,
+    };
+}
+
+class SantirClass {
+    final dynamic admiredly;
+    final dynamic demicaponier;
+    final dynamic epitympanic;
+    final dynamic investitor;
+    final dynamic lupiform;
+    final dynamic monoflagellate;
+    final dynamic paleoethnic;
+    final dynamic prediscountable;
+    final dynamic rhetoricals;
+    final dynamic roomth;
+    final dynamic saccharose;
+    final dynamic septonasal;
+    final dynamic serpenticide;
+    final dynamic setarious;
+    final dynamic spaework;
+    final dynamic stylite;
+    final dynamic suessiones;
+    final dynamic timelily;
+    final dynamic unprofaned;
+    final dynamic vorticular;
+
+    SantirClass({
+        required this.admiredly,
+        required this.demicaponier,
+        required this.epitympanic,
+        required this.investitor,
+        required this.lupiform,
+        required this.monoflagellate,
+        required this.paleoethnic,
+        required this.prediscountable,
+        required this.rhetoricals,
+        required this.roomth,
+        required this.saccharose,
+        required this.septonasal,
+        required this.serpenticide,
+        required this.setarious,
+        required this.spaework,
+        required this.stylite,
+        required this.suessiones,
+        required this.timelily,
+        required this.unprofaned,
+        required this.vorticular,
+    });
+
+    factory SantirClass.fromMap(Map<String, dynamic> json) => SantirClass(
+        admiredly: (json.containsKey("admiredly") ? json["admiredly"] : throw FormatException('Missing required property')),
+        demicaponier: (json.containsKey("demicaponier") ? json["demicaponier"] : throw FormatException('Missing required property')),
+        epitympanic: (json.containsKey("epitympanic") ? json["epitympanic"] : throw FormatException('Missing required property')),
+        investitor: (json.containsKey("investitor") ? json["investitor"] : throw FormatException('Missing required property')),
+        lupiform: (json.containsKey("lupiform") ? json["lupiform"] : throw FormatException('Missing required property')),
+        monoflagellate: (json.containsKey("monoflagellate") ? json["monoflagellate"] : throw FormatException('Missing required property')),
+        paleoethnic: (json.containsKey("paleoethnic") ? json["paleoethnic"] : throw FormatException('Missing required property')),
+        prediscountable: (json.containsKey("prediscountable") ? json["prediscountable"] : throw FormatException('Missing required property')),
+        rhetoricals: (json.containsKey("rhetoricals") ? json["rhetoricals"] : throw FormatException('Missing required property')),
+        roomth: (json.containsKey("roomth") ? json["roomth"] : throw FormatException('Missing required property')),
+        saccharose: (json.containsKey("saccharose") ? json["saccharose"] : throw FormatException('Missing required property')),
+        septonasal: (json.containsKey("septonasal") ? json["septonasal"] : throw FormatException('Missing required property')),
+        serpenticide: (json.containsKey("serpenticide") ? json["serpenticide"] : throw FormatException('Missing required property')),
+        setarious: (json.containsKey("setarious") ? json["setarious"] : throw FormatException('Missing required property')),
+        spaework: (json.containsKey("spaework") ? json["spaework"] : throw FormatException('Missing required property')),
+        stylite: (json.containsKey("stylite") ? json["stylite"] : throw FormatException('Missing required property')),
+        suessiones: (json.containsKey("Suessiones") ? json["Suessiones"] : throw FormatException('Missing required property')),
+        timelily: (json.containsKey("timelily") ? json["timelily"] : throw FormatException('Missing required property')),
+        unprofaned: (json.containsKey("unprofaned") ? json["unprofaned"] : throw FormatException('Missing required property')),
+        vorticular: (json.containsKey("vorticular") ? json["vorticular"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "admiredly": admiredly,
+        "demicaponier": demicaponier,
+        "epitympanic": epitympanic,
+        "investitor": investitor,
+        "lupiform": lupiform,
+        "monoflagellate": monoflagellate,
+        "paleoethnic": paleoethnic,
+        "prediscountable": prediscountable,
+        "rhetoricals": rhetoricals,
+        "roomth": roomth,
+        "saccharose": saccharose,
+        "septonasal": septonasal,
+        "serpenticide": serpenticide,
+        "setarious": setarious,
+        "spaework": spaework,
+        "stylite": stylite,
+        "Suessiones": suessiones,
+        "timelily": timelily,
+        "unprofaned": unprofaned,
+        "vorticular": vorticular,
+    };
+}
+
+class SaxtenClass {
+    final dynamic algarrobilla;
+    final dynamic bowgrace;
+    final double? catharticalness;
+    final dynamic centaurid;
+    final int? chirotherium;
+    final String? disdiapason;
+    final dynamic flix;
+    final dynamic germanely;
+    final bool? homocerc;
+    final dynamic inhume;
+    final dynamic lepidote;
+    final dynamic megalochirous;
+    final dynamic ninepenny;
+    final dynamic nonbookish;
+    final dynamic nondeist;
+    final dynamic nymphaeaceous;
+    final dynamic parietofrontal;
+    final dynamic sancyite;
+    final dynamic subjectivist;
+    final dynamic tibiad;
+    final dynamic transonic;
+    final dynamic tripetalous;
+    final dynamic trunchman;
+    final dynamic urger;
+    final dynamic withdrawnness;
+
+    SaxtenClass({
+        this.algarrobilla,
+        this.bowgrace,
+        this.catharticalness,
+        this.centaurid,
+        this.chirotherium,
+        this.disdiapason,
+        this.flix,
+        this.germanely,
+        this.homocerc,
+        this.inhume,
+        this.lepidote,
+        this.megalochirous,
+        this.ninepenny,
+        this.nonbookish,
+        this.nondeist,
+        this.nymphaeaceous,
+        this.parietofrontal,
+        this.sancyite,
+        this.subjectivist,
+        this.tibiad,
+        this.transonic,
+        this.tripetalous,
+        this.trunchman,
+        this.urger,
+        this.withdrawnness,
+    });
+
+    factory SaxtenClass.fromMap(Map<String, dynamic> json) => SaxtenClass(
+        algarrobilla: json["algarrobilla"],
+        bowgrace: json["bowgrace"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        centaurid: json["Centaurid"],
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        flix: json["flix"],
+        germanely: json["germanely"],
+        homocerc: json["homocerc"],
+        inhume: json["inhume"],
+        lepidote: json["lepidote"],
+        megalochirous: json["megalochirous"],
+        ninepenny: json["ninepenny"],
+        nonbookish: json["nonbookish"],
+        nondeist: json["nondeist"],
+        nymphaeaceous: json["nymphaeaceous"],
+        parietofrontal: json["parietofrontal"],
+        sancyite: json["sancyite"],
+        subjectivist: json["subjectivist"],
+        tibiad: json["tibiad"],
+        transonic: json["transonic"],
+        tripetalous: json["tripetalous"],
+        trunchman: json["trunchman"],
+        urger: json["urger"],
+        withdrawnness: json["withdrawnness"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "algarrobilla": algarrobilla,
+        "bowgrace": bowgrace,
+        "catharticalness": catharticalness,
+        "Centaurid": centaurid,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "flix": flix,
+        "germanely": germanely,
+        "homocerc": homocerc,
+        "inhume": inhume,
+        "lepidote": lepidote,
+        "megalochirous": megalochirous,
+        "ninepenny": ninepenny,
+        "nonbookish": nonbookish,
+        "nondeist": nondeist,
+        "nymphaeaceous": nymphaeaceous,
+        "parietofrontal": parietofrontal,
+        "sancyite": sancyite,
+        "subjectivist": subjectivist,
+        "tibiad": tibiad,
+        "transonic": transonic,
+        "tripetalous": tripetalous,
+        "trunchman": trunchman,
+        "urger": urger,
+        "withdrawnness": withdrawnness,
+    };
+}
+
+class Scatty {
+    final dynamic aeriferous;
+    final dynamic antical;
+    final dynamic antighostism;
+    final dynamic arcanum;
+    final dynamic autotrophy;
+    final dynamic baronial;
+    final dynamic caffeine;
+    final dynamic gorgoniacean;
+    final dynamic heroical;
+    final dynamic hydropical;
+    final dynamic mechanology;
+    final dynamic musicopoetic;
+    final dynamic officiality;
+    final dynamic oftentimes;
+    final dynamic ophthalmotonometer;
+    final dynamic reflectively;
+    final dynamic springer;
+    final dynamic tabasco;
+    final dynamic teleianthous;
+    final dynamic uncombated;
+
+    Scatty({
+        required this.aeriferous,
+        required this.antical,
+        required this.antighostism,
+        required this.arcanum,
+        required this.autotrophy,
+        required this.baronial,
+        required this.caffeine,
+        required this.gorgoniacean,
+        required this.heroical,
+        required this.hydropical,
+        required this.mechanology,
+        required this.musicopoetic,
+        required this.officiality,
+        required this.oftentimes,
+        required this.ophthalmotonometer,
+        required this.reflectively,
+        required this.springer,
+        required this.tabasco,
+        required this.teleianthous,
+        required this.uncombated,
+    });
+
+    factory Scatty.fromMap(Map<String, dynamic> json) => Scatty(
+        aeriferous: (json.containsKey("aeriferous") ? json["aeriferous"] : throw FormatException('Missing required property')),
+        antical: (json.containsKey("antical") ? json["antical"] : throw FormatException('Missing required property')),
+        antighostism: (json.containsKey("antighostism") ? json["antighostism"] : throw FormatException('Missing required property')),
+        arcanum: (json.containsKey("arcanum") ? json["arcanum"] : throw FormatException('Missing required property')),
+        autotrophy: (json.containsKey("autotrophy") ? json["autotrophy"] : throw FormatException('Missing required property')),
+        baronial: (json.containsKey("baronial") ? json["baronial"] : throw FormatException('Missing required property')),
+        caffeine: (json.containsKey("caffeine") ? json["caffeine"] : throw FormatException('Missing required property')),
+        gorgoniacean: (json.containsKey("gorgoniacean") ? json["gorgoniacean"] : throw FormatException('Missing required property')),
+        heroical: (json.containsKey("heroical") ? json["heroical"] : throw FormatException('Missing required property')),
+        hydropical: (json.containsKey("hydropical") ? json["hydropical"] : throw FormatException('Missing required property')),
+        mechanology: (json.containsKey("mechanology") ? json["mechanology"] : throw FormatException('Missing required property')),
+        musicopoetic: (json.containsKey("musicopoetic") ? json["musicopoetic"] : throw FormatException('Missing required property')),
+        officiality: (json.containsKey("officiality") ? json["officiality"] : throw FormatException('Missing required property')),
+        oftentimes: (json.containsKey("oftentimes") ? json["oftentimes"] : throw FormatException('Missing required property')),
+        ophthalmotonometer: (json.containsKey("ophthalmotonometer") ? json["ophthalmotonometer"] : throw FormatException('Missing required property')),
+        reflectively: (json.containsKey("reflectively") ? json["reflectively"] : throw FormatException('Missing required property')),
+        springer: (json.containsKey("springer") ? json["springer"] : throw FormatException('Missing required property')),
+        tabasco: (json.containsKey("Tabasco") ? json["Tabasco"] : throw FormatException('Missing required property')),
+        teleianthous: (json.containsKey("teleianthous") ? json["teleianthous"] : throw FormatException('Missing required property')),
+        uncombated: (json.containsKey("uncombated") ? json["uncombated"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "aeriferous": aeriferous,
+        "antical": antical,
+        "antighostism": antighostism,
+        "arcanum": arcanum,
+        "autotrophy": autotrophy,
+        "baronial": baronial,
+        "caffeine": caffeine,
+        "gorgoniacean": gorgoniacean,
+        "heroical": heroical,
+        "hydropical": hydropical,
+        "mechanology": mechanology,
+        "musicopoetic": musicopoetic,
+        "officiality": officiality,
+        "oftentimes": oftentimes,
+        "ophthalmotonometer": ophthalmotonometer,
+        "reflectively": reflectively,
+        "springer": springer,
+        "Tabasco": tabasco,
+        "teleianthous": teleianthous,
+        "uncombated": uncombated,
+    };
+}
+
+class SisteringClass {
+    final dynamic amphicarpic;
+    final dynamic chianti;
+    final dynamic frigorific;
+    final dynamic haplomi;
+    final dynamic hyperkinesis;
+    final dynamic laudable;
+    final dynamic madwoman;
+    final dynamic maimedly;
+    final dynamic micropterygidae;
+    final dynamic microrhabdus;
+    final dynamic nondense;
+    final dynamic phlebemphraxis;
+    final dynamic redsear;
+    final dynamic schismatical;
+    final dynamic tartryl;
+    final dynamic unabhorred;
+    final dynamic undeliberateness;
+    final dynamic unmixable;
+    final dynamic untruckling;
+    final dynamic vineal;
+
+    SisteringClass({
+        required this.amphicarpic,
+        required this.chianti,
+        required this.frigorific,
+        required this.haplomi,
+        required this.hyperkinesis,
+        required this.laudable,
+        required this.madwoman,
+        required this.maimedly,
+        required this.micropterygidae,
+        required this.microrhabdus,
+        required this.nondense,
+        required this.phlebemphraxis,
+        required this.redsear,
+        required this.schismatical,
+        required this.tartryl,
+        required this.unabhorred,
+        required this.undeliberateness,
+        required this.unmixable,
+        required this.untruckling,
+        required this.vineal,
+    });
+
+    factory SisteringClass.fromMap(Map<String, dynamic> json) => SisteringClass(
+        amphicarpic: (json.containsKey("amphicarpic") ? json["amphicarpic"] : throw FormatException('Missing required property')),
+        chianti: (json.containsKey("Chianti") ? json["Chianti"] : throw FormatException('Missing required property')),
+        frigorific: (json.containsKey("frigorific") ? json["frigorific"] : throw FormatException('Missing required property')),
+        haplomi: (json.containsKey("Haplomi") ? json["Haplomi"] : throw FormatException('Missing required property')),
+        hyperkinesis: (json.containsKey("hyperkinesis") ? json["hyperkinesis"] : throw FormatException('Missing required property')),
+        laudable: (json.containsKey("laudable") ? json["laudable"] : throw FormatException('Missing required property')),
+        madwoman: (json.containsKey("madwoman") ? json["madwoman"] : throw FormatException('Missing required property')),
+        maimedly: (json.containsKey("maimedly") ? json["maimedly"] : throw FormatException('Missing required property')),
+        micropterygidae: (json.containsKey("Micropterygidae") ? json["Micropterygidae"] : throw FormatException('Missing required property')),
+        microrhabdus: (json.containsKey("microrhabdus") ? json["microrhabdus"] : throw FormatException('Missing required property')),
+        nondense: (json.containsKey("nondense") ? json["nondense"] : throw FormatException('Missing required property')),
+        phlebemphraxis: (json.containsKey("phlebemphraxis") ? json["phlebemphraxis"] : throw FormatException('Missing required property')),
+        redsear: (json.containsKey("redsear") ? json["redsear"] : throw FormatException('Missing required property')),
+        schismatical: (json.containsKey("schismatical") ? json["schismatical"] : throw FormatException('Missing required property')),
+        tartryl: (json.containsKey("tartryl") ? json["tartryl"] : throw FormatException('Missing required property')),
+        unabhorred: (json.containsKey("unabhorred") ? json["unabhorred"] : throw FormatException('Missing required property')),
+        undeliberateness: (json.containsKey("undeliberateness") ? json["undeliberateness"] : throw FormatException('Missing required property')),
+        unmixable: (json.containsKey("unmixable") ? json["unmixable"] : throw FormatException('Missing required property')),
+        untruckling: (json.containsKey("untruckling") ? json["untruckling"] : throw FormatException('Missing required property')),
+        vineal: (json.containsKey("vineal") ? json["vineal"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "amphicarpic": amphicarpic,
+        "Chianti": chianti,
+        "frigorific": frigorific,
+        "Haplomi": haplomi,
+        "hyperkinesis": hyperkinesis,
+        "laudable": laudable,
+        "madwoman": madwoman,
+        "maimedly": maimedly,
+        "Micropterygidae": micropterygidae,
+        "microrhabdus": microrhabdus,
+        "nondense": nondense,
+        "phlebemphraxis": phlebemphraxis,
+        "redsear": redsear,
+        "schismatical": schismatical,
+        "tartryl": tartryl,
+        "unabhorred": unabhorred,
+        "undeliberateness": undeliberateness,
+        "unmixable": unmixable,
+        "untruckling": untruckling,
+        "vineal": vineal,
+    };
+}
+
+class Staghunting {
+    final int? calorimetric;
+    final int? canid;
+    final double? catharticalness;
+    final int? chirotherium;
+    final String? disdiapason;
+    final int? ditriglyphic;
+    final int? floriferousness;
+    final int? gamelike;
+    final int? grig;
+    final bool? homocerc;
+    final int? interloan;
+    final int? lithotomy;
+    final int? loric;
+    final int? membranocoriaceous;
+    final int? membranogenic;
+    final dynamic nonbookish;
+    final int? overtrump;
+    final int? scotino;
+    final int? seasonable;
+    final int? sephen;
+    final int? stigmarioid;
+    final int? tired;
+    final int? trifid;
+    final int? undefeatedly;
+    final int? ungirlish;
+
+    Staghunting({
+        this.calorimetric,
+        this.canid,
+        this.catharticalness,
+        this.chirotherium,
+        this.disdiapason,
+        this.ditriglyphic,
+        this.floriferousness,
+        this.gamelike,
+        this.grig,
+        this.homocerc,
+        this.interloan,
+        this.lithotomy,
+        this.loric,
+        this.membranocoriaceous,
+        this.membranogenic,
+        this.nonbookish,
+        this.overtrump,
+        this.scotino,
+        this.seasonable,
+        this.sephen,
+        this.stigmarioid,
+        this.tired,
+        this.trifid,
+        this.undefeatedly,
+        this.ungirlish,
+    });
+
+    factory Staghunting.fromMap(Map<String, dynamic> json) => Staghunting(
+        calorimetric: json["calorimetric"],
+        canid: json["canid"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        disdiapason: json["disdiapason"],
+        ditriglyphic: json["ditriglyphic"],
+        floriferousness: json["floriferousness"],
+        gamelike: json["gamelike"],
+        grig: json["grig"],
+        homocerc: json["homocerc"],
+        interloan: json["interloan"],
+        lithotomy: json["lithotomy"],
+        loric: json["loric"],
+        membranocoriaceous: json["membranocoriaceous"],
+        membranogenic: json["membranogenic"],
+        nonbookish: json["nonbookish"],
+        overtrump: json["overtrump"],
+        scotino: json["scotino"],
+        seasonable: json["seasonable"],
+        sephen: json["sephen"],
+        stigmarioid: json["stigmarioid"],
+        tired: json["tired"],
+        trifid: json["trifid"],
+        undefeatedly: json["undefeatedly"],
+        ungirlish: json["ungirlish"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "calorimetric": calorimetric,
+        "canid": canid,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "disdiapason": disdiapason,
+        "ditriglyphic": ditriglyphic,
+        "floriferousness": floriferousness,
+        "gamelike": gamelike,
+        "grig": grig,
+        "homocerc": homocerc,
+        "interloan": interloan,
+        "lithotomy": lithotomy,
+        "loric": loric,
+        "membranocoriaceous": membranocoriaceous,
+        "membranogenic": membranogenic,
+        "nonbookish": nonbookish,
+        "overtrump": overtrump,
+        "scotino": scotino,
+        "seasonable": seasonable,
+        "sephen": sephen,
+        "stigmarioid": stigmarioid,
+        "tired": tired,
+        "trifid": trifid,
+        "undefeatedly": undefeatedly,
+        "ungirlish": ungirlish,
+    };
+}
+
+class StrenuosityClass {
+    final int? bliss;
+    final int? buccate;
+    final int? bulletproof;
+    final double? catharticalness;
+    final int? chirotherium;
+    final int? crumblingness;
+    final String? disdiapason;
+    final int? engagedly;
+    final int? fightable;
+    final int? hoariness;
+    final bool? homocerc;
+    final int? hypopodium;
+    final int? luxurist;
+    final int? mechanician;
+    final dynamic nonbookish;
+    final int? onopordon;
+    final int? podgily;
+    final int? reformableness;
+    final int? scatterbrains;
+    final int? seminuria;
+    final int? sodomite;
+    final int? tramp;
+    final int? undueness;
+    final int? worthily;
+    final int? yankeeist;
+
+    StrenuosityClass({
+        this.bliss,
+        this.buccate,
+        this.bulletproof,
+        this.catharticalness,
+        this.chirotherium,
+        this.crumblingness,
+        this.disdiapason,
+        this.engagedly,
+        this.fightable,
+        this.hoariness,
+        this.homocerc,
+        this.hypopodium,
+        this.luxurist,
+        this.mechanician,
+        this.nonbookish,
+        this.onopordon,
+        this.podgily,
+        this.reformableness,
+        this.scatterbrains,
+        this.seminuria,
+        this.sodomite,
+        this.tramp,
+        this.undueness,
+        this.worthily,
+        this.yankeeist,
+    });
+
+    factory StrenuosityClass.fromMap(Map<String, dynamic> json) => StrenuosityClass(
+        bliss: json["bliss"],
+        buccate: json["buccate"],
+        bulletproof: json["bulletproof"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        crumblingness: json["crumblingness"],
+        disdiapason: json["disdiapason"],
+        engagedly: json["engagedly"],
+        fightable: json["fightable"],
+        hoariness: json["hoariness"],
+        homocerc: json["homocerc"],
+        hypopodium: json["hypopodium"],
+        luxurist: json["luxurist"],
+        mechanician: json["mechanician"],
+        nonbookish: json["nonbookish"],
+        onopordon: json["Onopordon"],
+        podgily: json["podgily"],
+        reformableness: json["reformableness"],
+        scatterbrains: json["scatterbrains"],
+        seminuria: json["seminuria"],
+        sodomite: json["Sodomite"],
+        tramp: json["tramp"],
+        undueness: json["undueness"],
+        worthily: json["worthily"],
+        yankeeist: json["Yankeeist"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "bliss": bliss,
+        "buccate": buccate,
+        "bulletproof": bulletproof,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "crumblingness": crumblingness,
+        "disdiapason": disdiapason,
+        "engagedly": engagedly,
+        "fightable": fightable,
+        "hoariness": hoariness,
+        "homocerc": homocerc,
+        "hypopodium": hypopodium,
+        "luxurist": luxurist,
+        "mechanician": mechanician,
+        "nonbookish": nonbookish,
+        "Onopordon": onopordon,
+        "podgily": podgily,
+        "reformableness": reformableness,
+        "scatterbrains": scatterbrains,
+        "seminuria": seminuria,
+        "Sodomite": sodomite,
+        "tramp": tramp,
+        "undueness": undueness,
+        "worthily": worthily,
+        "Yankeeist": yankeeist,
+    };
+}
+
+class TruantcyClass {
+    final dynamic alfiona;
+    final dynamic ascaridiasis;
+    final dynamic bungey;
+    final double? catharticalness;
+    final dynamic ceroxyle;
+    final int? chirotherium;
+    final dynamic chorology;
+    final String? disdiapason;
+    final dynamic enmarble;
+    final dynamic epeira;
+    final dynamic eurylaimi;
+    final dynamic germination;
+    final dynamic hallelujah;
+    final bool? homocerc;
+    final dynamic lev;
+    final dynamic mouthing;
+    final dynamic nonbookish;
+    final dynamic philliloo;
+    final dynamic planetal;
+    final dynamic poney;
+    final dynamic punctualist;
+    final dynamic returnlessly;
+    final dynamic skelder;
+    final dynamic windwaywardly;
+    final dynamic yuman;
+
+    TruantcyClass({
+        this.alfiona,
+        this.ascaridiasis,
+        this.bungey,
+        this.catharticalness,
+        this.ceroxyle,
+        this.chirotherium,
+        this.chorology,
+        this.disdiapason,
+        this.enmarble,
+        this.epeira,
+        this.eurylaimi,
+        this.germination,
+        this.hallelujah,
+        this.homocerc,
+        this.lev,
+        this.mouthing,
+        this.nonbookish,
+        this.philliloo,
+        this.planetal,
+        this.poney,
+        this.punctualist,
+        this.returnlessly,
+        this.skelder,
+        this.windwaywardly,
+        this.yuman,
+    });
+
+    factory TruantcyClass.fromMap(Map<String, dynamic> json) => TruantcyClass(
+        alfiona: json["alfiona"],
+        ascaridiasis: json["ascaridiasis"],
+        bungey: json["bungey"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        ceroxyle: json["ceroxyle"],
+        chirotherium: json["Chirotherium"],
+        chorology: json["chorology"],
+        disdiapason: json["disdiapason"],
+        enmarble: json["enmarble"],
+        epeira: json["Epeira"],
+        eurylaimi: json["Eurylaimi"],
+        germination: json["germination"],
+        hallelujah: json["hallelujah"],
+        homocerc: json["homocerc"],
+        lev: json["lev"],
+        mouthing: json["mouthing"],
+        nonbookish: json["nonbookish"],
+        philliloo: json["philliloo"],
+        planetal: json["planetal"],
+        poney: json["poney"],
+        punctualist: json["punctualist"],
+        returnlessly: json["returnlessly"],
+        skelder: json["skelder"],
+        windwaywardly: json["windwaywardly"],
+        yuman: json["Yuman"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "alfiona": alfiona,
+        "ascaridiasis": ascaridiasis,
+        "bungey": bungey,
+        "catharticalness": catharticalness,
+        "ceroxyle": ceroxyle,
+        "Chirotherium": chirotherium,
+        "chorology": chorology,
+        "disdiapason": disdiapason,
+        "enmarble": enmarble,
+        "Epeira": epeira,
+        "Eurylaimi": eurylaimi,
+        "germination": germination,
+        "hallelujah": hallelujah,
+        "homocerc": homocerc,
+        "lev": lev,
+        "mouthing": mouthing,
+        "nonbookish": nonbookish,
+        "philliloo": philliloo,
+        "planetal": planetal,
+        "poney": poney,
+        "punctualist": punctualist,
+        "returnlessly": returnlessly,
+        "skelder": skelder,
+        "windwaywardly": windwaywardly,
+        "Yuman": yuman,
+    };
+}
+
+class UnimpeachablyClass {
+    final int? acerin;
+    final int? bobadil;
+    final double? catharticalness;
+    final int? chirotherium;
+    final int? chlorophylligenous;
+    final int? conversational;
+    final int? demiowl;
+    final String? disdiapason;
+    final int? ectorhinal;
+    final int? gamblesomeness;
+    final bool? homocerc;
+    final int? irrorate;
+    final int? kindergartening;
+    final int? lateritic;
+    final int? mespil;
+    final int? misconfiguration;
+    final dynamic nonbookish;
+    final int? planometry;
+    final int? quiina;
+    final int? robert;
+    final int? rot;
+    final int? subcinctorium;
+    final int? tussocker;
+    final int? ultraproud;
+    final int? unsuggestedness;
+
+    UnimpeachablyClass({
+        this.acerin,
+        this.bobadil,
+        this.catharticalness,
+        this.chirotherium,
+        this.chlorophylligenous,
+        this.conversational,
+        this.demiowl,
+        this.disdiapason,
+        this.ectorhinal,
+        this.gamblesomeness,
+        this.homocerc,
+        this.irrorate,
+        this.kindergartening,
+        this.lateritic,
+        this.mespil,
+        this.misconfiguration,
+        this.nonbookish,
+        this.planometry,
+        this.quiina,
+        this.robert,
+        this.rot,
+        this.subcinctorium,
+        this.tussocker,
+        this.ultraproud,
+        this.unsuggestedness,
+    });
+
+    factory UnimpeachablyClass.fromMap(Map<String, dynamic> json) => UnimpeachablyClass(
+        acerin: json["acerin"],
+        bobadil: json["Bobadil"],
+        catharticalness: json["catharticalness"]?.toDouble(),
+        chirotherium: json["Chirotherium"],
+        chlorophylligenous: json["chlorophylligenous"],
+        conversational: json["conversational"],
+        demiowl: json["demiowl"],
+        disdiapason: json["disdiapason"],
+        ectorhinal: json["ectorhinal"],
+        gamblesomeness: json["gamblesomeness"],
+        homocerc: json["homocerc"],
+        irrorate: json["irrorate"],
+        kindergartening: json["kindergartening"],
+        lateritic: json["lateritic"],
+        mespil: json["mespil"],
+        misconfiguration: json["misconfiguration"],
+        nonbookish: json["nonbookish"],
+        planometry: json["planometry"],
+        quiina: json["Quiina"],
+        robert: json["Robert"],
+        rot: json["rot"],
+        subcinctorium: json["subcinctorium"],
+        tussocker: json["tussocker"],
+        ultraproud: json["ultraproud"],
+        unsuggestedness: json["unsuggestedness"],
+    );
+
+    Map<String, dynamic> toMap() => {
+        "acerin": acerin,
+        "Bobadil": bobadil,
+        "catharticalness": catharticalness,
+        "Chirotherium": chirotherium,
+        "chlorophylligenous": chlorophylligenous,
+        "conversational": conversational,
+        "demiowl": demiowl,
+        "disdiapason": disdiapason,
+        "ectorhinal": ectorhinal,
+        "gamblesomeness": gamblesomeness,
+        "homocerc": homocerc,
+        "irrorate": irrorate,
+        "kindergartening": kindergartening,
+        "lateritic": lateritic,
+        "mespil": mespil,
+        "misconfiguration": misconfiguration,
+        "nonbookish": nonbookish,
+        "planometry": planometry,
+        "Quiina": quiina,
+        "Robert": robert,
+        "rot": rot,
+        "subcinctorium": subcinctorium,
+        "tussocker": tussocker,
+        "ultraproud": ultraproud,
+        "unsuggestedness": unsuggestedness,
+    };
+}
+
+class UnstressedClass {
+    final dynamic alain;
+    final dynamic amphirhina;
+    final dynamic antimachinery;
+    final dynamic coldish;
+    final dynamic crantara;
+    final dynamic distinguishing;
+    final dynamic elytroposis;
+    final dynamic gentianwort;
+    final dynamic heliosis;
+    final dynamic instrumental;
+    final dynamic introinflection;
+    final dynamic kala;
+    final dynamic lincolnian;
+    final dynamic metad;
+    final dynamic sarcophilus;
+    final dynamic swingingly;
+    final dynamic unconformity;
+    final dynamic undecreed;
+    final dynamic venerable;
+    final dynamic vowellessness;
+
+    UnstressedClass({
+        required this.alain,
+        required this.amphirhina,
+        required this.antimachinery,
+        required this.coldish,
+        required this.crantara,
+        required this.distinguishing,
+        required this.elytroposis,
+        required this.gentianwort,
+        required this.heliosis,
+        required this.instrumental,
+        required this.introinflection,
+        required this.kala,
+        required this.lincolnian,
+        required this.metad,
+        required this.sarcophilus,
+        required this.swingingly,
+        required this.unconformity,
+        required this.undecreed,
+        required this.venerable,
+        required this.vowellessness,
+    });
+
+    factory UnstressedClass.fromMap(Map<String, dynamic> json) => UnstressedClass(
+        alain: (json.containsKey("Alain") ? json["Alain"] : throw FormatException('Missing required property')),
+        amphirhina: (json.containsKey("Amphirhina") ? json["Amphirhina"] : throw FormatException('Missing required property')),
+        antimachinery: (json.containsKey("antimachinery") ? json["antimachinery"] : throw FormatException('Missing required property')),
+        coldish: (json.containsKey("coldish") ? json["coldish"] : throw FormatException('Missing required property')),
+        crantara: (json.containsKey("crantara") ? json["crantara"] : throw FormatException('Missing required property')),
+        distinguishing: (json.containsKey("distinguishing") ? json["distinguishing"] : throw FormatException('Missing required property')),
+        elytroposis: (json.containsKey("elytroposis") ? json["elytroposis"] : throw FormatException('Missing required property')),
+        gentianwort: (json.containsKey("gentianwort") ? json["gentianwort"] : throw FormatException('Missing required property')),
+        heliosis: (json.containsKey("heliosis") ? json["heliosis"] : throw FormatException('Missing required property')),
+        instrumental: (json.containsKey("instrumental") ? json["instrumental"] : throw FormatException('Missing required property')),
+        introinflection: (json.containsKey("introinflection") ? json["introinflection"] : throw FormatException('Missing required property')),
+        kala: (json.containsKey("kala") ? json["kala"] : throw FormatException('Missing required property')),
+        lincolnian: (json.containsKey("Lincolnian") ? json["Lincolnian"] : throw FormatException('Missing required property')),
+        metad: (json.containsKey("metad") ? json["metad"] : throw FormatException('Missing required property')),
+        sarcophilus: (json.containsKey("Sarcophilus") ? json["Sarcophilus"] : throw FormatException('Missing required property')),
+        swingingly: (json.containsKey("swingingly") ? json["swingingly"] : throw FormatException('Missing required property')),
+        unconformity: (json.containsKey("unconformity") ? json["unconformity"] : throw FormatException('Missing required property')),
+        undecreed: (json.containsKey("undecreed") ? json["undecreed"] : throw FormatException('Missing required property')),
+        venerable: (json.containsKey("venerable") ? json["venerable"] : throw FormatException('Missing required property')),
+        vowellessness: (json.containsKey("vowellessness") ? json["vowellessness"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "Alain": alain,
+        "Amphirhina": amphirhina,
+        "antimachinery": antimachinery,
+        "coldish": coldish,
+        "crantara": crantara,
+        "distinguishing": distinguishing,
+        "elytroposis": elytroposis,
+        "gentianwort": gentianwort,
+        "heliosis": heliosis,
+        "instrumental": instrumental,
+        "introinflection": introinflection,
+        "kala": kala,
+        "Lincolnian": lincolnian,
+        "metad": metad,
+        "Sarcophilus": sarcophilus,
+        "swingingly": swingingly,
+        "unconformity": unconformity,
+        "undecreed": undecreed,
+        "venerable": venerable,
+        "vowellessness": vowellessness,
+    };
+}
+
+class WrothyClass {
+    final dynamic aeschynanthus;
+    final dynamic aquiferous;
+    final dynamic cheapener;
+    final dynamic enumeration;
+    final dynamic ephesine;
+    final dynamic escadrille;
+    final dynamic estrous;
+    final dynamic interestedly;
+    final dynamic katakinetomer;
+    final dynamic mortification;
+    final dynamic morula;
+    final dynamic orthosymmetrical;
+    final dynamic overbark;
+    final dynamic politist;
+    final dynamic qualified;
+    final dynamic sphenomalar;
+    final dynamic throatful;
+    final dynamic transhumance;
+    final dynamic triandrian;
+    final dynamic unbooked;
+
+    WrothyClass({
+        required this.aeschynanthus,
+        required this.aquiferous,
+        required this.cheapener,
+        required this.enumeration,
+        required this.ephesine,
+        required this.escadrille,
+        required this.estrous,
+        required this.interestedly,
+        required this.katakinetomer,
+        required this.mortification,
+        required this.morula,
+        required this.orthosymmetrical,
+        required this.overbark,
+        required this.politist,
+        required this.qualified,
+        required this.sphenomalar,
+        required this.throatful,
+        required this.transhumance,
+        required this.triandrian,
+        required this.unbooked,
+    });
+
+    factory WrothyClass.fromMap(Map<String, dynamic> json) => WrothyClass(
+        aeschynanthus: (json.containsKey("Aeschynanthus") ? json["Aeschynanthus"] : throw FormatException('Missing required property')),
+        aquiferous: (json.containsKey("aquiferous") ? json["aquiferous"] : throw FormatException('Missing required property')),
+        cheapener: (json.containsKey("cheapener") ? json["cheapener"] : throw FormatException('Missing required property')),
+        enumeration: (json.containsKey("enumeration") ? json["enumeration"] : throw FormatException('Missing required property')),
+        ephesine: (json.containsKey("Ephesine") ? json["Ephesine"] : throw FormatException('Missing required property')),
+        escadrille: (json.containsKey("escadrille") ? json["escadrille"] : throw FormatException('Missing required property')),
+        estrous: (json.containsKey("estrous") ? json["estrous"] : throw FormatException('Missing required property')),
+        interestedly: (json.containsKey("interestedly") ? json["interestedly"] : throw FormatException('Missing required property')),
+        katakinetomer: (json.containsKey("katakinetomer") ? json["katakinetomer"] : throw FormatException('Missing required property')),
+        mortification: (json.containsKey("mortification") ? json["mortification"] : throw FormatException('Missing required property')),
+        morula: (json.containsKey("morula") ? json["morula"] : throw FormatException('Missing required property')),
+        orthosymmetrical: (json.containsKey("orthosymmetrical") ? json["orthosymmetrical"] : throw FormatException('Missing required property')),
+        overbark: (json.containsKey("overbark") ? json["overbark"] : throw FormatException('Missing required property')),
+        politist: (json.containsKey("politist") ? json["politist"] : throw FormatException('Missing required property')),
+        qualified: (json.containsKey("qualified") ? json["qualified"] : throw FormatException('Missing required property')),
+        sphenomalar: (json.containsKey("sphenomalar") ? json["sphenomalar"] : throw FormatException('Missing required property')),
+        throatful: (json.containsKey("throatful") ? json["throatful"] : throw FormatException('Missing required property')),
+        transhumance: (json.containsKey("transhumance") ? json["transhumance"] : throw FormatException('Missing required property')),
+        triandrian: (json.containsKey("triandrian") ? json["triandrian"] : throw FormatException('Missing required property')),
+        unbooked: (json.containsKey("unbooked") ? json["unbooked"] : throw FormatException('Missing required property')),
+    );
+
+    Map<String, dynamic> toMap() => {
+        "Aeschynanthus": aeschynanthus,
+        "aquiferous": aquiferous,
+        "cheapener": cheapener,
+        "enumeration": enumeration,
+        "Ephesine": ephesine,
+        "escadrille": escadrille,
+        "estrous": estrous,
+        "interestedly": interestedly,
+        "katakinetomer": katakinetomer,
+        "mortification": mortification,
+        "morula": morula,
+        "orthosymmetrical": orthosymmetrical,
+        "overbark": overbark,
+        "politist": politist,
+        "qualified": qualified,
+        "sphenomalar": sphenomalar,
+        "throatful": throatful,
+        "transhumance": transhumance,
+        "triandrian": triandrian,
+        "unbooked": unbooked,
+    };
+}
diff --git a/base/dart/test/inputs/json/priority/keywords.json/default/TopLevel.dart b/head/dart/test/inputs/json/priority/keywords.json/default/TopLevel.dart
index e011b3d..5d004bc 100644
--- a/base/dart/test/inputs/json/priority/keywords.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/priority/keywords.json/default/TopLevel.dart
@@ -4024,6 +4024,7 @@ class Obj4 {
     final Retain retain;
     final Rethrows rethrows;
     final Right right;
+    final S s;
     final Sbyte sbyte;
     final Sealed sealed;
     final Sel sel;
@@ -4091,6 +4092,7 @@ class Obj4 {
         required this.retain,
         required this.rethrows,
         required this.right,
+        required this.s,
         required this.sbyte,
         required this.sealed,
         required this.sel,
@@ -4159,6 +4161,7 @@ class Obj4 {
         retain: Retain.fromJson(json["retain"]),
         rethrows: Rethrows.fromJson(json["rethrows"]),
         right: Right.fromJson(json["right"]),
+        s: S.fromJson(json["s"]),
         sbyte: Sbyte.fromJson(json["sbyte"]),
         sealed: Sealed.fromJson(json["sealed"]),
         sel: Sel.fromJson(json["SEL"]),
@@ -4227,6 +4230,7 @@ class Obj4 {
         "retain": retain.toJson(),
         "rethrows": rethrows.toJson(),
         "right": right.toJson(),
+        "s": s.toJson(),
         "sbyte": sbyte.toJson(),
         "sealed": sealed.toJson(),
         "SEL": sel.toJson(),
@@ -4744,6 +4748,22 @@ class Right {
     };
 }
 
+class S {
+    final int s;
+
+    S({
+        required this.s,
+    });
+
+    factory S.fromJson(Map<String, dynamic> json) => S(
+        s: json["s"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "s": s,
+    };
+}
+
 class Sbyte {
     final int sbyte;
 
diff --git a/base/dart/test/inputs/json/priority/uuids.json/default/TopLevel.dart b/head/dart/test/inputs/json/priority/uuids.json/default/TopLevel.dart
index 1d731e2..e7af7dd 100644
--- a/base/dart/test/inputs/json/priority/uuids.json/default/TopLevel.dart
+++ b/head/dart/test/inputs/json/priority/uuids.json/default/TopLevel.dart
@@ -30,8 +30,8 @@ class TopLevel {
         doubleValue: json["doubleValue"]?.toDouble(),
         intValue: json["intValue"],
         stringValue: json["stringValue"],
-        uuidValue: json["uuidValue"],
-        uuidValues: List<String>.from(json["uuidValues"].map((x) => x)),
+        uuidValue: ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(json["uuidValue"]),
+        uuidValues: List<String>.from(json["uuidValues"].map((x) => ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(x))),
     );
 
     Map<String, dynamic> toJson() => {
diff --git a/head/dart/test/inputs/json/samples/copy-with-property.json/copy-with-true--bb7e994c05fe/TopLevel.dart b/head/dart/test/inputs/json/samples/copy-with-property.json/copy-with-true--bb7e994c05fe/TopLevel.dart
new file mode 100644
index 0000000..1b4ac80
--- /dev/null
+++ b/head/dart/test/inputs/json/samples/copy-with-property.json/copy-with-true--bb7e994c05fe/TopLevel.dart
@@ -0,0 +1,38 @@
+// To parse this JSON data, do
+//
+//     final topLevel = topLevelFromJson(jsonString);
+
+import 'dart:convert';
+
+TopLevel topLevelFromJson(String str) => TopLevel.fromJson(json.decode(str));
+
+String topLevelToJson(TopLevel data) => json.encode(data.toJson());
+
+class TopLevel {
+    final String name;
+    final int topLevelCopyWith;
+
+    TopLevel({
+        required this.name,
+        required this.topLevelCopyWith,
+    });
+
+    TopLevel copyWith({
+        String? name,
+        int? topLevelCopyWith,
+    }) => 
+        TopLevel(
+            name: name ?? this.name,
+            topLevelCopyWith: topLevelCopyWith ?? this.topLevelCopyWith,
+        );
+
+    factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
+        name: json["name"],
+        topLevelCopyWith: json["copyWith"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "name": name,
+        "copyWith": topLevelCopyWith,
+    };
+}
diff --git a/head/dart/test/inputs/json/samples/copy-with-property.json/default/TopLevel.dart b/head/dart/test/inputs/json/samples/copy-with-property.json/default/TopLevel.dart
new file mode 100644
index 0000000..79c6d57
--- /dev/null
+++ b/head/dart/test/inputs/json/samples/copy-with-property.json/default/TopLevel.dart
@@ -0,0 +1,29 @@
+// To parse this JSON data, do
+//
+//     final topLevel = topLevelFromJson(jsonString);
+
+import 'dart:convert';
+
+TopLevel topLevelFromJson(String str) => TopLevel.fromJson(json.decode(str));
+
+String topLevelToJson(TopLevel data) => json.encode(data.toJson());
+
+class TopLevel {
+    final int copyWith;
+    final String name;
+
+    TopLevel({
+        required this.copyWith,
+        required this.name,
+    });
+
+    factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
+        copyWith: json["copyWith"],
+        name: json["name"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "copyWith": copyWith,
+        "name": name,
+    };
+}
diff --git a/head/dart/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.dart b/head/dart/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.dart
new file mode 100644
index 0000000..6816575
--- /dev/null
+++ b/head/dart/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.dart
@@ -0,0 +1,51 @@
+// To parse this JSON data, do
+//
+//     final topLevel = topLevelFromJson(jsonString);
+
+import 'dart:convert';
+
+TopLevel topLevelFromJson(String str) => TopLevel.fromJson(json.decode(str));
+
+String topLevelToJson(TopLevel data) => json.encode(data.toJson());
+
+class TopLevel {
+    final String literal;
+    final List<Value> values;
+
+    TopLevel({
+        required this.literal,
+        required this.values,
+    });
+
+    factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
+        literal: json["literal"],
+        values: List<Value>.from(json["values"].map((x) => valueValues.map[x]!)),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "literal": literal,
+        "values": List<dynamic>.from(values.map((x) => valueValues.reverse[x])),
+    };
+}
+
+enum Value {
+    C0,
+    C1
+}
+
+final valueValues = EnumValues({
+    "c0\u0001\u001b\u001f": Value.C0,
+    "c1\u007f\u0080\u0085\u009f": Value.C1
+});
+
+class EnumValues<T> {
+    Map<String, T> map;
+    late Map<T, String> reverseMap;
+
+    EnumValues(this.map);
+
+    Map<T, String> get reverse {
+            reverseMap = map.map((k, v) => MapEntry(v, k));
+            return reverseMap;
+    }
+}
diff --git a/head/dart/test/inputs/json/samples/simple-object.json/required-props-true--48bfba14a57c/TopLevel.dart b/head/dart/test/inputs/json/samples/simple-object.json/required-props-true--48bfba14a57c/TopLevel.dart
new file mode 100644
index 0000000..c9af3a9
--- /dev/null
+++ b/head/dart/test/inputs/json/samples/simple-object.json/required-props-true--48bfba14a57c/TopLevel.dart
@@ -0,0 +1,33 @@
+// To parse this JSON data, do
+//
+//     final topLevel = topLevelFromJson(jsonString);
+
+import 'dart:convert';
+
+TopLevel topLevelFromJson(String str) => TopLevel.fromJson(json.decode(str));
+
+String topLevelToJson(TopLevel data) => json.encode(data.toJson());
+
+class TopLevel {
+    final int date;
+    final String title;
+    final bool validity;
+
+    TopLevel({
+        required this.date,
+        required this.title,
+        required this.validity,
+    });
+
+    factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
+        date: json["date"],
+        title: json["title"],
+        validity: json["validity"],
+    );
+
+    Map<String, dynamic> toJson() => {
+        "date": date,
+        "title": title,
+        "validity": validity,
+    };
+}
diff --git a/base/elixir/test/inputs/json/misc/0a91a.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/0a91a.json/default/QuickType.ex
index eb10b18..cc66c89 100644
--- a/base/elixir/test/inputs/json/misc/0a91a.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/0a91a.json/default/QuickType.ex
@@ -1591,6 +1591,12 @@ defmodule Payload do
   def encode_before(value) when is_binary(value), do: value
   def encode_before(_), do: {:error, "Unexpected type when encoding Payload.before"}
 
+  def decode_distinct_size(value) when is_integer(value), do: value
+  def decode_distinct_size(_), do: {:error, "Unexpected type when decoding Payload.distinct_size"}
+
+  def encode_distinct_size(value) when is_integer(value), do: value
+  def encode_distinct_size(_), do: {:error, "Unexpected type when encoding Payload.distinct_size"}
+
   def decode_head(value) when is_binary(value), do: value
   def decode_head(_), do: {:error, "Unexpected type when decoding Payload.head"}
 
@@ -1603,6 +1609,18 @@ defmodule Payload do
   def encode_master_branch(value) when is_binary(value), do: value
   def encode_master_branch(_), do: {:error, "Unexpected type when encoding Payload.master_branch"}
 
+  def decode_number(value) when is_integer(value), do: value
+  def decode_number(_), do: {:error, "Unexpected type when decoding Payload.number"}
+
+  def encode_number(value) when is_integer(value), do: value
+  def encode_number(_), do: {:error, "Unexpected type when encoding Payload.number"}
+
+  def decode_push_id(value) when is_integer(value), do: value
+  def decode_push_id(_), do: {:error, "Unexpected type when decoding Payload.push_id"}
+
+  def encode_push_id(value) when is_integer(value), do: value
+  def encode_push_id(_), do: {:error, "Unexpected type when encoding Payload.push_id"}
+
   def decode_pusher_type(value) when is_binary(value), do: value
   def decode_pusher_type(_), do: {:error, "Unexpected type when decoding Payload.pusher_type"}
 
@@ -1621,22 +1639,28 @@ defmodule Payload do
   def encode_ref_type(value) when is_binary(value), do: value
   def encode_ref_type(_), do: {:error, "Unexpected type when encoding Payload.ref_type"}
 
+  def decode_size(value) when is_integer(value), do: value
+  def decode_size(_), do: {:error, "Unexpected type when decoding Payload.size"}
+
+  def encode_size(value) when is_integer(value), do: value
+  def encode_size(_), do: {:error, "Unexpected type when encoding Payload.size"}
+
   def from_map(m) do
     %Payload{
       action: m["action"] && decode_action(m["action"]),
       before: m["before"] && decode_before(m["before"]),
       commits: m["commits"] && Enum.map(m["commits"], &Commit.from_map/1),
       description: m["description"],
-      distinct_size: m["distinct_size"],
+      distinct_size: m["distinct_size"] && decode_distinct_size(m["distinct_size"]),
       head: m["head"] && decode_head(m["head"]),
       master_branch: m["master_branch"] && decode_master_branch(m["master_branch"]),
-      number: m["number"],
+      number: m["number"] && decode_number(m["number"]),
       pull_request: m["pull_request"] && PullRequest.from_map(m["pull_request"]),
-      push_id: m["push_id"],
+      push_id: m["push_id"] && decode_push_id(m["push_id"]),
       pusher_type: m["pusher_type"] && decode_pusher_type(m["pusher_type"]),
       ref: m["ref"] && decode_ref(m["ref"]),
       ref_type: m["ref_type"] && decode_ref_type(m["ref_type"]),
-      size: m["size"],
+      size: m["size"] && decode_size(m["size"]),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/misc/26c9c.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/26c9c.json/default/QuickType.ex
index f9bd201..418201b 100644
--- a/base/elixir/test/inputs/json/misc/26c9c.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/26c9c.json/default/QuickType.ex
@@ -265,6 +265,18 @@ defmodule Column do
   def encode_render_type_name(value) when is_binary(value), do: value
   def encode_render_type_name(_), do: {:error, "Unexpected type when encoding Column.render_type_name"}
 
+  def decode_table_column_id(value) when is_integer(value), do: value
+  def decode_table_column_id(_), do: {:error, "Unexpected type when decoding Column.table_column_id"}
+
+  def encode_table_column_id(value) when is_integer(value), do: value
+  def encode_table_column_id(_), do: {:error, "Unexpected type when encoding Column.table_column_id"}
+
+  def decode_width(value) when is_integer(value), do: value
+  def decode_width(_), do: {:error, "Unexpected type when decoding Column.width"}
+
+  def encode_width(value) when is_integer(value), do: value
+  def encode_width(_), do: {:error, "Unexpected type when encoding Column.width"}
+
   def from_map(m) do
     %Column{
       cached_contents: m["cachedContents"] && CachedContents.from_map(m["cachedContents"]),
@@ -276,8 +288,8 @@ defmodule Column do
       name: decode_name(m["name"]),
       position: decode_position(m["position"]),
       render_type_name: decode_render_type_name(m["renderTypeName"]),
-      table_column_id: m["tableColumnId"],
-      width: m["width"],
+      table_column_id: m["tableColumnId"] && decode_table_column_id(m["tableColumnId"]),
+      width: m["width"] && decode_width(m["width"]),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/misc/27332.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/27332.json/default/QuickType.ex
index 30588b1..90238c3 100644
--- a/base/elixir/test/inputs/json/misc/27332.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/27332.json/default/QuickType.ex
@@ -243,12 +243,24 @@ defmodule MediaEmbed do
   def encode_content(value) when is_binary(value), do: value
   def encode_content(_), do: {:error, "Unexpected type when encoding MediaEmbed.content"}
 
+  def decode_height(value) when is_integer(value), do: value
+  def decode_height(_), do: {:error, "Unexpected type when decoding MediaEmbed.height"}
+
+  def encode_height(value) when is_integer(value), do: value
+  def encode_height(_), do: {:error, "Unexpected type when encoding MediaEmbed.height"}
+
+  def decode_width(value) when is_integer(value), do: value
+  def decode_width(_), do: {:error, "Unexpected type when decoding MediaEmbed.width"}
+
+  def encode_width(value) when is_integer(value), do: value
+  def encode_width(_), do: {:error, "Unexpected type when encoding MediaEmbed.width"}
+
   def from_map(m) do
     %MediaEmbed{
       content: m["content"] && decode_content(m["content"]),
-      height: m["height"],
+      height: m["height"] && decode_height(m["height"]),
       scrolling: m["scrolling"],
-      width: m["width"],
+      width: m["width"] && decode_width(m["width"]),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/misc/31189.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/31189.json/default/QuickType.ex
index cadf6d3..94e3df4 100644
--- a/base/elixir/test/inputs/json/misc/31189.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/31189.json/default/QuickType.ex
@@ -18,6 +18,38 @@ defmodule Rates do
           super_reduced: float() | nil
         }
 
+  def decode_parking(value) when is_float(value), do: value
+  def decode_parking(value) when is_integer(value), do: value
+  def decode_parking(_), do: {:error, "Unexpected type when decoding Rates.parking"}
+
+  def encode_parking(value) when is_float(value), do: value
+  def encode_parking(value) when is_integer(value), do: value
+  def encode_parking(_), do: {:error, "Unexpected type when encoding Rates.parking"}
+
+  def decode_reduced(value) when is_float(value), do: value
+  def decode_reduced(value) when is_integer(value), do: value
+  def decode_reduced(_), do: {:error, "Unexpected type when decoding Rates.reduced"}
+
+  def encode_reduced(value) when is_float(value), do: value
+  def encode_reduced(value) when is_integer(value), do: value
+  def encode_reduced(_), do: {:error, "Unexpected type when encoding Rates.reduced"}
+
+  def decode_reduced1(value) when is_float(value), do: value
+  def decode_reduced1(value) when is_integer(value), do: value
+  def decode_reduced1(_), do: {:error, "Unexpected type when decoding Rates.reduced1"}
+
+  def encode_reduced1(value) when is_float(value), do: value
+  def encode_reduced1(value) when is_integer(value), do: value
+  def encode_reduced1(_), do: {:error, "Unexpected type when encoding Rates.reduced1"}
+
+  def decode_reduced2(value) when is_float(value), do: value
+  def decode_reduced2(value) when is_integer(value), do: value
+  def decode_reduced2(_), do: {:error, "Unexpected type when decoding Rates.reduced2"}
+
+  def encode_reduced2(value) when is_float(value), do: value
+  def encode_reduced2(value) when is_integer(value), do: value
+  def encode_reduced2(_), do: {:error, "Unexpected type when encoding Rates.reduced2"}
+
   def decode_standard(value) when is_float(value), do: value
   def decode_standard(value) when is_integer(value), do: value
   def decode_standard(_), do: {:error, "Unexpected type when decoding Rates.standard"}
@@ -26,14 +58,22 @@ defmodule Rates do
   def encode_standard(value) when is_integer(value), do: value
   def encode_standard(_), do: {:error, "Unexpected type when encoding Rates.standard"}
 
+  def decode_super_reduced(value) when is_float(value), do: value
+  def decode_super_reduced(value) when is_integer(value), do: value
+  def decode_super_reduced(_), do: {:error, "Unexpected type when decoding Rates.super_reduced"}
+
+  def encode_super_reduced(value) when is_float(value), do: value
+  def encode_super_reduced(value) when is_integer(value), do: value
+  def encode_super_reduced(_), do: {:error, "Unexpected type when encoding Rates.super_reduced"}
+
   def from_map(m) do
     %Rates{
-      parking: m["parking"],
-      reduced: m["reduced"],
-      reduced1: m["reduced1"],
-      reduced2: m["reduced2"],
+      parking: m["parking"] && decode_parking(m["parking"]),
+      reduced: m["reduced"] && decode_reduced(m["reduced"]),
+      reduced1: m["reduced1"] && decode_reduced1(m["reduced1"]),
+      reduced2: m["reduced2"] && decode_reduced2(m["reduced2"]),
       standard: decode_standard(m["standard"]),
-      super_reduced: m["super_reduced"],
+      super_reduced: m["super_reduced"] && decode_super_reduced(m["super_reduced"]),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/misc/421d4.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/421d4.json/default/QuickType.ex
index 939160d..bf90451 100644
--- a/base/elixir/test/inputs/json/misc/421d4.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/421d4.json/default/QuickType.ex
@@ -223,6 +223,18 @@ defmodule Column do
   def encode_render_type_name(value) when is_binary(value), do: value
   def encode_render_type_name(_), do: {:error, "Unexpected type when encoding Column.render_type_name"}
 
+  def decode_table_column_id(value) when is_integer(value), do: value
+  def decode_table_column_id(_), do: {:error, "Unexpected type when decoding Column.table_column_id"}
+
+  def encode_table_column_id(value) when is_integer(value), do: value
+  def encode_table_column_id(_), do: {:error, "Unexpected type when encoding Column.table_column_id"}
+
+  def decode_width(value) when is_integer(value), do: value
+  def decode_width(_), do: {:error, "Unexpected type when decoding Column.width"}
+
+  def encode_width(value) when is_integer(value), do: value
+  def encode_width(_), do: {:error, "Unexpected type when encoding Column.width"}
+
   def from_map(m) do
     %Column{
       cached_contents: m["cachedContents"] && CachedContents.from_map(m["cachedContents"]),
@@ -234,8 +246,8 @@ defmodule Column do
       name: decode_name(m["name"]),
       position: decode_position(m["position"]),
       render_type_name: decode_render_type_name(m["renderTypeName"]),
-      table_column_id: m["tableColumnId"],
-      width: m["width"],
+      table_column_id: m["tableColumnId"] && decode_table_column_id(m["tableColumnId"]),
+      width: m["width"] && decode_width(m["width"]),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/misc/4d6fb.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/4d6fb.json/default/QuickType.ex
index 22cc61d..3ed69c2 100644
--- a/base/elixir/test/inputs/json/misc/4d6fb.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/4d6fb.json/default/QuickType.ex
@@ -210,12 +210,24 @@ defmodule MediaEmbed do
   def encode_content(value) when is_binary(value), do: value
   def encode_content(_), do: {:error, "Unexpected type when encoding MediaEmbed.content"}
 
+  def decode_height(value) when is_integer(value), do: value
+  def decode_height(_), do: {:error, "Unexpected type when decoding MediaEmbed.height"}
+
+  def encode_height(value) when is_integer(value), do: value
+  def encode_height(_), do: {:error, "Unexpected type when encoding MediaEmbed.height"}
+
+  def decode_width(value) when is_integer(value), do: value
+  def decode_width(_), do: {:error, "Unexpected type when decoding MediaEmbed.width"}
+
+  def encode_width(value) when is_integer(value), do: value
+  def encode_width(_), do: {:error, "Unexpected type when encoding MediaEmbed.width"}
+
   def from_map(m) do
     %MediaEmbed{
       content: m["content"] && decode_content(m["content"]),
-      height: m["height"],
+      height: m["height"] && decode_height(m["height"]),
       scrolling: m["scrolling"],
-      width: m["width"],
+      width: m["width"] && decode_width(m["width"]),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/misc/5f7fe.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/5f7fe.json/default/QuickType.ex
index f5b0703..501b2e7 100644
--- a/base/elixir/test/inputs/json/misc/5f7fe.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/5f7fe.json/default/QuickType.ex
@@ -264,6 +264,18 @@ defmodule Column do
   def encode_position(value) when is_integer(value), do: value
   def encode_position(_), do: {:error, "Unexpected type when encoding Column.position"}
 
+  def decode_table_column_id(value) when is_integer(value), do: value
+  def decode_table_column_id(_), do: {:error, "Unexpected type when decoding Column.table_column_id"}
+
+  def encode_table_column_id(value) when is_integer(value), do: value
+  def encode_table_column_id(_), do: {:error, "Unexpected type when encoding Column.table_column_id"}
+
+  def decode_width(value) when is_integer(value), do: value
+  def decode_width(_), do: {:error, "Unexpected type when decoding Column.width"}
+
+  def encode_width(value) when is_integer(value), do: value
+  def encode_width(_), do: {:error, "Unexpected type when encoding Column.width"}
+
   def from_map(m) do
     %Column{
       cached_contents: m["cachedContents"] && CachedContents.from_map(m["cachedContents"]),
@@ -275,8 +287,8 @@ defmodule Column do
       name: decode_name(m["name"]),
       position: decode_position(m["position"]),
       render_type_name: TypeName.decode(m["renderTypeName"]),
-      table_column_id: m["tableColumnId"],
-      width: m["width"],
+      table_column_id: m["tableColumnId"] && decode_table_column_id(m["tableColumnId"]),
+      width: m["width"] && decode_width(m["width"]),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/misc/617e8.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/617e8.json/default/QuickType.ex
index e98e9ab..e3cac7d 100644
--- a/base/elixir/test/inputs/json/misc/617e8.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/617e8.json/default/QuickType.ex
@@ -271,6 +271,18 @@ defmodule Column do
   def encode_position(value) when is_integer(value), do: value
   def encode_position(_), do: {:error, "Unexpected type when encoding Column.position"}
 
+  def decode_table_column_id(value) when is_integer(value), do: value
+  def decode_table_column_id(_), do: {:error, "Unexpected type when decoding Column.table_column_id"}
+
+  def encode_table_column_id(value) when is_integer(value), do: value
+  def encode_table_column_id(_), do: {:error, "Unexpected type when encoding Column.table_column_id"}
+
+  def decode_width(value) when is_integer(value), do: value
+  def decode_width(_), do: {:error, "Unexpected type when decoding Column.width"}
+
+  def encode_width(value) when is_integer(value), do: value
+  def encode_width(_), do: {:error, "Unexpected type when encoding Column.width"}
+
   def from_map(m) do
     %Column{
       cached_contents: m["cachedContents"] && CachedContents.from_map(m["cachedContents"]),
@@ -283,8 +295,8 @@ defmodule Column do
       name: decode_name(m["name"]),
       position: decode_position(m["position"]),
       render_type_name: TypeName.decode(m["renderTypeName"]),
-      table_column_id: m["tableColumnId"],
-      width: m["width"],
+      table_column_id: m["tableColumnId"] && decode_table_column_id(m["tableColumnId"]),
+      width: m["width"] && decode_width(m["width"]),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/misc/6de06.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/6de06.json/default/QuickType.ex
index fa35207..334a6fb 100644
--- a/base/elixir/test/inputs/json/misc/6de06.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/6de06.json/default/QuickType.ex
@@ -201,12 +201,24 @@ defmodule MediaEmbed do
   def encode_content(value) when is_binary(value), do: value
   def encode_content(_), do: {:error, "Unexpected type when encoding MediaEmbed.content"}
 
+  def decode_height(value) when is_integer(value), do: value
+  def decode_height(_), do: {:error, "Unexpected type when decoding MediaEmbed.height"}
+
+  def encode_height(value) when is_integer(value), do: value
+  def encode_height(_), do: {:error, "Unexpected type when encoding MediaEmbed.height"}
+
+  def decode_width(value) when is_integer(value), do: value
+  def decode_width(_), do: {:error, "Unexpected type when decoding MediaEmbed.width"}
+
+  def encode_width(value) when is_integer(value), do: value
+  def encode_width(_), do: {:error, "Unexpected type when encoding MediaEmbed.width"}
+
   def from_map(m) do
     %MediaEmbed{
       content: m["content"] && decode_content(m["content"]),
-      height: m["height"],
+      height: m["height"] && decode_height(m["height"]),
       scrolling: m["scrolling"],
-      width: m["width"],
+      width: m["width"] && decode_width(m["width"]),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/misc/a3d8c.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/a3d8c.json/default/QuickType.ex
index c6809b7..2d4c3a5 100644
--- a/base/elixir/test/inputs/json/misc/a3d8c.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/a3d8c.json/default/QuickType.ex
@@ -264,6 +264,18 @@ defmodule Column do
   def encode_position(value) when is_integer(value), do: value
   def encode_position(_), do: {:error, "Unexpected type when encoding Column.position"}
 
+  def decode_table_column_id(value) when is_integer(value), do: value
+  def decode_table_column_id(_), do: {:error, "Unexpected type when decoding Column.table_column_id"}
+
+  def encode_table_column_id(value) when is_integer(value), do: value
+  def encode_table_column_id(_), do: {:error, "Unexpected type when encoding Column.table_column_id"}
+
+  def decode_width(value) when is_integer(value), do: value
+  def decode_width(_), do: {:error, "Unexpected type when decoding Column.width"}
+
+  def encode_width(value) when is_integer(value), do: value
+  def encode_width(_), do: {:error, "Unexpected type when encoding Column.width"}
+
   def from_map(m) do
     %Column{
       cached_contents: m["cachedContents"] && CachedContents.from_map(m["cachedContents"]),
@@ -275,8 +287,8 @@ defmodule Column do
       name: decode_name(m["name"]),
       position: decode_position(m["position"]),
       render_type_name: TypeName.decode(m["renderTypeName"]),
-      table_column_id: m["tableColumnId"],
-      width: m["width"],
+      table_column_id: m["tableColumnId"] && decode_table_column_id(m["tableColumnId"]),
+      width: m["width"] && decode_width(m["width"]),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/misc/be234.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/be234.json/default/QuickType.ex
index 8c7e7da..549a642 100644
--- a/base/elixir/test/inputs/json/misc/be234.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/be234.json/default/QuickType.ex
@@ -244,12 +244,24 @@ defmodule MediaEmbed do
   def encode_content(value) when is_binary(value), do: value
   def encode_content(_), do: {:error, "Unexpected type when encoding MediaEmbed.content"}
 
+  def decode_height(value) when is_integer(value), do: value
+  def decode_height(_), do: {:error, "Unexpected type when decoding MediaEmbed.height"}
+
+  def encode_height(value) when is_integer(value), do: value
+  def encode_height(_), do: {:error, "Unexpected type when encoding MediaEmbed.height"}
+
+  def decode_width(value) when is_integer(value), do: value
+  def decode_width(_), do: {:error, "Unexpected type when decoding MediaEmbed.width"}
+
+  def encode_width(value) when is_integer(value), do: value
+  def encode_width(_), do: {:error, "Unexpected type when encoding MediaEmbed.width"}
+
   def from_map(m) do
     %MediaEmbed{
       content: m["content"] && decode_content(m["content"]),
-      height: m["height"],
+      height: m["height"] && decode_height(m["height"]),
       scrolling: m["scrolling"],
-      width: m["width"],
+      width: m["width"] && decode_width(m["width"]),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/misc/e8b04.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/e8b04.json/default/QuickType.ex
index d4ed30a..e413f2e 100644
--- a/base/elixir/test/inputs/json/misc/e8b04.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/e8b04.json/default/QuickType.ex
@@ -634,14 +634,26 @@ defmodule ChildMetadata do
           unified_version: integer() | nil
         }
 
+  def decode_include_auto(value) when is_integer(value), do: value
+  def decode_include_auto(_), do: {:error, "Unexpected type when decoding ChildMetadata.include_auto"}
+
+  def encode_include_auto(value) when is_integer(value), do: value
+  def encode_include_auto(_), do: {:error, "Unexpected type when encoding ChildMetadata.include_auto"}
+
+  def decode_unified_version(value) when is_integer(value), do: value
+  def decode_unified_version(_), do: {:error, "Unexpected type when decoding ChildMetadata.unified_version"}
+
+  def encode_unified_version(value) when is_integer(value), do: value
+  def encode_unified_version(_), do: {:error, "Unexpected type when encoding ChildMetadata.unified_version"}
+
   def from_map(m) do
     %ChildMetadata{
       custom_values: m["customValues"],
       freeform: m["freeform"],
-      include_auto: m["includeAuto"],
+      include_auto: m["includeAuto"] && decode_include_auto(m["includeAuto"]),
       operator: m["operator"] && MetadataOperator.decode(m["operator"]),
       table_column_id: m["tableColumnId"] && TableColumnID.from_map(m["tableColumnId"]),
-      unified_version: m["unifiedVersion"],
+      unified_version: m["unifiedVersion"] && decode_unified_version(m["unifiedVersion"]),
     }
   end
 
@@ -1650,6 +1662,12 @@ defmodule Owner do
   def encode_id(value) when is_binary(value), do: value
   def encode_id(_), do: {:error, "Unexpected type when encoding Owner.id"}
 
+  def decode_last_notification_seen_at(value) when is_integer(value), do: value
+  def decode_last_notification_seen_at(_), do: {:error, "Unexpected type when decoding Owner.last_notification_seen_at"}
+
+  def encode_last_notification_seen_at(value) when is_integer(value), do: value
+  def encode_last_notification_seen_at(_), do: {:error, "Unexpected type when encoding Owner.last_notification_seen_at"}
+
   def decode_profile_image_url_large(value) when is_binary(value), do: value
   def decode_profile_image_url_large(_), do: {:error, "Unexpected type when decoding Owner.profile_image_url_large"}
 
@@ -1679,7 +1697,7 @@ defmodule Owner do
       display_name: decode_display_name(m["displayName"]),
       flags: m["flags"],
       id: decode_id(m["id"]),
-      last_notification_seen_at: m["lastNotificationSeenAt"],
+      last_notification_seen_at: m["lastNotificationSeenAt"] && decode_last_notification_seen_at(m["lastNotificationSeenAt"]),
       profile_image_url_large: m["profileImageUrlLarge"] && decode_profile_image_url_large(m["profileImageUrlLarge"]),
       profile_image_url_medium: m["profileImageUrlMedium"] && decode_profile_image_url_medium(m["profileImageUrlMedium"]),
       profile_image_url_small: m["profileImageUrlSmall"] && decode_profile_image_url_small(m["profileImageUrlSmall"]),
@@ -2148,6 +2166,12 @@ defmodule TopLevelElement do
   def encode_id(value) when is_binary(value), do: value
   def encode_id(_), do: {:error, "Unexpected type when encoding TopLevelElement.id"}
 
+  def decode_index_updated_at(value) when is_integer(value), do: value
+  def decode_index_updated_at(_), do: {:error, "Unexpected type when decoding TopLevelElement.index_updated_at"}
+
+  def encode_index_updated_at(value) when is_integer(value), do: value
+  def encode_index_updated_at(_), do: {:error, "Unexpected type when encoding TopLevelElement.index_updated_at"}
+
   def decode_locale(value) when is_binary(value), do: value
   def decode_locale(_), do: {:error, "Unexpected type when decoding TopLevelElement.locale"}
 
@@ -2184,6 +2208,12 @@ defmodule TopLevelElement do
   def encode_publication_append_enabled(value) when is_boolean(value), do: value
   def encode_publication_append_enabled(_), do: {:error, "Unexpected type when encoding TopLevelElement.publication_append_enabled"}
 
+  def decode_publication_date(value) when is_integer(value), do: value
+  def decode_publication_date(_), do: {:error, "Unexpected type when decoding TopLevelElement.publication_date"}
+
+  def encode_publication_date(value) when is_integer(value), do: value
+  def encode_publication_date(_), do: {:error, "Unexpected type when encoding TopLevelElement.publication_date"}
+
   def decode_publication_group(value) when is_integer(value), do: value
   def decode_publication_group(_), do: {:error, "Unexpected type when decoding TopLevelElement.publication_group"}
 
@@ -2208,6 +2238,18 @@ defmodule TopLevelElement do
   def encode_row_class(value) when is_binary(value), do: value
   def encode_row_class(_), do: {:error, "Unexpected type when encoding TopLevelElement.row_class"}
 
+  def decode_row_identifier_column_id(value) when is_integer(value), do: value
+  def decode_row_identifier_column_id(_), do: {:error, "Unexpected type when decoding TopLevelElement.row_identifier_column_id"}
+
+  def encode_row_identifier_column_id(value) when is_integer(value), do: value
+  def encode_row_identifier_column_id(_), do: {:error, "Unexpected type when encoding TopLevelElement.row_identifier_column_id"}
+
+  def decode_rows_updated_at(value) when is_integer(value), do: value
+  def decode_rows_updated_at(_), do: {:error, "Unexpected type when decoding TopLevelElement.rows_updated_at"}
+
+  def encode_rows_updated_at(value) when is_integer(value), do: value
+  def encode_rows_updated_at(_), do: {:error, "Unexpected type when encoding TopLevelElement.rows_updated_at"}
+
   def decode_table_id(value) when is_integer(value), do: value
   def decode_table_id(_), do: {:error, "Unexpected type when decoding TopLevelElement.table_id"}
 
@@ -2245,7 +2287,7 @@ defmodule TopLevelElement do
       hide_from_catalog: decode_hide_from_catalog(m["hideFromCatalog"]),
       hide_from_data_json: decode_hide_from_data_json(m["hideFromDataJson"]),
       id: decode_id(m["id"]),
-      index_updated_at: m["indexUpdatedAt"],
+      index_updated_at: m["indexUpdatedAt"] && decode_index_updated_at(m["indexUpdatedAt"]),
       locale: decode_locale(m["locale"]),
       metadata: TopLevelMetadata.from_map(m["metadata"]),
       moderation_status: m["moderationStatus"],
@@ -2257,15 +2299,15 @@ defmodule TopLevelElement do
       owner: Owner.from_map(m["owner"]),
       provenance: Provenance.decode(m["provenance"]),
       publication_append_enabled: decode_publication_append_enabled(m["publicationAppendEnabled"]),
-      publication_date: m["publicationDate"],
+      publication_date: m["publicationDate"] && decode_publication_date(m["publicationDate"]),
       publication_group: decode_publication_group(m["publicationGroup"]),
       publication_stage: PublicationStage.decode(m["publicationStage"]),
       ratings: m["ratings"] && Ratings.from_map(m["ratings"]),
       resource_name: m["resourceName"] && decode_resource_name(m["resourceName"]),
       rights: Enum.map(m["rights"], &Right.decode/1),
       row_class: m["rowClass"] && decode_row_class(m["rowClass"]),
-      row_identifier_column_id: m["rowIdentifierColumnId"],
-      rows_updated_at: m["rowsUpdatedAt"],
+      row_identifier_column_id: m["rowIdentifierColumnId"] && decode_row_identifier_column_id(m["rowIdentifierColumnId"]),
+      rows_updated_at: m["rowsUpdatedAt"] && decode_rows_updated_at(m["rowsUpdatedAt"]),
       rows_updated_by: m["rowsUpdatedBy"] && RowsUpdatedBy.decode(m["rowsUpdatedBy"]),
       table_author: TableAuthor.from_map(m["tableAuthor"]),
       table_id: decode_table_id(m["tableId"]),
diff --git a/base/elixir/test/inputs/json/misc/f74d5.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/f74d5.json/default/QuickType.ex
index 8ab9125..2e67de1 100644
--- a/base/elixir/test/inputs/json/misc/f74d5.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/f74d5.json/default/QuickType.ex
@@ -264,6 +264,18 @@ defmodule Column do
   def encode_position(value) when is_integer(value), do: value
   def encode_position(_), do: {:error, "Unexpected type when encoding Column.position"}
 
+  def decode_table_column_id(value) when is_integer(value), do: value
+  def decode_table_column_id(_), do: {:error, "Unexpected type when decoding Column.table_column_id"}
+
+  def encode_table_column_id(value) when is_integer(value), do: value
+  def encode_table_column_id(_), do: {:error, "Unexpected type when encoding Column.table_column_id"}
+
+  def decode_width(value) when is_integer(value), do: value
+  def decode_width(_), do: {:error, "Unexpected type when decoding Column.width"}
+
+  def encode_width(value) when is_integer(value), do: value
+  def encode_width(_), do: {:error, "Unexpected type when encoding Column.width"}
+
   def from_map(m) do
     %Column{
       cached_contents: m["cachedContents"] && CachedContents.from_map(m["cachedContents"]),
@@ -275,8 +287,8 @@ defmodule Column do
       name: decode_name(m["name"]),
       position: decode_position(m["position"]),
       render_type_name: TypeName.decode(m["renderTypeName"]),
-      table_column_id: m["tableColumnId"],
-      width: m["width"],
+      table_column_id: m["tableColumnId"] && decode_table_column_id(m["tableColumnId"]),
+      width: m["width"] && decode_width(m["width"]),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/misc/fcca3.json/default/QuickType.ex b/head/elixir/test/inputs/json/misc/fcca3.json/default/QuickType.ex
index 2be7d94..4f3f0fa 100644
--- a/base/elixir/test/inputs/json/misc/fcca3.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/misc/fcca3.json/default/QuickType.ex
@@ -298,6 +298,18 @@ defmodule Column do
   def encode_position(value) when is_integer(value), do: value
   def encode_position(_), do: {:error, "Unexpected type when encoding Column.position"}
 
+  def decode_table_column_id(value) when is_integer(value), do: value
+  def decode_table_column_id(_), do: {:error, "Unexpected type when decoding Column.table_column_id"}
+
+  def encode_table_column_id(value) when is_integer(value), do: value
+  def encode_table_column_id(_), do: {:error, "Unexpected type when encoding Column.table_column_id"}
+
+  def decode_width(value) when is_integer(value), do: value
+  def decode_width(_), do: {:error, "Unexpected type when decoding Column.width"}
+
+  def encode_width(value) when is_integer(value), do: value
+  def encode_width(_), do: {:error, "Unexpected type when encoding Column.width"}
+
   def from_map(m) do
     %Column{
       cached_contents: m["cachedContents"] && CachedContents.from_map(m["cachedContents"]),
@@ -310,8 +322,8 @@ defmodule Column do
       name: decode_name(m["name"]),
       position: decode_position(m["position"]),
       render_type_name: TypeName.decode(m["renderTypeName"]),
-      table_column_id: m["tableColumnId"],
-      width: m["width"],
+      table_column_id: m["tableColumnId"] && decode_table_column_id(m["tableColumnId"]),
+      width: m["width"] && decode_width(m["width"]),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/priority/bug427.json/default/QuickType.ex b/head/elixir/test/inputs/json/priority/bug427.json/default/QuickType.ex
index c2835ca..3589088 100644
--- a/base/elixir/test/inputs/json/priority/bug427.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/priority/bug427.json/default/QuickType.ex
@@ -1719,6 +1719,12 @@ defmodule ExtendedBy do
           type_arguments: [ExtendedBy.t()] | nil
         }
 
+  def decode_id(value) when is_integer(value), do: value
+  def decode_id(_), do: {:error, "Unexpected type when decoding ExtendedBy.id"}
+
+  def encode_id(value) when is_integer(value), do: value
+  def encode_id(_), do: {:error, "Unexpected type when encoding ExtendedBy.id"}
+
   def decode_name(value) when is_binary(value), do: value
   def decode_name(_), do: {:error, "Unexpected type when decoding ExtendedBy.name"}
 
@@ -1728,7 +1734,7 @@ defmodule ExtendedBy do
   def from_map(m) do
     %ExtendedBy{
       constraint: m["constraint"] && ExtendedBy.from_map(m["constraint"]),
-      id: m["id"],
+      id: m["id"] && decode_id(m["id"]),
       name: decode_name(m["name"]),
       type: TypeEnum.decode(m["type"]),
       type_arguments: m["typeArguments"] && Enum.map(m["typeArguments"], &ExtendedBy.from_map/1),
@@ -1808,6 +1814,12 @@ defmodule Type4 do
           type_arguments: [ElementType.t()] | nil
         }
 
+  def decode_id(value) when is_integer(value), do: value
+  def decode_id(_), do: {:error, "Unexpected type when decoding Type4.id"}
+
+  def encode_id(value) when is_integer(value), do: value
+  def encode_id(_), do: {:error, "Unexpected type when encoding Type4.id"}
+
   def decode_name(value) when is_binary(value), do: value
   def decode_name(_), do: {:error, "Unexpected type when decoding Type4.name"}
 
@@ -1820,7 +1832,7 @@ defmodule Type4 do
       declaration: m["declaration"] && GetSignature.from_map(m["declaration"]),
       element_type: m["elementType"] && ElementType.from_map(m["elementType"]),
       elements: m["elements"] && Enum.map(m["elements"], &ExtendedBy.from_map/1),
-      id: m["id"],
+      id: m["id"] && decode_id(m["id"]),
       name: m["name"] && decode_name(m["name"]),
       type: TypeEnum.decode(m["type"]),
       type_arguments: m["typeArguments"] && Enum.map(m["typeArguments"], &ElementType.from_map/1),
@@ -2598,6 +2610,12 @@ defmodule Type5 do
           types: [TypeElement.t()] | nil
         }
 
+  def decode_id(value) when is_integer(value), do: value
+  def decode_id(_), do: {:error, "Unexpected type when decoding Type5.id"}
+
+  def encode_id(value) when is_integer(value), do: value
+  def encode_id(_), do: {:error, "Unexpected type when encoding Type5.id"}
+
   def decode_name(value) when is_binary(value), do: value
   def decode_name(_), do: {:error, "Unexpected type when decoding Type5.name"}
 
@@ -2610,7 +2628,7 @@ defmodule Type5 do
       declaration: m["declaration"] && Declaration2.from_map(m["declaration"]),
       element_type: m["elementType"] && ExtendedBy.from_map(m["elementType"]),
       elements: m["elements"] && Enum.map(m["elements"], &ElementType.from_map/1),
-      id: m["id"],
+      id: m["id"] && decode_id(m["id"]),
       name: m["name"] && decode_name(m["name"]),
       type: TypeEnum.decode(m["type"]),
       type_arguments: m["typeArguments"] && Enum.map(m["typeArguments"], &TypeArgument1.from_map/1),
@@ -3048,6 +3066,12 @@ defmodule Type8 do
           type_arguments: [ElementType.t()] | nil
         }
 
+  def decode_id(value) when is_integer(value), do: value
+  def decode_id(_), do: {:error, "Unexpected type when decoding Type8.id"}
+
+  def encode_id(value) when is_integer(value), do: value
+  def encode_id(_), do: {:error, "Unexpected type when encoding Type8.id"}
+
   def decode_name(value) when is_binary(value), do: value
   def decode_name(_), do: {:error, "Unexpected type when decoding Type8.name"}
 
@@ -3058,7 +3082,7 @@ defmodule Type8 do
     %Type8{
       declaration: m["declaration"] && Declaration3.from_map(m["declaration"]),
       element_type: m["elementType"] && ElementType.from_map(m["elementType"]),
-      id: m["id"],
+      id: m["id"] && decode_id(m["id"]),
       name: m["name"] && decode_name(m["name"]),
       type: TypeEnum.decode(m["type"]),
       type_arguments: m["typeArguments"] && Enum.map(m["typeArguments"], &ElementType.from_map/1),
@@ -3188,10 +3212,16 @@ defmodule Type9 do
           type_arguments: [ElementType.t()] | nil
         }
 
+  def decode_id(value) when is_integer(value), do: value
+  def decode_id(_), do: {:error, "Unexpected type when decoding Type9.id"}
+
+  def encode_id(value) when is_integer(value), do: value
+  def encode_id(_), do: {:error, "Unexpected type when encoding Type9.id"}
+
   def from_map(m) do
     %Type9{
       declaration: m["declaration"] && Declaration1.from_map(m["declaration"]),
-      id: m["id"],
+      id: m["id"] && decode_id(m["id"]),
       name: m["name"] && Name.decode(m["name"]),
       type: TypeEnum.decode(m["type"]),
       type_arguments: m["typeArguments"] && Enum.map(m["typeArguments"], &ElementType.from_map/1),
@@ -3648,6 +3678,12 @@ defmodule Type10 do
           value: String.t() | nil
         }
 
+  def decode_id(value) when is_integer(value), do: value
+  def decode_id(_), do: {:error, "Unexpected type when decoding Type10.id"}
+
+  def encode_id(value) when is_integer(value), do: value
+  def encode_id(_), do: {:error, "Unexpected type when encoding Type10.id"}
+
   def decode_name(value) when is_binary(value), do: value
   def decode_name(_), do: {:error, "Unexpected type when decoding Type10.name"}
 
@@ -3665,7 +3701,7 @@ defmodule Type10 do
       declaration: m["declaration"] && Declaration4.from_map(m["declaration"]),
       element_type: m["elementType"] && ElementType.from_map(m["elementType"]),
       elements: m["elements"] && Enum.map(m["elements"], &ExtendedBy.from_map/1),
-      id: m["id"],
+      id: m["id"] && decode_id(m["id"]),
       name: m["name"] && decode_name(m["name"]),
       type: TypeEnum.decode(m["type"]),
       type_arguments: m["typeArguments"] && Enum.map(m["typeArguments"], &TypeArgument2.from_map/1),
@@ -3713,6 +3749,12 @@ defmodule Type12 do
           type: String.t()
         }
 
+  def decode_id(value) when is_integer(value), do: value
+  def decode_id(_), do: {:error, "Unexpected type when decoding Type12.id"}
+
+  def encode_id(value) when is_integer(value), do: value
+  def encode_id(_), do: {:error, "Unexpected type when encoding Type12.id"}
+
   def decode_operator(value) when is_binary(value), do: value
   def decode_operator(_), do: {:error, "Unexpected type when decoding Type12.operator"}
 
@@ -3727,7 +3769,7 @@ defmodule Type12 do
 
   def from_map(m) do
     %Type12{
-      id: m["id"],
+      id: m["id"] && decode_id(m["id"]),
       name: m["name"] && Name.decode(m["name"]),
       operator: m["operator"] && decode_operator(m["operator"]),
       target: m["target"] && ElementType.from_map(m["target"]),
diff --git a/base/elixir/test/inputs/json/priority/combinations1.json/default/QuickType.ex b/head/elixir/test/inputs/json/priority/combinations1.json/default/QuickType.ex
index 1a398a5..c733434 100644
--- a/base/elixir/test/inputs/json/priority/combinations1.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/priority/combinations1.json/default/QuickType.ex
@@ -246,6 +246,20 @@ defmodule ChemotherapeuticClass do
           unshy: nil | nil
         }
 
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding ChemotherapeuticClass.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding ChemotherapeuticClass.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding ChemotherapeuticClass.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding ChemotherapeuticClass.chirotherium"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding ChemotherapeuticClass.disdiapason"}
 
@@ -257,10 +271,10 @@ defmodule ChemotherapeuticClass do
       angioneurotic: m["angioneurotic"],
       availment: m["availment"],
       bladelet: m["bladelet"],
-      catharticalness: m["catharticalness"],
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
       caulis: m["caulis"],
       chalcus: m["chalcus"],
-      chirotherium: m["Chirotherium"],
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
       disdiapason: m["disdiapason"] && decode_disdiapason(m["disdiapason"]),
       enteradenological: m["enteradenological"],
       homocerc: m["homocerc"],
@@ -433,6 +447,20 @@ defmodule CoadjustClass do
           unchargeable: nil | nil
         }
 
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding CoadjustClass.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding CoadjustClass.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding CoadjustClass.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding CoadjustClass.chirotherium"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding CoadjustClass.disdiapason"}
 
@@ -443,8 +471,8 @@ defmodule CoadjustClass do
     %CoadjustClass{
       amidosulphonal: m["amidosulphonal"],
       benny: m["Benny"],
-      catharticalness: m["catharticalness"],
-      chirotherium: m["Chirotherium"],
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
       disdiapason: m["disdiapason"] && decode_disdiapason(m["disdiapason"]),
       ensnare: m["ensnare"],
       homocerc: m["homocerc"],
@@ -2013,6 +2041,20 @@ defmodule HemocoeleClass do
           walt: nil | nil
         }
 
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding HemocoeleClass.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding HemocoeleClass.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding HemocoeleClass.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding HemocoeleClass.chirotherium"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding HemocoeleClass.disdiapason"}
 
@@ -2025,8 +2067,8 @@ defmodule HemocoeleClass do
       amelification: m["amelification"],
       autobiographic: m["autobiographic"],
       berat: m["berat"],
-      catharticalness: m["catharticalness"],
-      chirotherium: m["Chirotherium"],
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
       disdiapason: m["disdiapason"] && decode_disdiapason(m["disdiapason"]),
       disproportionably: m["disproportionably"],
       erythrite: m["erythrite"],
diff --git a/base/elixir/test/inputs/json/priority/combinations2.json/default/QuickType.ex b/head/elixir/test/inputs/json/priority/combinations2.json/default/QuickType.ex
index 93c7d8e..a5ca6e8 100644
--- a/base/elixir/test/inputs/json/priority/combinations2.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/priority/combinations2.json/default/QuickType.ex
@@ -323,39 +323,173 @@ defmodule Amphithyron do
           undecimal: integer() | nil
         }
 
+  def decode_akroasis(value) when is_integer(value), do: value
+  def decode_akroasis(_), do: {:error, "Unexpected type when decoding Amphithyron.akroasis"}
+
+  def encode_akroasis(value) when is_integer(value), do: value
+  def encode_akroasis(_), do: {:error, "Unexpected type when encoding Amphithyron.akroasis"}
+
+  def decode_antiphonical(value) when is_integer(value), do: value
+  def decode_antiphonical(_), do: {:error, "Unexpected type when decoding Amphithyron.antiphonical"}
+
+  def encode_antiphonical(value) when is_integer(value), do: value
+  def encode_antiphonical(_), do: {:error, "Unexpected type when encoding Amphithyron.antiphonical"}
+
+  def decode_basebred(value) when is_integer(value), do: value
+  def decode_basebred(_), do: {:error, "Unexpected type when decoding Amphithyron.basebred"}
+
+  def encode_basebred(value) when is_integer(value), do: value
+  def encode_basebred(_), do: {:error, "Unexpected type when encoding Amphithyron.basebred"}
+
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding Amphithyron.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding Amphithyron.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding Amphithyron.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding Amphithyron.chirotherium"}
+
+  def decode_conductometric(value) when is_integer(value), do: value
+  def decode_conductometric(_), do: {:error, "Unexpected type when decoding Amphithyron.conductometric"}
+
+  def encode_conductometric(value) when is_integer(value), do: value
+  def encode_conductometric(_), do: {:error, "Unexpected type when encoding Amphithyron.conductometric"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding Amphithyron.disdiapason"}
 
   def encode_disdiapason(value) when is_binary(value), do: value
   def encode_disdiapason(_), do: {:error, "Unexpected type when encoding Amphithyron.disdiapason"}
 
+  def decode_ensilation(value) when is_integer(value), do: value
+  def decode_ensilation(_), do: {:error, "Unexpected type when decoding Amphithyron.ensilation"}
+
+  def encode_ensilation(value) when is_integer(value), do: value
+  def encode_ensilation(_), do: {:error, "Unexpected type when encoding Amphithyron.ensilation"}
+
+  def decode_eyebolt(value) when is_integer(value), do: value
+  def decode_eyebolt(_), do: {:error, "Unexpected type when decoding Amphithyron.eyebolt"}
+
+  def encode_eyebolt(value) when is_integer(value), do: value
+  def encode_eyebolt(_), do: {:error, "Unexpected type when encoding Amphithyron.eyebolt"}
+
+  def decode_fistulated(value) when is_integer(value), do: value
+  def decode_fistulated(_), do: {:error, "Unexpected type when decoding Amphithyron.fistulated"}
+
+  def encode_fistulated(value) when is_integer(value), do: value
+  def encode_fistulated(_), do: {:error, "Unexpected type when encoding Amphithyron.fistulated"}
+
+  def decode_heteropod(value) when is_integer(value), do: value
+  def decode_heteropod(_), do: {:error, "Unexpected type when decoding Amphithyron.heteropod"}
+
+  def encode_heteropod(value) when is_integer(value), do: value
+  def encode_heteropod(_), do: {:error, "Unexpected type when encoding Amphithyron.heteropod"}
+
+  def decode_juniperus(value) when is_integer(value), do: value
+  def decode_juniperus(_), do: {:error, "Unexpected type when decoding Amphithyron.juniperus"}
+
+  def encode_juniperus(value) when is_integer(value), do: value
+  def encode_juniperus(_), do: {:error, "Unexpected type when encoding Amphithyron.juniperus"}
+
+  def decode_labyrinthically(value) when is_integer(value), do: value
+  def decode_labyrinthically(_), do: {:error, "Unexpected type when decoding Amphithyron.labyrinthically"}
+
+  def encode_labyrinthically(value) when is_integer(value), do: value
+  def encode_labyrinthically(_), do: {:error, "Unexpected type when encoding Amphithyron.labyrinthically"}
+
+  def decode_martyrization(value) when is_integer(value), do: value
+  def decode_martyrization(_), do: {:error, "Unexpected type when decoding Amphithyron.martyrization"}
+
+  def encode_martyrization(value) when is_integer(value), do: value
+  def encode_martyrization(_), do: {:error, "Unexpected type when encoding Amphithyron.martyrization"}
+
+  def decode_mispolicy(value) when is_integer(value), do: value
+  def decode_mispolicy(_), do: {:error, "Unexpected type when decoding Amphithyron.mispolicy"}
+
+  def encode_mispolicy(value) when is_integer(value), do: value
+  def encode_mispolicy(_), do: {:error, "Unexpected type when encoding Amphithyron.mispolicy"}
+
+  def decode_multipara(value) when is_integer(value), do: value
+  def decode_multipara(_), do: {:error, "Unexpected type when decoding Amphithyron.multipara"}
+
+  def encode_multipara(value) when is_integer(value), do: value
+  def encode_multipara(_), do: {:error, "Unexpected type when encoding Amphithyron.multipara"}
+
+  def decode_nazirite(value) when is_integer(value), do: value
+  def decode_nazirite(_), do: {:error, "Unexpected type when decoding Amphithyron.nazirite"}
+
+  def encode_nazirite(value) when is_integer(value), do: value
+  def encode_nazirite(_), do: {:error, "Unexpected type when encoding Amphithyron.nazirite"}
+
+  def decode_possessorial(value) when is_integer(value), do: value
+  def decode_possessorial(_), do: {:error, "Unexpected type when decoding Amphithyron.possessorial"}
+
+  def encode_possessorial(value) when is_integer(value), do: value
+  def encode_possessorial(_), do: {:error, "Unexpected type when encoding Amphithyron.possessorial"}
+
+  def decode_shamed(value) when is_integer(value), do: value
+  def decode_shamed(_), do: {:error, "Unexpected type when decoding Amphithyron.shamed"}
+
+  def encode_shamed(value) when is_integer(value), do: value
+  def encode_shamed(_), do: {:error, "Unexpected type when encoding Amphithyron.shamed"}
+
+  def decode_shelfworn(value) when is_integer(value), do: value
+  def decode_shelfworn(_), do: {:error, "Unexpected type when decoding Amphithyron.shelfworn"}
+
+  def encode_shelfworn(value) when is_integer(value), do: value
+  def encode_shelfworn(_), do: {:error, "Unexpected type when encoding Amphithyron.shelfworn"}
+
+  def decode_stagnum(value) when is_integer(value), do: value
+  def decode_stagnum(_), do: {:error, "Unexpected type when decoding Amphithyron.stagnum"}
+
+  def encode_stagnum(value) when is_integer(value), do: value
+  def encode_stagnum(_), do: {:error, "Unexpected type when encoding Amphithyron.stagnum"}
+
+  def decode_those(value) when is_integer(value), do: value
+  def decode_those(_), do: {:error, "Unexpected type when decoding Amphithyron.those"}
+
+  def encode_those(value) when is_integer(value), do: value
+  def encode_those(_), do: {:error, "Unexpected type when encoding Amphithyron.those"}
+
+  def decode_undecimal(value) when is_integer(value), do: value
+  def decode_undecimal(_), do: {:error, "Unexpected type when decoding Amphithyron.undecimal"}
+
+  def encode_undecimal(value) when is_integer(value), do: value
+  def encode_undecimal(_), do: {:error, "Unexpected type when encoding Amphithyron.undecimal"}
+
   def from_map(m) do
     %Amphithyron{
-      akroasis: m["akroasis"],
-      antiphonical: m["antiphonical"],
-      basebred: m["basebred"],
-      catharticalness: m["catharticalness"],
-      chirotherium: m["Chirotherium"],
-      conductometric: m["conductometric"],
+      akroasis: m["akroasis"] && decode_akroasis(m["akroasis"]),
+      antiphonical: m["antiphonical"] && decode_antiphonical(m["antiphonical"]),
+      basebred: m["basebred"] && decode_basebred(m["basebred"]),
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
+      conductometric: m["conductometric"] && decode_conductometric(m["conductometric"]),
       disdiapason: m["disdiapason"] && decode_disdiapason(m["disdiapason"]),
-      ensilation: m["ensilation"],
-      eyebolt: m["eyebolt"],
-      fistulated: m["fistulated"],
-      heteropod: m["heteropod"],
+      ensilation: m["ensilation"] && decode_ensilation(m["ensilation"]),
+      eyebolt: m["eyebolt"] && decode_eyebolt(m["eyebolt"]),
+      fistulated: m["fistulated"] && decode_fistulated(m["fistulated"]),
+      heteropod: m["heteropod"] && decode_heteropod(m["heteropod"]),
       homocerc: m["homocerc"],
-      juniperus: m["Juniperus"],
-      labyrinthically: m["labyrinthically"],
-      martyrization: m["martyrization"],
-      mispolicy: m["mispolicy"],
-      multipara: m["multipara"],
-      nazirite: m["Nazirite"],
+      juniperus: m["Juniperus"] && decode_juniperus(m["Juniperus"]),
+      labyrinthically: m["labyrinthically"] && decode_labyrinthically(m["labyrinthically"]),
+      martyrization: m["martyrization"] && decode_martyrization(m["martyrization"]),
+      mispolicy: m["mispolicy"] && decode_mispolicy(m["mispolicy"]),
+      multipara: m["multipara"] && decode_multipara(m["multipara"]),
+      nazirite: m["Nazirite"] && decode_nazirite(m["Nazirite"]),
       nonbookish: m["nonbookish"],
-      possessorial: m["possessorial"],
-      shamed: m["shamed"],
-      shelfworn: m["shelfworn"],
-      stagnum: m["stagnum"],
-      those: m["Those"],
-      undecimal: m["undecimal"],
+      possessorial: m["possessorial"] && decode_possessorial(m["possessorial"]),
+      shamed: m["shamed"] && decode_shamed(m["shamed"]),
+      shelfworn: m["shelfworn"] && decode_shelfworn(m["shelfworn"]),
+      stagnum: m["stagnum"] && decode_stagnum(m["stagnum"]),
+      those: m["Those"] && decode_those(m["Those"]),
+      undecimal: m["undecimal"] && decode_undecimal(m["undecimal"]),
     }
   end
 
@@ -1063,39 +1197,173 @@ defmodule DiscordiaClass do
           wingle: integer() | nil
         }
 
+  def decode_altaic(value) when is_integer(value), do: value
+  def decode_altaic(_), do: {:error, "Unexpected type when decoding DiscordiaClass.altaic"}
+
+  def encode_altaic(value) when is_integer(value), do: value
+  def encode_altaic(_), do: {:error, "Unexpected type when encoding DiscordiaClass.altaic"}
+
+  def decode_amoristic(value) when is_integer(value), do: value
+  def decode_amoristic(_), do: {:error, "Unexpected type when decoding DiscordiaClass.amoristic"}
+
+  def encode_amoristic(value) when is_integer(value), do: value
+  def encode_amoristic(_), do: {:error, "Unexpected type when encoding DiscordiaClass.amoristic"}
+
+  def decode_blennophthalmia(value) when is_integer(value), do: value
+  def decode_blennophthalmia(_), do: {:error, "Unexpected type when decoding DiscordiaClass.blennophthalmia"}
+
+  def encode_blennophthalmia(value) when is_integer(value), do: value
+  def encode_blennophthalmia(_), do: {:error, "Unexpected type when encoding DiscordiaClass.blennophthalmia"}
+
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding DiscordiaClass.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding DiscordiaClass.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding DiscordiaClass.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding DiscordiaClass.chirotherium"}
+
+  def decode_disciplinability(value) when is_integer(value), do: value
+  def decode_disciplinability(_), do: {:error, "Unexpected type when decoding DiscordiaClass.disciplinability"}
+
+  def encode_disciplinability(value) when is_integer(value), do: value
+  def encode_disciplinability(_), do: {:error, "Unexpected type when encoding DiscordiaClass.disciplinability"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding DiscordiaClass.disdiapason"}
 
   def encode_disdiapason(value) when is_binary(value), do: value
   def encode_disdiapason(_), do: {:error, "Unexpected type when encoding DiscordiaClass.disdiapason"}
 
+  def decode_goofer(value) when is_integer(value), do: value
+  def decode_goofer(_), do: {:error, "Unexpected type when decoding DiscordiaClass.goofer"}
+
+  def encode_goofer(value) when is_integer(value), do: value
+  def encode_goofer(_), do: {:error, "Unexpected type when encoding DiscordiaClass.goofer"}
+
+  def decode_laryngograph(value) when is_integer(value), do: value
+  def decode_laryngograph(_), do: {:error, "Unexpected type when decoding DiscordiaClass.laryngograph"}
+
+  def encode_laryngograph(value) when is_integer(value), do: value
+  def encode_laryngograph(_), do: {:error, "Unexpected type when encoding DiscordiaClass.laryngograph"}
+
+  def decode_leucitis(value) when is_integer(value), do: value
+  def decode_leucitis(_), do: {:error, "Unexpected type when decoding DiscordiaClass.leucitis"}
+
+  def encode_leucitis(value) when is_integer(value), do: value
+  def encode_leucitis(_), do: {:error, "Unexpected type when encoding DiscordiaClass.leucitis"}
+
+  def decode_lymphocyst(value) when is_integer(value), do: value
+  def decode_lymphocyst(_), do: {:error, "Unexpected type when decoding DiscordiaClass.lymphocyst"}
+
+  def encode_lymphocyst(value) when is_integer(value), do: value
+  def encode_lymphocyst(_), do: {:error, "Unexpected type when encoding DiscordiaClass.lymphocyst"}
+
+  def decode_microcosmology(value) when is_integer(value), do: value
+  def decode_microcosmology(_), do: {:error, "Unexpected type when decoding DiscordiaClass.microcosmology"}
+
+  def encode_microcosmology(value) when is_integer(value), do: value
+  def encode_microcosmology(_), do: {:error, "Unexpected type when encoding DiscordiaClass.microcosmology"}
+
+  def decode_nauseation(value) when is_integer(value), do: value
+  def decode_nauseation(_), do: {:error, "Unexpected type when decoding DiscordiaClass.nauseation"}
+
+  def encode_nauseation(value) when is_integer(value), do: value
+  def encode_nauseation(_), do: {:error, "Unexpected type when encoding DiscordiaClass.nauseation"}
+
+  def decode_patarin(value) when is_integer(value), do: value
+  def decode_patarin(_), do: {:error, "Unexpected type when decoding DiscordiaClass.patarin"}
+
+  def encode_patarin(value) when is_integer(value), do: value
+  def encode_patarin(_), do: {:error, "Unexpected type when encoding DiscordiaClass.patarin"}
+
+  def decode_preliberal(value) when is_integer(value), do: value
+  def decode_preliberal(_), do: {:error, "Unexpected type when decoding DiscordiaClass.preliberal"}
+
+  def encode_preliberal(value) when is_integer(value), do: value
+  def encode_preliberal(_), do: {:error, "Unexpected type when encoding DiscordiaClass.preliberal"}
+
+  def decode_prettifier(value) when is_integer(value), do: value
+  def decode_prettifier(_), do: {:error, "Unexpected type when decoding DiscordiaClass.prettifier"}
+
+  def encode_prettifier(value) when is_integer(value), do: value
+  def encode_prettifier(_), do: {:error, "Unexpected type when encoding DiscordiaClass.prettifier"}
+
+  def decode_rangework(value) when is_integer(value), do: value
+  def decode_rangework(_), do: {:error, "Unexpected type when decoding DiscordiaClass.rangework"}
+
+  def encode_rangework(value) when is_integer(value), do: value
+  def encode_rangework(_), do: {:error, "Unexpected type when encoding DiscordiaClass.rangework"}
+
+  def decode_redient(value) when is_integer(value), do: value
+  def decode_redient(_), do: {:error, "Unexpected type when decoding DiscordiaClass.redient"}
+
+  def encode_redient(value) when is_integer(value), do: value
+  def encode_redient(_), do: {:error, "Unexpected type when encoding DiscordiaClass.redient"}
+
+  def decode_subfusiform(value) when is_integer(value), do: value
+  def decode_subfusiform(_), do: {:error, "Unexpected type when decoding DiscordiaClass.subfusiform"}
+
+  def encode_subfusiform(value) when is_integer(value), do: value
+  def encode_subfusiform(_), do: {:error, "Unexpected type when encoding DiscordiaClass.subfusiform"}
+
+  def decode_suicidical(value) when is_integer(value), do: value
+  def decode_suicidical(_), do: {:error, "Unexpected type when decoding DiscordiaClass.suicidical"}
+
+  def encode_suicidical(value) when is_integer(value), do: value
+  def encode_suicidical(_), do: {:error, "Unexpected type when encoding DiscordiaClass.suicidical"}
+
+  def decode_swow(value) when is_integer(value), do: value
+  def decode_swow(_), do: {:error, "Unexpected type when decoding DiscordiaClass.swow"}
+
+  def encode_swow(value) when is_integer(value), do: value
+  def encode_swow(_), do: {:error, "Unexpected type when encoding DiscordiaClass.swow"}
+
+  def decode_wastrel(value) when is_integer(value), do: value
+  def decode_wastrel(_), do: {:error, "Unexpected type when decoding DiscordiaClass.wastrel"}
+
+  def encode_wastrel(value) when is_integer(value), do: value
+  def encode_wastrel(_), do: {:error, "Unexpected type when encoding DiscordiaClass.wastrel"}
+
+  def decode_wingle(value) when is_integer(value), do: value
+  def decode_wingle(_), do: {:error, "Unexpected type when decoding DiscordiaClass.wingle"}
+
+  def encode_wingle(value) when is_integer(value), do: value
+  def encode_wingle(_), do: {:error, "Unexpected type when encoding DiscordiaClass.wingle"}
+
   def from_map(m) do
     %DiscordiaClass{
-      altaic: m["Altaic"],
-      amoristic: m["amoristic"],
-      blennophthalmia: m["blennophthalmia"],
-      catharticalness: m["catharticalness"],
-      chirotherium: m["Chirotherium"],
-      disciplinability: m["disciplinability"],
+      altaic: m["Altaic"] && decode_altaic(m["Altaic"]),
+      amoristic: m["amoristic"] && decode_amoristic(m["amoristic"]),
+      blennophthalmia: m["blennophthalmia"] && decode_blennophthalmia(m["blennophthalmia"]),
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
+      disciplinability: m["disciplinability"] && decode_disciplinability(m["disciplinability"]),
       disdiapason: m["disdiapason"] && decode_disdiapason(m["disdiapason"]),
-      goofer: m["goofer"],
+      goofer: m["goofer"] && decode_goofer(m["goofer"]),
       homocerc: m["homocerc"],
-      laryngograph: m["laryngograph"],
-      leucitis: m["leucitis"],
-      lymphocyst: m["lymphocyst"],
-      microcosmology: m["microcosmology"],
-      nauseation: m["nauseation"],
+      laryngograph: m["laryngograph"] && decode_laryngograph(m["laryngograph"]),
+      leucitis: m["leucitis"] && decode_leucitis(m["leucitis"]),
+      lymphocyst: m["lymphocyst"] && decode_lymphocyst(m["lymphocyst"]),
+      microcosmology: m["microcosmology"] && decode_microcosmology(m["microcosmology"]),
+      nauseation: m["nauseation"] && decode_nauseation(m["nauseation"]),
       nonbookish: m["nonbookish"],
-      patarin: m["Patarin"],
-      preliberal: m["preliberal"],
-      prettifier: m["prettifier"],
-      rangework: m["rangework"],
-      redient: m["redient"],
-      subfusiform: m["subfusiform"],
-      suicidical: m["suicidical"],
-      swow: m["swow"],
-      wastrel: m["wastrel"],
-      wingle: m["wingle"],
+      patarin: m["Patarin"] && decode_patarin(m["Patarin"]),
+      preliberal: m["preliberal"] && decode_preliberal(m["preliberal"]),
+      prettifier: m["prettifier"] && decode_prettifier(m["prettifier"]),
+      rangework: m["rangework"] && decode_rangework(m["rangework"]),
+      redient: m["redient"] && decode_redient(m["redient"]),
+      subfusiform: m["subfusiform"] && decode_subfusiform(m["subfusiform"]),
+      suicidical: m["suicidical"] && decode_suicidical(m["suicidical"]),
+      swow: m["swow"] && decode_swow(m["swow"]),
+      wastrel: m["wastrel"] && decode_wastrel(m["wastrel"]),
+      wingle: m["wingle"] && decode_wingle(m["wingle"]),
     }
   end
 
@@ -1383,39 +1651,173 @@ defmodule LaviniaClass do
           uproute: integer() | nil
         }
 
+  def decode_agitable(value) when is_integer(value), do: value
+  def decode_agitable(_), do: {:error, "Unexpected type when decoding LaviniaClass.agitable"}
+
+  def encode_agitable(value) when is_integer(value), do: value
+  def encode_agitable(_), do: {:error, "Unexpected type when encoding LaviniaClass.agitable"}
+
+  def decode_asininity(value) when is_integer(value), do: value
+  def decode_asininity(_), do: {:error, "Unexpected type when decoding LaviniaClass.asininity"}
+
+  def encode_asininity(value) when is_integer(value), do: value
+  def encode_asininity(_), do: {:error, "Unexpected type when encoding LaviniaClass.asininity"}
+
+  def decode_benefiter(value) when is_integer(value), do: value
+  def decode_benefiter(_), do: {:error, "Unexpected type when decoding LaviniaClass.benefiter"}
+
+  def encode_benefiter(value) when is_integer(value), do: value
+  def encode_benefiter(_), do: {:error, "Unexpected type when encoding LaviniaClass.benefiter"}
+
+  def decode_bronzelike(value) when is_integer(value), do: value
+  def decode_bronzelike(_), do: {:error, "Unexpected type when decoding LaviniaClass.bronzelike"}
+
+  def encode_bronzelike(value) when is_integer(value), do: value
+  def encode_bronzelike(_), do: {:error, "Unexpected type when encoding LaviniaClass.bronzelike"}
+
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding LaviniaClass.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding LaviniaClass.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding LaviniaClass.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding LaviniaClass.chirotherium"}
+
+  def decode_cholesteatomatous(value) when is_integer(value), do: value
+  def decode_cholesteatomatous(_), do: {:error, "Unexpected type when decoding LaviniaClass.cholesteatomatous"}
+
+  def encode_cholesteatomatous(value) when is_integer(value), do: value
+  def encode_cholesteatomatous(_), do: {:error, "Unexpected type when encoding LaviniaClass.cholesteatomatous"}
+
+  def decode_deprivement(value) when is_integer(value), do: value
+  def decode_deprivement(_), do: {:error, "Unexpected type when decoding LaviniaClass.deprivement"}
+
+  def encode_deprivement(value) when is_integer(value), do: value
+  def encode_deprivement(_), do: {:error, "Unexpected type when encoding LaviniaClass.deprivement"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding LaviniaClass.disdiapason"}
 
   def encode_disdiapason(value) when is_binary(value), do: value
   def encode_disdiapason(_), do: {:error, "Unexpected type when encoding LaviniaClass.disdiapason"}
 
+  def decode_flippantness(value) when is_integer(value), do: value
+  def decode_flippantness(_), do: {:error, "Unexpected type when decoding LaviniaClass.flippantness"}
+
+  def encode_flippantness(value) when is_integer(value), do: value
+  def encode_flippantness(_), do: {:error, "Unexpected type when encoding LaviniaClass.flippantness"}
+
+  def decode_fogproof(value) when is_integer(value), do: value
+  def decode_fogproof(_), do: {:error, "Unexpected type when decoding LaviniaClass.fogproof"}
+
+  def encode_fogproof(value) when is_integer(value), do: value
+  def encode_fogproof(_), do: {:error, "Unexpected type when encoding LaviniaClass.fogproof"}
+
+  def decode_merrymeeting(value) when is_integer(value), do: value
+  def decode_merrymeeting(_), do: {:error, "Unexpected type when decoding LaviniaClass.merrymeeting"}
+
+  def encode_merrymeeting(value) when is_integer(value), do: value
+  def encode_merrymeeting(_), do: {:error, "Unexpected type when encoding LaviniaClass.merrymeeting"}
+
+  def decode_overcareful(value) when is_integer(value), do: value
+  def decode_overcareful(_), do: {:error, "Unexpected type when decoding LaviniaClass.overcareful"}
+
+  def encode_overcareful(value) when is_integer(value), do: value
+  def encode_overcareful(_), do: {:error, "Unexpected type when encoding LaviniaClass.overcareful"}
+
+  def decode_panaris(value) when is_integer(value), do: value
+  def decode_panaris(_), do: {:error, "Unexpected type when decoding LaviniaClass.panaris"}
+
+  def encode_panaris(value) when is_integer(value), do: value
+  def encode_panaris(_), do: {:error, "Unexpected type when encoding LaviniaClass.panaris"}
+
+  def decode_preacceptance(value) when is_integer(value), do: value
+  def decode_preacceptance(_), do: {:error, "Unexpected type when decoding LaviniaClass.preacceptance"}
+
+  def encode_preacceptance(value) when is_integer(value), do: value
+  def encode_preacceptance(_), do: {:error, "Unexpected type when encoding LaviniaClass.preacceptance"}
+
+  def decode_quinoxaline(value) when is_integer(value), do: value
+  def decode_quinoxaline(_), do: {:error, "Unexpected type when decoding LaviniaClass.quinoxaline"}
+
+  def encode_quinoxaline(value) when is_integer(value), do: value
+  def encode_quinoxaline(_), do: {:error, "Unexpected type when encoding LaviniaClass.quinoxaline"}
+
+  def decode_sig(value) when is_integer(value), do: value
+  def decode_sig(_), do: {:error, "Unexpected type when decoding LaviniaClass.sig"}
+
+  def encode_sig(value) when is_integer(value), do: value
+  def encode_sig(_), do: {:error, "Unexpected type when encoding LaviniaClass.sig"}
+
+  def decode_superconfusion(value) when is_integer(value), do: value
+  def decode_superconfusion(_), do: {:error, "Unexpected type when decoding LaviniaClass.superconfusion"}
+
+  def encode_superconfusion(value) when is_integer(value), do: value
+  def encode_superconfusion(_), do: {:error, "Unexpected type when encoding LaviniaClass.superconfusion"}
+
+  def decode_tacana(value) when is_integer(value), do: value
+  def decode_tacana(_), do: {:error, "Unexpected type when decoding LaviniaClass.tacana"}
+
+  def encode_tacana(value) when is_integer(value), do: value
+  def encode_tacana(_), do: {:error, "Unexpected type when encoding LaviniaClass.tacana"}
+
+  def decode_tillotter(value) when is_integer(value), do: value
+  def decode_tillotter(_), do: {:error, "Unexpected type when decoding LaviniaClass.tillotter"}
+
+  def encode_tillotter(value) when is_integer(value), do: value
+  def encode_tillotter(_), do: {:error, "Unexpected type when encoding LaviniaClass.tillotter"}
+
+  def decode_tranquillize(value) when is_integer(value), do: value
+  def decode_tranquillize(_), do: {:error, "Unexpected type when decoding LaviniaClass.tranquillize"}
+
+  def encode_tranquillize(value) when is_integer(value), do: value
+  def encode_tranquillize(_), do: {:error, "Unexpected type when encoding LaviniaClass.tranquillize"}
+
+  def decode_unquestionable(value) when is_integer(value), do: value
+  def decode_unquestionable(_), do: {:error, "Unexpected type when decoding LaviniaClass.unquestionable"}
+
+  def encode_unquestionable(value) when is_integer(value), do: value
+  def encode_unquestionable(_), do: {:error, "Unexpected type when encoding LaviniaClass.unquestionable"}
+
+  def decode_uproute(value) when is_integer(value), do: value
+  def decode_uproute(_), do: {:error, "Unexpected type when decoding LaviniaClass.uproute"}
+
+  def encode_uproute(value) when is_integer(value), do: value
+  def encode_uproute(_), do: {:error, "Unexpected type when encoding LaviniaClass.uproute"}
+
   def from_map(m) do
     %LaviniaClass{
-      agitable: m["agitable"],
-      asininity: m["asininity"],
-      benefiter: m["benefiter"],
-      bronzelike: m["bronzelike"],
-      catharticalness: m["catharticalness"],
-      chirotherium: m["Chirotherium"],
-      cholesteatomatous: m["cholesteatomatous"],
-      deprivement: m["deprivement"],
+      agitable: m["agitable"] && decode_agitable(m["agitable"]),
+      asininity: m["asininity"] && decode_asininity(m["asininity"]),
+      benefiter: m["benefiter"] && decode_benefiter(m["benefiter"]),
+      bronzelike: m["bronzelike"] && decode_bronzelike(m["bronzelike"]),
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
+      cholesteatomatous: m["cholesteatomatous"] && decode_cholesteatomatous(m["cholesteatomatous"]),
+      deprivement: m["deprivement"] && decode_deprivement(m["deprivement"]),
       disdiapason: m["disdiapason"] && decode_disdiapason(m["disdiapason"]),
-      flippantness: m["flippantness"],
-      fogproof: m["fogproof"],
+      flippantness: m["flippantness"] && decode_flippantness(m["flippantness"]),
+      fogproof: m["fogproof"] && decode_fogproof(m["fogproof"]),
       homocerc: m["homocerc"],
-      merrymeeting: m["merrymeeting"],
+      merrymeeting: m["merrymeeting"] && decode_merrymeeting(m["merrymeeting"]),
       nonbookish: m["nonbookish"],
-      overcareful: m["overcareful"],
-      panaris: m["panaris"],
-      preacceptance: m["preacceptance"],
-      quinoxaline: m["quinoxaline"],
-      sig: m["sig"],
-      superconfusion: m["superconfusion"],
-      tacana: m["Tacana"],
-      tillotter: m["tillotter"],
-      tranquillize: m["tranquillize"],
-      unquestionable: m["unquestionable"],
-      uproute: m["uproute"],
+      overcareful: m["overcareful"] && decode_overcareful(m["overcareful"]),
+      panaris: m["panaris"] && decode_panaris(m["panaris"]),
+      preacceptance: m["preacceptance"] && decode_preacceptance(m["preacceptance"]),
+      quinoxaline: m["quinoxaline"] && decode_quinoxaline(m["quinoxaline"]),
+      sig: m["sig"] && decode_sig(m["sig"]),
+      superconfusion: m["superconfusion"] && decode_superconfusion(m["superconfusion"]),
+      tacana: m["Tacana"] && decode_tacana(m["Tacana"]),
+      tillotter: m["tillotter"] && decode_tillotter(m["tillotter"]),
+      tranquillize: m["tranquillize"] && decode_tranquillize(m["tranquillize"]),
+      unquestionable: m["unquestionable"] && decode_unquestionable(m["unquestionable"]),
+      uproute: m["uproute"] && decode_uproute(m["uproute"]),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/priority/combinations3.json/default/QuickType.ex b/head/elixir/test/inputs/json/priority/combinations3.json/default/QuickType.ex
index 7b155b6..8d0efa8 100644
--- a/base/elixir/test/inputs/json/priority/combinations3.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/priority/combinations3.json/default/QuickType.ex
@@ -666,39 +666,173 @@ defmodule LupusClass do
           vendible: integer() | nil
         }
 
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding LupusClass.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding LupusClass.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding LupusClass.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding LupusClass.chirotherium"}
+
+  def decode_chlorioninae(value) when is_integer(value), do: value
+  def decode_chlorioninae(_), do: {:error, "Unexpected type when decoding LupusClass.chlorioninae"}
+
+  def encode_chlorioninae(value) when is_integer(value), do: value
+  def encode_chlorioninae(_), do: {:error, "Unexpected type when encoding LupusClass.chlorioninae"}
+
+  def decode_corvinae(value) when is_integer(value), do: value
+  def decode_corvinae(_), do: {:error, "Unexpected type when decoding LupusClass.corvinae"}
+
+  def encode_corvinae(value) when is_integer(value), do: value
+  def encode_corvinae(_), do: {:error, "Unexpected type when encoding LupusClass.corvinae"}
+
+  def decode_crassina(value) when is_integer(value), do: value
+  def decode_crassina(_), do: {:error, "Unexpected type when decoding LupusClass.crassina"}
+
+  def encode_crassina(value) when is_integer(value), do: value
+  def encode_crassina(_), do: {:error, "Unexpected type when encoding LupusClass.crassina"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding LupusClass.disdiapason"}
 
   def encode_disdiapason(value) when is_binary(value), do: value
   def encode_disdiapason(_), do: {:error, "Unexpected type when encoding LupusClass.disdiapason"}
 
+  def decode_exiguity(value) when is_integer(value), do: value
+  def decode_exiguity(_), do: {:error, "Unexpected type when decoding LupusClass.exiguity"}
+
+  def encode_exiguity(value) when is_integer(value), do: value
+  def encode_exiguity(_), do: {:error, "Unexpected type when encoding LupusClass.exiguity"}
+
+  def decode_farcist(value) when is_integer(value), do: value
+  def decode_farcist(_), do: {:error, "Unexpected type when decoding LupusClass.farcist"}
+
+  def encode_farcist(value) when is_integer(value), do: value
+  def encode_farcist(_), do: {:error, "Unexpected type when encoding LupusClass.farcist"}
+
+  def decode_holographical(value) when is_integer(value), do: value
+  def decode_holographical(_), do: {:error, "Unexpected type when decoding LupusClass.holographical"}
+
+  def encode_holographical(value) when is_integer(value), do: value
+  def encode_holographical(_), do: {:error, "Unexpected type when encoding LupusClass.holographical"}
+
+  def decode_ichthyophagan(value) when is_integer(value), do: value
+  def decode_ichthyophagan(_), do: {:error, "Unexpected type when decoding LupusClass.ichthyophagan"}
+
+  def encode_ichthyophagan(value) when is_integer(value), do: value
+  def encode_ichthyophagan(_), do: {:error, "Unexpected type when encoding LupusClass.ichthyophagan"}
+
+  def decode_implacable(value) when is_integer(value), do: value
+  def decode_implacable(_), do: {:error, "Unexpected type when decoding LupusClass.implacable"}
+
+  def encode_implacable(value) when is_integer(value), do: value
+  def encode_implacable(_), do: {:error, "Unexpected type when encoding LupusClass.implacable"}
+
+  def decode_outshiner(value) when is_integer(value), do: value
+  def decode_outshiner(_), do: {:error, "Unexpected type when decoding LupusClass.outshiner"}
+
+  def encode_outshiner(value) when is_integer(value), do: value
+  def encode_outshiner(_), do: {:error, "Unexpected type when encoding LupusClass.outshiner"}
+
+  def decode_overweather(value) when is_integer(value), do: value
+  def decode_overweather(_), do: {:error, "Unexpected type when decoding LupusClass.overweather"}
+
+  def encode_overweather(value) when is_integer(value), do: value
+  def encode_overweather(_), do: {:error, "Unexpected type when encoding LupusClass.overweather"}
+
+  def decode_protonegroid(value) when is_integer(value), do: value
+  def decode_protonegroid(_), do: {:error, "Unexpected type when decoding LupusClass.protonegroid"}
+
+  def encode_protonegroid(value) when is_integer(value), do: value
+  def encode_protonegroid(_), do: {:error, "Unexpected type when encoding LupusClass.protonegroid"}
+
+  def decode_shallowish(value) when is_integer(value), do: value
+  def decode_shallowish(_), do: {:error, "Unexpected type when decoding LupusClass.shallowish"}
+
+  def encode_shallowish(value) when is_integer(value), do: value
+  def encode_shallowish(_), do: {:error, "Unexpected type when encoding LupusClass.shallowish"}
+
+  def decode_snoke(value) when is_integer(value), do: value
+  def decode_snoke(_), do: {:error, "Unexpected type when decoding LupusClass.snoke"}
+
+  def encode_snoke(value) when is_integer(value), do: value
+  def encode_snoke(_), do: {:error, "Unexpected type when encoding LupusClass.snoke"}
+
+  def decode_snout(value) when is_integer(value), do: value
+  def decode_snout(_), do: {:error, "Unexpected type when decoding LupusClass.snout"}
+
+  def encode_snout(value) when is_integer(value), do: value
+  def encode_snout(_), do: {:error, "Unexpected type when encoding LupusClass.snout"}
+
+  def decode_surveillance(value) when is_integer(value), do: value
+  def decode_surveillance(_), do: {:error, "Unexpected type when decoding LupusClass.surveillance"}
+
+  def encode_surveillance(value) when is_integer(value), do: value
+  def encode_surveillance(_), do: {:error, "Unexpected type when encoding LupusClass.surveillance"}
+
+  def decode_threshingtime(value) when is_integer(value), do: value
+  def decode_threshingtime(_), do: {:error, "Unexpected type when decoding LupusClass.threshingtime"}
+
+  def encode_threshingtime(value) when is_integer(value), do: value
+  def encode_threshingtime(_), do: {:error, "Unexpected type when encoding LupusClass.threshingtime"}
+
+  def decode_thysanocarpus(value) when is_integer(value), do: value
+  def decode_thysanocarpus(_), do: {:error, "Unexpected type when decoding LupusClass.thysanocarpus"}
+
+  def encode_thysanocarpus(value) when is_integer(value), do: value
+  def encode_thysanocarpus(_), do: {:error, "Unexpected type when encoding LupusClass.thysanocarpus"}
+
+  def decode_unsignificantly(value) when is_integer(value), do: value
+  def decode_unsignificantly(_), do: {:error, "Unexpected type when decoding LupusClass.unsignificantly"}
+
+  def encode_unsignificantly(value) when is_integer(value), do: value
+  def encode_unsignificantly(_), do: {:error, "Unexpected type when encoding LupusClass.unsignificantly"}
+
+  def decode_unsnap(value) when is_integer(value), do: value
+  def decode_unsnap(_), do: {:error, "Unexpected type when decoding LupusClass.unsnap"}
+
+  def encode_unsnap(value) when is_integer(value), do: value
+  def encode_unsnap(_), do: {:error, "Unexpected type when encoding LupusClass.unsnap"}
+
+  def decode_vendible(value) when is_integer(value), do: value
+  def decode_vendible(_), do: {:error, "Unexpected type when decoding LupusClass.vendible"}
+
+  def encode_vendible(value) when is_integer(value), do: value
+  def encode_vendible(_), do: {:error, "Unexpected type when encoding LupusClass.vendible"}
+
   def from_map(m) do
     %LupusClass{
-      catharticalness: m["catharticalness"],
-      chirotherium: m["Chirotherium"],
-      chlorioninae: m["Chlorioninae"],
-      corvinae: m["Corvinae"],
-      crassina: m["Crassina"],
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
+      chlorioninae: m["Chlorioninae"] && decode_chlorioninae(m["Chlorioninae"]),
+      corvinae: m["Corvinae"] && decode_corvinae(m["Corvinae"]),
+      crassina: m["Crassina"] && decode_crassina(m["Crassina"]),
       disdiapason: m["disdiapason"] && decode_disdiapason(m["disdiapason"]),
-      exiguity: m["exiguity"],
-      farcist: m["farcist"],
-      holographical: m["holographical"],
+      exiguity: m["exiguity"] && decode_exiguity(m["exiguity"]),
+      farcist: m["farcist"] && decode_farcist(m["farcist"]),
+      holographical: m["holographical"] && decode_holographical(m["holographical"]),
       homocerc: m["homocerc"],
-      ichthyophagan: m["ichthyophagan"],
-      implacable: m["implacable"],
+      ichthyophagan: m["ichthyophagan"] && decode_ichthyophagan(m["ichthyophagan"]),
+      implacable: m["implacable"] && decode_implacable(m["implacable"]),
       nonbookish: m["nonbookish"],
-      outshiner: m["outshiner"],
-      overweather: m["overweather"],
-      protonegroid: m["protonegroid"],
-      shallowish: m["shallowish"],
-      snoke: m["snoke"],
-      snout: m["snout"],
-      surveillance: m["surveillance"],
-      threshingtime: m["threshingtime"],
-      thysanocarpus: m["Thysanocarpus"],
-      unsignificantly: m["unsignificantly"],
-      unsnap: m["unsnap"],
-      vendible: m["vendible"],
+      outshiner: m["outshiner"] && decode_outshiner(m["outshiner"]),
+      overweather: m["overweather"] && decode_overweather(m["overweather"]),
+      protonegroid: m["protonegroid"] && decode_protonegroid(m["protonegroid"]),
+      shallowish: m["shallowish"] && decode_shallowish(m["shallowish"]),
+      snoke: m["snoke"] && decode_snoke(m["snoke"]),
+      snout: m["snout"] && decode_snout(m["snout"]),
+      surveillance: m["surveillance"] && decode_surveillance(m["surveillance"]),
+      threshingtime: m["threshingtime"] && decode_threshingtime(m["threshingtime"]),
+      thysanocarpus: m["Thysanocarpus"] && decode_thysanocarpus(m["Thysanocarpus"]),
+      unsignificantly: m["unsignificantly"] && decode_unsignificantly(m["unsignificantly"]),
+      unsnap: m["unsnap"] && decode_unsnap(m["unsnap"]),
+      vendible: m["vendible"] && decode_vendible(m["vendible"]),
     }
   end
 
@@ -796,57 +930,191 @@ defmodule Maslin do
           unjudiciously: nil | nil
         }
 
+  def decode_alicant(value) when is_integer(value), do: value
+  def decode_alicant(_), do: {:error, "Unexpected type when decoding Maslin.alicant"}
+
+  def encode_alicant(value) when is_integer(value), do: value
+  def encode_alicant(_), do: {:error, "Unexpected type when encoding Maslin.alicant"}
+
+  def decode_anticorrosive(value) when is_integer(value), do: value
+  def decode_anticorrosive(_), do: {:error, "Unexpected type when decoding Maslin.anticorrosive"}
+
+  def encode_anticorrosive(value) when is_integer(value), do: value
+  def encode_anticorrosive(_), do: {:error, "Unexpected type when encoding Maslin.anticorrosive"}
+
+  def decode_be(value) when is_integer(value), do: value
+  def decode_be(_), do: {:error, "Unexpected type when decoding Maslin.be"}
+
+  def encode_be(value) when is_integer(value), do: value
+  def encode_be(_), do: {:error, "Unexpected type when encoding Maslin.be"}
+
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding Maslin.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding Maslin.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding Maslin.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding Maslin.chirotherium"}
+
+  def decode_chub(value) when is_integer(value), do: value
+  def decode_chub(_), do: {:error, "Unexpected type when decoding Maslin.chub"}
+
+  def encode_chub(value) when is_integer(value), do: value
+  def encode_chub(_), do: {:error, "Unexpected type when encoding Maslin.chub"}
+
+  def decode_cuprosilicon(value) when is_integer(value), do: value
+  def decode_cuprosilicon(_), do: {:error, "Unexpected type when decoding Maslin.cuprosilicon"}
+
+  def encode_cuprosilicon(value) when is_integer(value), do: value
+  def encode_cuprosilicon(_), do: {:error, "Unexpected type when encoding Maslin.cuprosilicon"}
+
+  def decode_curtailedly(value) when is_integer(value), do: value
+  def decode_curtailedly(_), do: {:error, "Unexpected type when decoding Maslin.curtailedly"}
+
+  def encode_curtailedly(value) when is_integer(value), do: value
+  def encode_curtailedly(_), do: {:error, "Unexpected type when encoding Maslin.curtailedly"}
+
+  def decode_dellenite(value) when is_integer(value), do: value
+  def decode_dellenite(_), do: {:error, "Unexpected type when decoding Maslin.dellenite"}
+
+  def encode_dellenite(value) when is_integer(value), do: value
+  def encode_dellenite(_), do: {:error, "Unexpected type when encoding Maslin.dellenite"}
+
+  def decode_dimitry(value) when is_integer(value), do: value
+  def decode_dimitry(_), do: {:error, "Unexpected type when decoding Maslin.dimitry"}
+
+  def encode_dimitry(value) when is_integer(value), do: value
+  def encode_dimitry(_), do: {:error, "Unexpected type when encoding Maslin.dimitry"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding Maslin.disdiapason"}
 
   def encode_disdiapason(value) when is_binary(value), do: value
   def encode_disdiapason(_), do: {:error, "Unexpected type when encoding Maslin.disdiapason"}
 
+  def decode_ethmoiditis(value) when is_integer(value), do: value
+  def decode_ethmoiditis(_), do: {:error, "Unexpected type when decoding Maslin.ethmoiditis"}
+
+  def encode_ethmoiditis(value) when is_integer(value), do: value
+  def encode_ethmoiditis(_), do: {:error, "Unexpected type when encoding Maslin.ethmoiditis"}
+
+  def decode_goatherd(value) when is_integer(value), do: value
+  def decode_goatherd(_), do: {:error, "Unexpected type when decoding Maslin.goatherd"}
+
+  def encode_goatherd(value) when is_integer(value), do: value
+  def encode_goatherd(_), do: {:error, "Unexpected type when encoding Maslin.goatherd"}
+
+  def decode_hammerdress(value) when is_integer(value), do: value
+  def decode_hammerdress(_), do: {:error, "Unexpected type when decoding Maslin.hammerdress"}
+
+  def encode_hammerdress(value) when is_integer(value), do: value
+  def encode_hammerdress(_), do: {:error, "Unexpected type when encoding Maslin.hammerdress"}
+
+  def decode_lacunosity(value) when is_integer(value), do: value
+  def decode_lacunosity(_), do: {:error, "Unexpected type when decoding Maslin.lacunosity"}
+
+  def encode_lacunosity(value) when is_integer(value), do: value
+  def encode_lacunosity(_), do: {:error, "Unexpected type when encoding Maslin.lacunosity"}
+
+  def decode_mameliere(value) when is_integer(value), do: value
+  def decode_mameliere(_), do: {:error, "Unexpected type when decoding Maslin.mameliere"}
+
+  def encode_mameliere(value) when is_integer(value), do: value
+  def encode_mameliere(_), do: {:error, "Unexpected type when encoding Maslin.mameliere"}
+
+  def decode_oafishly(value) when is_integer(value), do: value
+  def decode_oafishly(_), do: {:error, "Unexpected type when decoding Maslin.oafishly"}
+
+  def encode_oafishly(value) when is_integer(value), do: value
+  def encode_oafishly(_), do: {:error, "Unexpected type when encoding Maslin.oafishly"}
+
+  def decode_saccharulmic(value) when is_integer(value), do: value
+  def decode_saccharulmic(_), do: {:error, "Unexpected type when decoding Maslin.saccharulmic"}
+
+  def encode_saccharulmic(value) when is_integer(value), do: value
+  def encode_saccharulmic(_), do: {:error, "Unexpected type when encoding Maslin.saccharulmic"}
+
+  def decode_scowlful(value) when is_integer(value), do: value
+  def decode_scowlful(_), do: {:error, "Unexpected type when decoding Maslin.scowlful"}
+
+  def encode_scowlful(value) when is_integer(value), do: value
+  def encode_scowlful(_), do: {:error, "Unexpected type when encoding Maslin.scowlful"}
+
+  def decode_sphaeridial(value) when is_integer(value), do: value
+  def decode_sphaeridial(_), do: {:error, "Unexpected type when decoding Maslin.sphaeridial"}
+
+  def encode_sphaeridial(value) when is_integer(value), do: value
+  def encode_sphaeridial(_), do: {:error, "Unexpected type when encoding Maslin.sphaeridial"}
+
+  def decode_subsecive(value) when is_integer(value), do: value
+  def decode_subsecive(_), do: {:error, "Unexpected type when decoding Maslin.subsecive"}
+
+  def encode_subsecive(value) when is_integer(value), do: value
+  def encode_subsecive(_), do: {:error, "Unexpected type when encoding Maslin.subsecive"}
+
+  def decode_trachyglossate(value) when is_integer(value), do: value
+  def decode_trachyglossate(_), do: {:error, "Unexpected type when decoding Maslin.trachyglossate"}
+
+  def encode_trachyglossate(value) when is_integer(value), do: value
+  def encode_trachyglossate(_), do: {:error, "Unexpected type when encoding Maslin.trachyglossate"}
+
+  def decode_unassuaged(value) when is_integer(value), do: value
+  def decode_unassuaged(_), do: {:error, "Unexpected type when decoding Maslin.unassuaged"}
+
+  def encode_unassuaged(value) when is_integer(value), do: value
+  def encode_unassuaged(_), do: {:error, "Unexpected type when encoding Maslin.unassuaged"}
+
   def from_map(m) do
     %Maslin{
-      alicant: m["Alicant"],
+      alicant: m["Alicant"] && decode_alicant(m["Alicant"]),
       antiatonement: m["antiatonement"],
-      anticorrosive: m["anticorrosive"],
+      anticorrosive: m["anticorrosive"] && decode_anticorrosive(m["anticorrosive"]),
       aphidozer: m["aphidozer"],
       bakuninist: m["Bakuninist"],
-      be: m["be"],
-      catharticalness: m["catharticalness"],
-      chirotherium: m["Chirotherium"],
-      chub: m["chub"],
-      cuprosilicon: m["cuprosilicon"],
-      curtailedly: m["curtailedly"],
-      dellenite: m["dellenite"],
-      dimitry: m["Dimitry"],
+      be: m["be"] && decode_be(m["be"]),
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
+      chub: m["chub"] && decode_chub(m["chub"]),
+      cuprosilicon: m["cuprosilicon"] && decode_cuprosilicon(m["cuprosilicon"]),
+      curtailedly: m["curtailedly"] && decode_curtailedly(m["curtailedly"]),
+      dellenite: m["dellenite"] && decode_dellenite(m["dellenite"]),
+      dimitry: m["Dimitry"] && decode_dimitry(m["Dimitry"]),
       disdiapason: m["disdiapason"] && decode_disdiapason(m["disdiapason"]),
       edifying: m["edifying"],
-      ethmoiditis: m["ethmoiditis"],
+      ethmoiditis: m["ethmoiditis"] && decode_ethmoiditis(m["ethmoiditis"]),
       gastralgy: m["gastralgy"],
-      goatherd: m["goatherd"],
-      hammerdress: m["hammerdress"],
+      goatherd: m["goatherd"] && decode_goatherd(m["goatherd"]),
+      hammerdress: m["hammerdress"] && decode_hammerdress(m["hammerdress"]),
       hangfire: m["hangfire"],
       homocerc: m["homocerc"],
-      lacunosity: m["lacunosity"],
+      lacunosity: m["lacunosity"] && decode_lacunosity(m["lacunosity"]),
       longiloquence: m["longiloquence"],
-      mameliere: m["mameliere"],
+      mameliere: m["mameliere"] && decode_mameliere(m["mameliere"]),
       motherless: m["motherless"],
       nonbookish: m["nonbookish"],
       noncorrodible: m["noncorrodible"],
       nonsensicality: m["nonsensicality"],
-      oafishly: m["oafishly"],
+      oafishly: m["oafishly"] && decode_oafishly(m["oafishly"]),
       pfund: m["pfund"],
       preadvisory: m["preadvisory"],
       retroflexed: m["retroflexed"],
-      saccharulmic: m["saccharulmic"],
-      scowlful: m["scowlful"],
+      saccharulmic: m["saccharulmic"] && decode_saccharulmic(m["saccharulmic"]),
+      scowlful: m["scowlful"] && decode_scowlful(m["scowlful"]),
       secluded: m["secluded"],
       slackage: m["slackage"],
-      sphaeridial: m["sphaeridial"],
+      sphaeridial: m["sphaeridial"] && decode_sphaeridial(m["sphaeridial"]),
       spondulics: m["spondulics"],
-      subsecive: m["subsecive"],
+      subsecive: m["subsecive"] && decode_subsecive(m["subsecive"]),
       swellmobsman: m["swellmobsman"],
-      trachyglossate: m["trachyglossate"],
+      trachyglossate: m["trachyglossate"] && decode_trachyglossate(m["trachyglossate"]),
       trialogue: m["trialogue"],
-      unassuaged: m["unassuaged"],
+      unassuaged: m["unassuaged"] && decode_unassuaged(m["unassuaged"]),
       ungross: m["ungross"],
       unjudiciously: m["unjudiciously"],
     }
@@ -1023,6 +1291,20 @@ defmodule MonotheisticallyClass do
           whitestone: nil | nil
         }
 
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding MonotheisticallyClass.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding MonotheisticallyClass.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding MonotheisticallyClass.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding MonotheisticallyClass.chirotherium"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding MonotheisticallyClass.disdiapason"}
 
@@ -1032,9 +1314,9 @@ defmodule MonotheisticallyClass do
   def from_map(m) do
     %MonotheisticallyClass{
       blaspheme: m["blaspheme"],
-      catharticalness: m["catharticalness"],
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
       celiosalpingectomy: m["celiosalpingectomy"],
-      chirotherium: m["Chirotherium"],
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
       consummativeness: m["consummativeness"],
       disdiapason: m["disdiapason"] && decode_disdiapason(m["disdiapason"]),
       egestive: m["egestive"],
@@ -1630,39 +1912,173 @@ defmodule PiaculumClass do
           zipper: integer() | nil
         }
 
+  def decode_alada(value) when is_integer(value), do: value
+  def decode_alada(_), do: {:error, "Unexpected type when decoding PiaculumClass.alada"}
+
+  def encode_alada(value) when is_integer(value), do: value
+  def encode_alada(_), do: {:error, "Unexpected type when encoding PiaculumClass.alada"}
+
+  def decode_amphistomous(value) when is_integer(value), do: value
+  def decode_amphistomous(_), do: {:error, "Unexpected type when decoding PiaculumClass.amphistomous"}
+
+  def encode_amphistomous(value) when is_integer(value), do: value
+  def encode_amphistomous(_), do: {:error, "Unexpected type when encoding PiaculumClass.amphistomous"}
+
+  def decode_boysenberry(value) when is_integer(value), do: value
+  def decode_boysenberry(_), do: {:error, "Unexpected type when decoding PiaculumClass.boysenberry"}
+
+  def encode_boysenberry(value) when is_integer(value), do: value
+  def encode_boysenberry(_), do: {:error, "Unexpected type when encoding PiaculumClass.boysenberry"}
+
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding PiaculumClass.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding PiaculumClass.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding PiaculumClass.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding PiaculumClass.chirotherium"}
+
+  def decode_decardinalize(value) when is_integer(value), do: value
+  def decode_decardinalize(_), do: {:error, "Unexpected type when decoding PiaculumClass.decardinalize"}
+
+  def encode_decardinalize(value) when is_integer(value), do: value
+  def encode_decardinalize(_), do: {:error, "Unexpected type when encoding PiaculumClass.decardinalize"}
+
+  def decode_discouragement(value) when is_integer(value), do: value
+  def decode_discouragement(_), do: {:error, "Unexpected type when decoding PiaculumClass.discouragement"}
+
+  def encode_discouragement(value) when is_integer(value), do: value
+  def encode_discouragement(_), do: {:error, "Unexpected type when encoding PiaculumClass.discouragement"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding PiaculumClass.disdiapason"}
 
   def encode_disdiapason(value) when is_binary(value), do: value
   def encode_disdiapason(_), do: {:error, "Unexpected type when encoding PiaculumClass.disdiapason"}
 
+  def decode_doitrified(value) when is_integer(value), do: value
+  def decode_doitrified(_), do: {:error, "Unexpected type when decoding PiaculumClass.doitrified"}
+
+  def encode_doitrified(value) when is_integer(value), do: value
+  def encode_doitrified(_), do: {:error, "Unexpected type when encoding PiaculumClass.doitrified"}
+
+  def decode_hexaspermous(value) when is_integer(value), do: value
+  def decode_hexaspermous(_), do: {:error, "Unexpected type when decoding PiaculumClass.hexaspermous"}
+
+  def encode_hexaspermous(value) when is_integer(value), do: value
+  def encode_hexaspermous(_), do: {:error, "Unexpected type when encoding PiaculumClass.hexaspermous"}
+
+  def decode_insinking(value) when is_integer(value), do: value
+  def decode_insinking(_), do: {:error, "Unexpected type when decoding PiaculumClass.insinking"}
+
+  def encode_insinking(value) when is_integer(value), do: value
+  def encode_insinking(_), do: {:error, "Unexpected type when encoding PiaculumClass.insinking"}
+
+  def decode_loathfulness(value) when is_integer(value), do: value
+  def decode_loathfulness(_), do: {:error, "Unexpected type when decoding PiaculumClass.loathfulness"}
+
+  def encode_loathfulness(value) when is_integer(value), do: value
+  def encode_loathfulness(_), do: {:error, "Unexpected type when encoding PiaculumClass.loathfulness"}
+
+  def decode_miasmatical(value) when is_integer(value), do: value
+  def decode_miasmatical(_), do: {:error, "Unexpected type when decoding PiaculumClass.miasmatical"}
+
+  def encode_miasmatical(value) when is_integer(value), do: value
+  def encode_miasmatical(_), do: {:error, "Unexpected type when encoding PiaculumClass.miasmatical"}
+
+  def decode_neurofibril(value) when is_integer(value), do: value
+  def decode_neurofibril(_), do: {:error, "Unexpected type when decoding PiaculumClass.neurofibril"}
+
+  def encode_neurofibril(value) when is_integer(value), do: value
+  def encode_neurofibril(_), do: {:error, "Unexpected type when encoding PiaculumClass.neurofibril"}
+
+  def decode_phonendoscope(value) when is_integer(value), do: value
+  def decode_phonendoscope(_), do: {:error, "Unexpected type when decoding PiaculumClass.phonendoscope"}
+
+  def encode_phonendoscope(value) when is_integer(value), do: value
+  def encode_phonendoscope(_), do: {:error, "Unexpected type when encoding PiaculumClass.phonendoscope"}
+
+  def decode_pilferment(value) when is_integer(value), do: value
+  def decode_pilferment(_), do: {:error, "Unexpected type when decoding PiaculumClass.pilferment"}
+
+  def encode_pilferment(value) when is_integer(value), do: value
+  def encode_pilferment(_), do: {:error, "Unexpected type when encoding PiaculumClass.pilferment"}
+
+  def decode_predismissory(value) when is_integer(value), do: value
+  def decode_predismissory(_), do: {:error, "Unexpected type when decoding PiaculumClass.predismissory"}
+
+  def encode_predismissory(value) when is_integer(value), do: value
+  def encode_predismissory(_), do: {:error, "Unexpected type when encoding PiaculumClass.predismissory"}
+
+  def decode_preinscription(value) when is_integer(value), do: value
+  def decode_preinscription(_), do: {:error, "Unexpected type when decoding PiaculumClass.preinscription"}
+
+  def encode_preinscription(value) when is_integer(value), do: value
+  def encode_preinscription(_), do: {:error, "Unexpected type when encoding PiaculumClass.preinscription"}
+
+  def decode_quotative(value) when is_integer(value), do: value
+  def decode_quotative(_), do: {:error, "Unexpected type when decoding PiaculumClass.quotative"}
+
+  def encode_quotative(value) when is_integer(value), do: value
+  def encode_quotative(_), do: {:error, "Unexpected type when encoding PiaculumClass.quotative"}
+
+  def decode_sienna(value) when is_integer(value), do: value
+  def decode_sienna(_), do: {:error, "Unexpected type when decoding PiaculumClass.sienna"}
+
+  def encode_sienna(value) when is_integer(value), do: value
+  def encode_sienna(_), do: {:error, "Unexpected type when encoding PiaculumClass.sienna"}
+
+  def decode_thorax(value) when is_integer(value), do: value
+  def decode_thorax(_), do: {:error, "Unexpected type when decoding PiaculumClass.thorax"}
+
+  def encode_thorax(value) when is_integer(value), do: value
+  def encode_thorax(_), do: {:error, "Unexpected type when encoding PiaculumClass.thorax"}
+
+  def decode_yachting(value) when is_integer(value), do: value
+  def decode_yachting(_), do: {:error, "Unexpected type when decoding PiaculumClass.yachting"}
+
+  def encode_yachting(value) when is_integer(value), do: value
+  def encode_yachting(_), do: {:error, "Unexpected type when encoding PiaculumClass.yachting"}
+
+  def decode_zipper(value) when is_integer(value), do: value
+  def decode_zipper(_), do: {:error, "Unexpected type when decoding PiaculumClass.zipper"}
+
+  def encode_zipper(value) when is_integer(value), do: value
+  def encode_zipper(_), do: {:error, "Unexpected type when encoding PiaculumClass.zipper"}
+
   def from_map(m) do
     %PiaculumClass{
-      alada: m["alada"],
-      amphistomous: m["amphistomous"],
-      boysenberry: m["boysenberry"],
-      catharticalness: m["catharticalness"],
-      chirotherium: m["Chirotherium"],
-      decardinalize: m["decardinalize"],
-      discouragement: m["discouragement"],
+      alada: m["alada"] && decode_alada(m["alada"]),
+      amphistomous: m["amphistomous"] && decode_amphistomous(m["amphistomous"]),
+      boysenberry: m["boysenberry"] && decode_boysenberry(m["boysenberry"]),
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
+      decardinalize: m["decardinalize"] && decode_decardinalize(m["decardinalize"]),
+      discouragement: m["discouragement"] && decode_discouragement(m["discouragement"]),
       disdiapason: m["disdiapason"] && decode_disdiapason(m["disdiapason"]),
-      doitrified: m["doitrified"],
-      hexaspermous: m["hexaspermous"],
+      doitrified: m["doitrified"] && decode_doitrified(m["doitrified"]),
+      hexaspermous: m["hexaspermous"] && decode_hexaspermous(m["hexaspermous"]),
       homocerc: m["homocerc"],
-      insinking: m["insinking"],
-      loathfulness: m["loathfulness"],
-      miasmatical: m["miasmatical"],
-      neurofibril: m["neurofibril"],
+      insinking: m["insinking"] && decode_insinking(m["insinking"]),
+      loathfulness: m["loathfulness"] && decode_loathfulness(m["loathfulness"]),
+      miasmatical: m["miasmatical"] && decode_miasmatical(m["miasmatical"]),
+      neurofibril: m["neurofibril"] && decode_neurofibril(m["neurofibril"]),
       nonbookish: m["nonbookish"],
-      phonendoscope: m["phonendoscope"],
-      pilferment: m["pilferment"],
-      predismissory: m["predismissory"],
-      preinscription: m["preinscription"],
-      quotative: m["quotative"],
-      sienna: m["sienna"],
-      thorax: m["thorax"],
-      yachting: m["yachting"],
-      zipper: m["Zipper"],
+      phonendoscope: m["phonendoscope"] && decode_phonendoscope(m["phonendoscope"]),
+      pilferment: m["pilferment"] && decode_pilferment(m["pilferment"]),
+      predismissory: m["predismissory"] && decode_predismissory(m["predismissory"]),
+      preinscription: m["preinscription"] && decode_preinscription(m["preinscription"]),
+      quotative: m["quotative"] && decode_quotative(m["quotative"]),
+      sienna: m["sienna"] && decode_sienna(m["sienna"]),
+      thorax: m["thorax"] && decode_thorax(m["thorax"]),
+      yachting: m["yachting"] && decode_yachting(m["yachting"]),
+      zipper: m["Zipper"] && decode_zipper(m["Zipper"]),
     }
   end
 
@@ -1740,6 +2156,20 @@ defmodule Pneumocele do
           visitorial: nil | nil
         }
 
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding Pneumocele.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding Pneumocele.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding Pneumocele.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding Pneumocele.chirotherium"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding Pneumocele.disdiapason"}
 
@@ -1749,8 +2179,8 @@ defmodule Pneumocele do
   def from_map(m) do
     %Pneumocele{
       carbonarism: m["Carbonarism"],
-      catharticalness: m["catharticalness"],
-      chirotherium: m["Chirotherium"],
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
       cineolic: m["cineolic"],
       cobbly: m["cobbly"],
       conchyliferous: m["conchyliferous"],
diff --git a/base/elixir/test/inputs/json/priority/combinations4.json/default/QuickType.ex b/head/elixir/test/inputs/json/priority/combinations4.json/default/QuickType.ex
index 323ed8a..16848d2 100644
--- a/base/elixir/test/inputs/json/priority/combinations4.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/priority/combinations4.json/default/QuickType.ex
@@ -533,6 +533,20 @@ defmodule Reimagine do
           waltzlike: nil | nil
         }
 
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding Reimagine.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding Reimagine.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding Reimagine.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding Reimagine.chirotherium"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding Reimagine.disdiapason"}
 
@@ -544,8 +558,8 @@ defmodule Reimagine do
       adducible: m["adducible"],
       anabolin: m["anabolin"],
       brainy: m["brainy"],
-      catharticalness: m["catharticalness"],
-      chirotherium: m["Chirotherium"],
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
       chrysamine: m["chrysamine"],
       disdiapason: m["disdiapason"] && decode_disdiapason(m["disdiapason"]),
       fluxweed: m["fluxweed"],
@@ -1273,6 +1287,20 @@ defmodule SaxtenClass do
           withdrawnness: nil | nil
         }
 
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding SaxtenClass.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding SaxtenClass.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding SaxtenClass.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding SaxtenClass.chirotherium"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding SaxtenClass.disdiapason"}
 
@@ -1283,9 +1311,9 @@ defmodule SaxtenClass do
     %SaxtenClass{
       algarrobilla: m["algarrobilla"],
       bowgrace: m["bowgrace"],
-      catharticalness: m["catharticalness"],
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
       centaurid: m["Centaurid"],
-      chirotherium: m["Chirotherium"],
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
       disdiapason: m["disdiapason"] && decode_disdiapason(m["disdiapason"]),
       flix: m["flix"],
       germanely: m["germanely"],
@@ -1803,39 +1831,173 @@ defmodule Staghunting do
           ungirlish: integer() | nil
         }
 
+  def decode_calorimetric(value) when is_integer(value), do: value
+  def decode_calorimetric(_), do: {:error, "Unexpected type when decoding Staghunting.calorimetric"}
+
+  def encode_calorimetric(value) when is_integer(value), do: value
+  def encode_calorimetric(_), do: {:error, "Unexpected type when encoding Staghunting.calorimetric"}
+
+  def decode_canid(value) when is_integer(value), do: value
+  def decode_canid(_), do: {:error, "Unexpected type when decoding Staghunting.canid"}
+
+  def encode_canid(value) when is_integer(value), do: value
+  def encode_canid(_), do: {:error, "Unexpected type when encoding Staghunting.canid"}
+
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding Staghunting.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding Staghunting.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding Staghunting.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding Staghunting.chirotherium"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding Staghunting.disdiapason"}
 
   def encode_disdiapason(value) when is_binary(value), do: value
   def encode_disdiapason(_), do: {:error, "Unexpected type when encoding Staghunting.disdiapason"}
 
+  def decode_ditriglyphic(value) when is_integer(value), do: value
+  def decode_ditriglyphic(_), do: {:error, "Unexpected type when decoding Staghunting.ditriglyphic"}
+
+  def encode_ditriglyphic(value) when is_integer(value), do: value
+  def encode_ditriglyphic(_), do: {:error, "Unexpected type when encoding Staghunting.ditriglyphic"}
+
+  def decode_floriferousness(value) when is_integer(value), do: value
+  def decode_floriferousness(_), do: {:error, "Unexpected type when decoding Staghunting.floriferousness"}
+
+  def encode_floriferousness(value) when is_integer(value), do: value
+  def encode_floriferousness(_), do: {:error, "Unexpected type when encoding Staghunting.floriferousness"}
+
+  def decode_gamelike(value) when is_integer(value), do: value
+  def decode_gamelike(_), do: {:error, "Unexpected type when decoding Staghunting.gamelike"}
+
+  def encode_gamelike(value) when is_integer(value), do: value
+  def encode_gamelike(_), do: {:error, "Unexpected type when encoding Staghunting.gamelike"}
+
+  def decode_grig(value) when is_integer(value), do: value
+  def decode_grig(_), do: {:error, "Unexpected type when decoding Staghunting.grig"}
+
+  def encode_grig(value) when is_integer(value), do: value
+  def encode_grig(_), do: {:error, "Unexpected type when encoding Staghunting.grig"}
+
+  def decode_interloan(value) when is_integer(value), do: value
+  def decode_interloan(_), do: {:error, "Unexpected type when decoding Staghunting.interloan"}
+
+  def encode_interloan(value) when is_integer(value), do: value
+  def encode_interloan(_), do: {:error, "Unexpected type when encoding Staghunting.interloan"}
+
+  def decode_lithotomy(value) when is_integer(value), do: value
+  def decode_lithotomy(_), do: {:error, "Unexpected type when decoding Staghunting.lithotomy"}
+
+  def encode_lithotomy(value) when is_integer(value), do: value
+  def encode_lithotomy(_), do: {:error, "Unexpected type when encoding Staghunting.lithotomy"}
+
+  def decode_loric(value) when is_integer(value), do: value
+  def decode_loric(_), do: {:error, "Unexpected type when decoding Staghunting.loric"}
+
+  def encode_loric(value) when is_integer(value), do: value
+  def encode_loric(_), do: {:error, "Unexpected type when encoding Staghunting.loric"}
+
+  def decode_membranocoriaceous(value) when is_integer(value), do: value
+  def decode_membranocoriaceous(_), do: {:error, "Unexpected type when decoding Staghunting.membranocoriaceous"}
+
+  def encode_membranocoriaceous(value) when is_integer(value), do: value
+  def encode_membranocoriaceous(_), do: {:error, "Unexpected type when encoding Staghunting.membranocoriaceous"}
+
+  def decode_membranogenic(value) when is_integer(value), do: value
+  def decode_membranogenic(_), do: {:error, "Unexpected type when decoding Staghunting.membranogenic"}
+
+  def encode_membranogenic(value) when is_integer(value), do: value
+  def encode_membranogenic(_), do: {:error, "Unexpected type when encoding Staghunting.membranogenic"}
+
+  def decode_overtrump(value) when is_integer(value), do: value
+  def decode_overtrump(_), do: {:error, "Unexpected type when decoding Staghunting.overtrump"}
+
+  def encode_overtrump(value) when is_integer(value), do: value
+  def encode_overtrump(_), do: {:error, "Unexpected type when encoding Staghunting.overtrump"}
+
+  def decode_scotino(value) when is_integer(value), do: value
+  def decode_scotino(_), do: {:error, "Unexpected type when decoding Staghunting.scotino"}
+
+  def encode_scotino(value) when is_integer(value), do: value
+  def encode_scotino(_), do: {:error, "Unexpected type when encoding Staghunting.scotino"}
+
+  def decode_seasonable(value) when is_integer(value), do: value
+  def decode_seasonable(_), do: {:error, "Unexpected type when decoding Staghunting.seasonable"}
+
+  def encode_seasonable(value) when is_integer(value), do: value
+  def encode_seasonable(_), do: {:error, "Unexpected type when encoding Staghunting.seasonable"}
+
+  def decode_sephen(value) when is_integer(value), do: value
+  def decode_sephen(_), do: {:error, "Unexpected type when decoding Staghunting.sephen"}
+
+  def encode_sephen(value) when is_integer(value), do: value
+  def encode_sephen(_), do: {:error, "Unexpected type when encoding Staghunting.sephen"}
+
+  def decode_stigmarioid(value) when is_integer(value), do: value
+  def decode_stigmarioid(_), do: {:error, "Unexpected type when decoding Staghunting.stigmarioid"}
+
+  def encode_stigmarioid(value) when is_integer(value), do: value
+  def encode_stigmarioid(_), do: {:error, "Unexpected type when encoding Staghunting.stigmarioid"}
+
+  def decode_tired(value) when is_integer(value), do: value
+  def decode_tired(_), do: {:error, "Unexpected type when decoding Staghunting.tired"}
+
+  def encode_tired(value) when is_integer(value), do: value
+  def encode_tired(_), do: {:error, "Unexpected type when encoding Staghunting.tired"}
+
+  def decode_trifid(value) when is_integer(value), do: value
+  def decode_trifid(_), do: {:error, "Unexpected type when decoding Staghunting.trifid"}
+
+  def encode_trifid(value) when is_integer(value), do: value
+  def encode_trifid(_), do: {:error, "Unexpected type when encoding Staghunting.trifid"}
+
+  def decode_undefeatedly(value) when is_integer(value), do: value
+  def decode_undefeatedly(_), do: {:error, "Unexpected type when decoding Staghunting.undefeatedly"}
+
+  def encode_undefeatedly(value) when is_integer(value), do: value
+  def encode_undefeatedly(_), do: {:error, "Unexpected type when encoding Staghunting.undefeatedly"}
+
+  def decode_ungirlish(value) when is_integer(value), do: value
+  def decode_ungirlish(_), do: {:error, "Unexpected type when decoding Staghunting.ungirlish"}
+
+  def encode_ungirlish(value) when is_integer(value), do: value
+  def encode_ungirlish(_), do: {:error, "Unexpected type when encoding Staghunting.ungirlish"}
+
   def from_map(m) do
     %Staghunting{
-      calorimetric: m["calorimetric"],
-      canid: m["canid"],
-      catharticalness: m["catharticalness"],
-      chirotherium: m["Chirotherium"],
+      calorimetric: m["calorimetric"] && decode_calorimetric(m["calorimetric"]),
+      canid: m["canid"] && decode_canid(m["canid"]),
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
       disdiapason: m["disdiapason"] && decode_disdiapason(m["disdiapason"]),
-      ditriglyphic: m["ditriglyphic"],
-      floriferousness: m["floriferousness"],
-      gamelike: m["gamelike"],
-      grig: m["grig"],
+      ditriglyphic: m["ditriglyphic"] && decode_ditriglyphic(m["ditriglyphic"]),
+      floriferousness: m["floriferousness"] && decode_floriferousness(m["floriferousness"]),
+      gamelike: m["gamelike"] && decode_gamelike(m["gamelike"]),
+      grig: m["grig"] && decode_grig(m["grig"]),
       homocerc: m["homocerc"],
-      interloan: m["interloan"],
-      lithotomy: m["lithotomy"],
-      loric: m["loric"],
-      membranocoriaceous: m["membranocoriaceous"],
-      membranogenic: m["membranogenic"],
+      interloan: m["interloan"] && decode_interloan(m["interloan"]),
+      lithotomy: m["lithotomy"] && decode_lithotomy(m["lithotomy"]),
+      loric: m["loric"] && decode_loric(m["loric"]),
+      membranocoriaceous: m["membranocoriaceous"] && decode_membranocoriaceous(m["membranocoriaceous"]),
+      membranogenic: m["membranogenic"] && decode_membranogenic(m["membranogenic"]),
       nonbookish: m["nonbookish"],
-      overtrump: m["overtrump"],
-      scotino: m["scotino"],
-      seasonable: m["seasonable"],
-      sephen: m["sephen"],
-      stigmarioid: m["stigmarioid"],
-      tired: m["tired"],
-      trifid: m["trifid"],
-      undefeatedly: m["undefeatedly"],
-      ungirlish: m["ungirlish"],
+      overtrump: m["overtrump"] && decode_overtrump(m["overtrump"]),
+      scotino: m["scotino"] && decode_scotino(m["scotino"]),
+      seasonable: m["seasonable"] && decode_seasonable(m["seasonable"]),
+      sephen: m["sephen"] && decode_sephen(m["sephen"]),
+      stigmarioid: m["stigmarioid"] && decode_stigmarioid(m["stigmarioid"]),
+      tired: m["tired"] && decode_tired(m["tired"]),
+      trifid: m["trifid"] && decode_trifid(m["trifid"]),
+      undefeatedly: m["undefeatedly"] && decode_undefeatedly(m["undefeatedly"]),
+      ungirlish: m["ungirlish"] && decode_ungirlish(m["ungirlish"]),
     }
   end
 
@@ -1913,39 +2075,173 @@ defmodule StrenuosityClass do
           yankeeist: integer() | nil
         }
 
+  def decode_bliss(value) when is_integer(value), do: value
+  def decode_bliss(_), do: {:error, "Unexpected type when decoding StrenuosityClass.bliss"}
+
+  def encode_bliss(value) when is_integer(value), do: value
+  def encode_bliss(_), do: {:error, "Unexpected type when encoding StrenuosityClass.bliss"}
+
+  def decode_buccate(value) when is_integer(value), do: value
+  def decode_buccate(_), do: {:error, "Unexpected type when decoding StrenuosityClass.buccate"}
+
+  def encode_buccate(value) when is_integer(value), do: value
+  def encode_buccate(_), do: {:error, "Unexpected type when encoding StrenuosityClass.buccate"}
+
+  def decode_bulletproof(value) when is_integer(value), do: value
+  def decode_bulletproof(_), do: {:error, "Unexpected type when decoding StrenuosityClass.bulletproof"}
+
+  def encode_bulletproof(value) when is_integer(value), do: value
+  def encode_bulletproof(_), do: {:error, "Unexpected type when encoding StrenuosityClass.bulletproof"}
+
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding StrenuosityClass.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding StrenuosityClass.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding StrenuosityClass.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding StrenuosityClass.chirotherium"}
+
+  def decode_crumblingness(value) when is_integer(value), do: value
+  def decode_crumblingness(_), do: {:error, "Unexpected type when decoding StrenuosityClass.crumblingness"}
+
+  def encode_crumblingness(value) when is_integer(value), do: value
+  def encode_crumblingness(_), do: {:error, "Unexpected type when encoding StrenuosityClass.crumblingness"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding StrenuosityClass.disdiapason"}
 
   def encode_disdiapason(value) when is_binary(value), do: value
   def encode_disdiapason(_), do: {:error, "Unexpected type when encoding StrenuosityClass.disdiapason"}
 
+  def decode_engagedly(value) when is_integer(value), do: value
+  def decode_engagedly(_), do: {:error, "Unexpected type when decoding StrenuosityClass.engagedly"}
+
+  def encode_engagedly(value) when is_integer(value), do: value
+  def encode_engagedly(_), do: {:error, "Unexpected type when encoding StrenuosityClass.engagedly"}
+
+  def decode_fightable(value) when is_integer(value), do: value
+  def decode_fightable(_), do: {:error, "Unexpected type when decoding StrenuosityClass.fightable"}
+
+  def encode_fightable(value) when is_integer(value), do: value
+  def encode_fightable(_), do: {:error, "Unexpected type when encoding StrenuosityClass.fightable"}
+
+  def decode_hoariness(value) when is_integer(value), do: value
+  def decode_hoariness(_), do: {:error, "Unexpected type when decoding StrenuosityClass.hoariness"}
+
+  def encode_hoariness(value) when is_integer(value), do: value
+  def encode_hoariness(_), do: {:error, "Unexpected type when encoding StrenuosityClass.hoariness"}
+
+  def decode_hypopodium(value) when is_integer(value), do: value
+  def decode_hypopodium(_), do: {:error, "Unexpected type when decoding StrenuosityClass.hypopodium"}
+
+  def encode_hypopodium(value) when is_integer(value), do: value
+  def encode_hypopodium(_), do: {:error, "Unexpected type when encoding StrenuosityClass.hypopodium"}
+
+  def decode_luxurist(value) when is_integer(value), do: value
+  def decode_luxurist(_), do: {:error, "Unexpected type when decoding StrenuosityClass.luxurist"}
+
+  def encode_luxurist(value) when is_integer(value), do: value
+  def encode_luxurist(_), do: {:error, "Unexpected type when encoding StrenuosityClass.luxurist"}
+
+  def decode_mechanician(value) when is_integer(value), do: value
+  def decode_mechanician(_), do: {:error, "Unexpected type when decoding StrenuosityClass.mechanician"}
+
+  def encode_mechanician(value) when is_integer(value), do: value
+  def encode_mechanician(_), do: {:error, "Unexpected type when encoding StrenuosityClass.mechanician"}
+
+  def decode_onopordon(value) when is_integer(value), do: value
+  def decode_onopordon(_), do: {:error, "Unexpected type when decoding StrenuosityClass.onopordon"}
+
+  def encode_onopordon(value) when is_integer(value), do: value
+  def encode_onopordon(_), do: {:error, "Unexpected type when encoding StrenuosityClass.onopordon"}
+
+  def decode_podgily(value) when is_integer(value), do: value
+  def decode_podgily(_), do: {:error, "Unexpected type when decoding StrenuosityClass.podgily"}
+
+  def encode_podgily(value) when is_integer(value), do: value
+  def encode_podgily(_), do: {:error, "Unexpected type when encoding StrenuosityClass.podgily"}
+
+  def decode_reformableness(value) when is_integer(value), do: value
+  def decode_reformableness(_), do: {:error, "Unexpected type when decoding StrenuosityClass.reformableness"}
+
+  def encode_reformableness(value) when is_integer(value), do: value
+  def encode_reformableness(_), do: {:error, "Unexpected type when encoding StrenuosityClass.reformableness"}
+
+  def decode_scatterbrains(value) when is_integer(value), do: value
+  def decode_scatterbrains(_), do: {:error, "Unexpected type when decoding StrenuosityClass.scatterbrains"}
+
+  def encode_scatterbrains(value) when is_integer(value), do: value
+  def encode_scatterbrains(_), do: {:error, "Unexpected type when encoding StrenuosityClass.scatterbrains"}
+
+  def decode_seminuria(value) when is_integer(value), do: value
+  def decode_seminuria(_), do: {:error, "Unexpected type when decoding StrenuosityClass.seminuria"}
+
+  def encode_seminuria(value) when is_integer(value), do: value
+  def encode_seminuria(_), do: {:error, "Unexpected type when encoding StrenuosityClass.seminuria"}
+
+  def decode_sodomite(value) when is_integer(value), do: value
+  def decode_sodomite(_), do: {:error, "Unexpected type when decoding StrenuosityClass.sodomite"}
+
+  def encode_sodomite(value) when is_integer(value), do: value
+  def encode_sodomite(_), do: {:error, "Unexpected type when encoding StrenuosityClass.sodomite"}
+
+  def decode_tramp(value) when is_integer(value), do: value
+  def decode_tramp(_), do: {:error, "Unexpected type when decoding StrenuosityClass.tramp"}
+
+  def encode_tramp(value) when is_integer(value), do: value
+  def encode_tramp(_), do: {:error, "Unexpected type when encoding StrenuosityClass.tramp"}
+
+  def decode_undueness(value) when is_integer(value), do: value
+  def decode_undueness(_), do: {:error, "Unexpected type when decoding StrenuosityClass.undueness"}
+
+  def encode_undueness(value) when is_integer(value), do: value
+  def encode_undueness(_), do: {:error, "Unexpected type when encoding StrenuosityClass.undueness"}
+
+  def decode_worthily(value) when is_integer(value), do: value
+  def decode_worthily(_), do: {:error, "Unexpected type when decoding StrenuosityClass.worthily"}
+
+  def encode_worthily(value) when is_integer(value), do: value
+  def encode_worthily(_), do: {:error, "Unexpected type when encoding StrenuosityClass.worthily"}
+
+  def decode_yankeeist(value) when is_integer(value), do: value
+  def decode_yankeeist(_), do: {:error, "Unexpected type when decoding StrenuosityClass.yankeeist"}
+
+  def encode_yankeeist(value) when is_integer(value), do: value
+  def encode_yankeeist(_), do: {:error, "Unexpected type when encoding StrenuosityClass.yankeeist"}
+
   def from_map(m) do
     %StrenuosityClass{
-      bliss: m["bliss"],
-      buccate: m["buccate"],
-      bulletproof: m["bulletproof"],
-      catharticalness: m["catharticalness"],
-      chirotherium: m["Chirotherium"],
-      crumblingness: m["crumblingness"],
+      bliss: m["bliss"] && decode_bliss(m["bliss"]),
+      buccate: m["buccate"] && decode_buccate(m["buccate"]),
+      bulletproof: m["bulletproof"] && decode_bulletproof(m["bulletproof"]),
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
+      crumblingness: m["crumblingness"] && decode_crumblingness(m["crumblingness"]),
       disdiapason: m["disdiapason"] && decode_disdiapason(m["disdiapason"]),
-      engagedly: m["engagedly"],
-      fightable: m["fightable"],
-      hoariness: m["hoariness"],
+      engagedly: m["engagedly"] && decode_engagedly(m["engagedly"]),
+      fightable: m["fightable"] && decode_fightable(m["fightable"]),
+      hoariness: m["hoariness"] && decode_hoariness(m["hoariness"]),
       homocerc: m["homocerc"],
-      hypopodium: m["hypopodium"],
-      luxurist: m["luxurist"],
-      mechanician: m["mechanician"],
+      hypopodium: m["hypopodium"] && decode_hypopodium(m["hypopodium"]),
+      luxurist: m["luxurist"] && decode_luxurist(m["luxurist"]),
+      mechanician: m["mechanician"] && decode_mechanician(m["mechanician"]),
       nonbookish: m["nonbookish"],
-      onopordon: m["Onopordon"],
-      podgily: m["podgily"],
-      reformableness: m["reformableness"],
-      scatterbrains: m["scatterbrains"],
-      seminuria: m["seminuria"],
-      sodomite: m["Sodomite"],
-      tramp: m["tramp"],
-      undueness: m["undueness"],
-      worthily: m["worthily"],
-      yankeeist: m["Yankeeist"],
+      onopordon: m["Onopordon"] && decode_onopordon(m["Onopordon"]),
+      podgily: m["podgily"] && decode_podgily(m["podgily"]),
+      reformableness: m["reformableness"] && decode_reformableness(m["reformableness"]),
+      scatterbrains: m["scatterbrains"] && decode_scatterbrains(m["scatterbrains"]),
+      seminuria: m["seminuria"] && decode_seminuria(m["seminuria"]),
+      sodomite: m["Sodomite"] && decode_sodomite(m["Sodomite"]),
+      tramp: m["tramp"] && decode_tramp(m["tramp"]),
+      undueness: m["undueness"] && decode_undueness(m["undueness"]),
+      worthily: m["worthily"] && decode_worthily(m["worthily"]),
+      yankeeist: m["Yankeeist"] && decode_yankeeist(m["Yankeeist"]),
     }
   end
 
@@ -2023,6 +2319,20 @@ defmodule TruantcyClass do
           yuman: nil | nil
         }
 
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding TruantcyClass.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding TruantcyClass.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding TruantcyClass.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding TruantcyClass.chirotherium"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding TruantcyClass.disdiapason"}
 
@@ -2034,9 +2344,9 @@ defmodule TruantcyClass do
       alfiona: m["alfiona"],
       ascaridiasis: m["ascaridiasis"],
       bungey: m["bungey"],
-      catharticalness: m["catharticalness"],
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
       ceroxyle: m["ceroxyle"],
-      chirotherium: m["Chirotherium"],
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
       chorology: m["chorology"],
       disdiapason: m["disdiapason"] && decode_disdiapason(m["disdiapason"]),
       enmarble: m["enmarble"],
@@ -2133,39 +2443,173 @@ defmodule UnimpeachablyClass do
           unsuggestedness: integer() | nil
         }
 
+  def decode_acerin(value) when is_integer(value), do: value
+  def decode_acerin(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.acerin"}
+
+  def encode_acerin(value) when is_integer(value), do: value
+  def encode_acerin(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.acerin"}
+
+  def decode_bobadil(value) when is_integer(value), do: value
+  def decode_bobadil(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.bobadil"}
+
+  def encode_bobadil(value) when is_integer(value), do: value
+  def encode_bobadil(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.bobadil"}
+
+  def decode_catharticalness(value) when is_float(value), do: value
+  def decode_catharticalness(value) when is_integer(value), do: value
+  def decode_catharticalness(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.catharticalness"}
+
+  def encode_catharticalness(value) when is_float(value), do: value
+  def encode_catharticalness(value) when is_integer(value), do: value
+  def encode_catharticalness(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.catharticalness"}
+
+  def decode_chirotherium(value) when is_integer(value), do: value
+  def decode_chirotherium(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.chirotherium"}
+
+  def encode_chirotherium(value) when is_integer(value), do: value
+  def encode_chirotherium(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.chirotherium"}
+
+  def decode_chlorophylligenous(value) when is_integer(value), do: value
+  def decode_chlorophylligenous(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.chlorophylligenous"}
+
+  def encode_chlorophylligenous(value) when is_integer(value), do: value
+  def encode_chlorophylligenous(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.chlorophylligenous"}
+
+  def decode_conversational(value) when is_integer(value), do: value
+  def decode_conversational(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.conversational"}
+
+  def encode_conversational(value) when is_integer(value), do: value
+  def encode_conversational(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.conversational"}
+
+  def decode_demiowl(value) when is_integer(value), do: value
+  def decode_demiowl(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.demiowl"}
+
+  def encode_demiowl(value) when is_integer(value), do: value
+  def encode_demiowl(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.demiowl"}
+
   def decode_disdiapason(value) when is_binary(value), do: value
   def decode_disdiapason(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.disdiapason"}
 
   def encode_disdiapason(value) when is_binary(value), do: value
   def encode_disdiapason(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.disdiapason"}
 
+  def decode_ectorhinal(value) when is_integer(value), do: value
+  def decode_ectorhinal(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.ectorhinal"}
+
+  def encode_ectorhinal(value) when is_integer(value), do: value
+  def encode_ectorhinal(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.ectorhinal"}
+
+  def decode_gamblesomeness(value) when is_integer(value), do: value
+  def decode_gamblesomeness(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.gamblesomeness"}
+
+  def encode_gamblesomeness(value) when is_integer(value), do: value
+  def encode_gamblesomeness(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.gamblesomeness"}
+
+  def decode_irrorate(value) when is_integer(value), do: value
+  def decode_irrorate(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.irrorate"}
+
+  def encode_irrorate(value) when is_integer(value), do: value
+  def encode_irrorate(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.irrorate"}
+
+  def decode_kindergartening(value) when is_integer(value), do: value
+  def decode_kindergartening(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.kindergartening"}
+
+  def encode_kindergartening(value) when is_integer(value), do: value
+  def encode_kindergartening(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.kindergartening"}
+
+  def decode_lateritic(value) when is_integer(value), do: value
+  def decode_lateritic(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.lateritic"}
+
+  def encode_lateritic(value) when is_integer(value), do: value
+  def encode_lateritic(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.lateritic"}
+
+  def decode_mespil(value) when is_integer(value), do: value
+  def decode_mespil(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.mespil"}
+
+  def encode_mespil(value) when is_integer(value), do: value
+  def encode_mespil(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.mespil"}
+
+  def decode_misconfiguration(value) when is_integer(value), do: value
+  def decode_misconfiguration(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.misconfiguration"}
+
+  def encode_misconfiguration(value) when is_integer(value), do: value
+  def encode_misconfiguration(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.misconfiguration"}
+
+  def decode_planometry(value) when is_integer(value), do: value
+  def decode_planometry(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.planometry"}
+
+  def encode_planometry(value) when is_integer(value), do: value
+  def encode_planometry(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.planometry"}
+
+  def decode_quiina(value) when is_integer(value), do: value
+  def decode_quiina(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.quiina"}
+
+  def encode_quiina(value) when is_integer(value), do: value
+  def encode_quiina(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.quiina"}
+
+  def decode_robert(value) when is_integer(value), do: value
+  def decode_robert(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.robert"}
+
+  def encode_robert(value) when is_integer(value), do: value
+  def encode_robert(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.robert"}
+
+  def decode_rot(value) when is_integer(value), do: value
+  def decode_rot(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.rot"}
+
+  def encode_rot(value) when is_integer(value), do: value
+  def encode_rot(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.rot"}
+
+  def decode_subcinctorium(value) when is_integer(value), do: value
+  def decode_subcinctorium(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.subcinctorium"}
+
+  def encode_subcinctorium(value) when is_integer(value), do: value
+  def encode_subcinctorium(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.subcinctorium"}
+
+  def decode_tussocker(value) when is_integer(value), do: value
+  def decode_tussocker(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.tussocker"}
+
+  def encode_tussocker(value) when is_integer(value), do: value
+  def encode_tussocker(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.tussocker"}
+
+  def decode_ultraproud(value) when is_integer(value), do: value
+  def decode_ultraproud(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.ultraproud"}
+
+  def encode_ultraproud(value) when is_integer(value), do: value
+  def encode_ultraproud(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.ultraproud"}
+
+  def decode_unsuggestedness(value) when is_integer(value), do: value
+  def decode_unsuggestedness(_), do: {:error, "Unexpected type when decoding UnimpeachablyClass.unsuggestedness"}
+
+  def encode_unsuggestedness(value) when is_integer(value), do: value
+  def encode_unsuggestedness(_), do: {:error, "Unexpected type when encoding UnimpeachablyClass.unsuggestedness"}
+
   def from_map(m) do
     %UnimpeachablyClass{
-      acerin: m["acerin"],
-      bobadil: m["Bobadil"],
-      catharticalness: m["catharticalness"],
-      chirotherium: m["Chirotherium"],
-      chlorophylligenous: m["chlorophylligenous"],
-      conversational: m["conversational"],
-      demiowl: m["demiowl"],
+      acerin: m["acerin"] && decode_acerin(m["acerin"]),
+      bobadil: m["Bobadil"] && decode_bobadil(m["Bobadil"]),
+      catharticalness: m["catharticalness"] && decode_catharticalness(m["catharticalness"]),
+      chirotherium: m["Chirotherium"] && decode_chirotherium(m["Chirotherium"]),
+      chlorophylligenous: m["chlorophylligenous"] && decode_chlorophylligenous(m["chlorophylligenous"]),
+      conversational: m["conversational"] && decode_conversational(m["conversational"]),
+      demiowl: m["demiowl"] && decode_demiowl(m["demiowl"]),
       disdiapason: m["disdiapason"] && decode_disdiapason(m["disdiapason"]),
-      ectorhinal: m["ectorhinal"],
-      gamblesomeness: m["gamblesomeness"],
+      ectorhinal: m["ectorhinal"] && decode_ectorhinal(m["ectorhinal"]),
+      gamblesomeness: m["gamblesomeness"] && decode_gamblesomeness(m["gamblesomeness"]),
       homocerc: m["homocerc"],
-      irrorate: m["irrorate"],
-      kindergartening: m["kindergartening"],
-      lateritic: m["lateritic"],
-      mespil: m["mespil"],
-      misconfiguration: m["misconfiguration"],
+      irrorate: m["irrorate"] && decode_irrorate(m["irrorate"]),
+      kindergartening: m["kindergartening"] && decode_kindergartening(m["kindergartening"]),
+      lateritic: m["lateritic"] && decode_lateritic(m["lateritic"]),
+      mespil: m["mespil"] && decode_mespil(m["mespil"]),
+      misconfiguration: m["misconfiguration"] && decode_misconfiguration(m["misconfiguration"]),
       nonbookish: m["nonbookish"],
-      planometry: m["planometry"],
-      quiina: m["Quiina"],
-      robert: m["Robert"],
-      rot: m["rot"],
-      subcinctorium: m["subcinctorium"],
-      tussocker: m["tussocker"],
-      ultraproud: m["ultraproud"],
-      unsuggestedness: m["unsuggestedness"],
+      planometry: m["planometry"] && decode_planometry(m["planometry"]),
+      quiina: m["Quiina"] && decode_quiina(m["Quiina"]),
+      robert: m["Robert"] && decode_robert(m["Robert"]),
+      rot: m["rot"] && decode_rot(m["rot"]),
+      subcinctorium: m["subcinctorium"] && decode_subcinctorium(m["subcinctorium"]),
+      tussocker: m["tussocker"] && decode_tussocker(m["tussocker"]),
+      ultraproud: m["ultraproud"] && decode_ultraproud(m["ultraproud"]),
+      unsuggestedness: m["unsuggestedness"] && decode_unsuggestedness(m["unsuggestedness"]),
     }
   end
 
diff --git a/base/elixir/test/inputs/json/priority/keywords.json/default/QuickType.ex b/head/elixir/test/inputs/json/priority/keywords.json/default/QuickType.ex
index d651b3f..1947dee 100644
--- a/base/elixir/test/inputs/json/priority/keywords.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/priority/keywords.json/default/QuickType.ex
@@ -9092,6 +9092,45 @@ defmodule Right do
   end
 end
 
+defmodule S do
+  @enforce_keys [:s]
+  defstruct [:s]
+
+  @type t :: %__MODULE__{
+          s: integer()
+        }
+
+  def decode_s(value) when is_integer(value), do: value
+  def decode_s(_), do: {:error, "Unexpected type when decoding S.s"}
+
+  def encode_s(value) when is_integer(value), do: value
+  def encode_s(_), do: {:error, "Unexpected type when encoding S.s"}
+
+  def from_map(m) do
+    %S{
+      s: decode_s(m["s"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "s" => struct.s,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
+
 defmodule Sbyte do
   @enforce_keys [:sbyte]
   defstruct [:sbyte]
@@ -10809,8 +10848,8 @@ defmodule Undefined do
 end
 
 defmodule Obj4 do
-  @enforce_keys [:dummy, :obj4_self, :obj4_true, :obj4_type, :public, :quicktype, :raise, :range, :readonly, :ref, :register, :reinterpret_cast, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :sbyte, :sealed, :sel, :select, :self, :serialize, :set, :short, :signed, :sizeof, :stackalloc, :static, :static_assert, :static_cast, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :then, :this, :thread_local, :throw, :throws, :to_json, :top_level, :transient, :true_1, :try, :type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined]
-  defstruct [:dummy, :obj4_self, :obj4_true, :obj4_type, :public, :quicktype, :raise, :range, :readonly, :ref, :register, :reinterpret_cast, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :sbyte, :sealed, :sel, :select, :self, :serialize, :set, :short, :signed, :sizeof, :stackalloc, :static, :static_assert, :static_cast, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :then, :this, :thread_local, :throw, :throws, :to_json, :top_level, :transient, :true_1, :try, :type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined]
+  @enforce_keys [:dummy, :obj4_self, :obj4_true, :obj4_type, :public, :quicktype, :raise, :range, :readonly, :ref, :register, :reinterpret_cast, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :s, :sbyte, :sealed, :sel, :select, :self, :serialize, :set, :short, :signed, :sizeof, :stackalloc, :static, :static_assert, :static_cast, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :then, :this, :thread_local, :throw, :throws, :to_json, :top_level, :transient, :true_1, :try, :type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined]
+  defstruct [:dummy, :obj4_self, :obj4_true, :obj4_type, :public, :quicktype, :raise, :range, :readonly, :ref, :register, :reinterpret_cast, :repeat, :require, :required, :requires, :restrict, :retain, :rethrows, :return, :right, :s, :sbyte, :sealed, :sel, :select, :self, :serialize, :set, :short, :signed, :sizeof, :stackalloc, :static, :static_assert, :static_cast, :strictfp, :string, :struct, :subscript, :super, :switch, :symbol, :synchronized, :system, :template, :then, :this, :thread_local, :throw, :throws, :to_json, :top_level, :transient, :true_1, :try, :type, :typealias, :typedef, :typeid, :typename, :typeof, :uint, :ulong, :unchecked, :undefined]
 
   @type t :: %__MODULE__{
           dummy: integer(),
@@ -10834,6 +10873,7 @@ defmodule Obj4 do
           rethrows: Rethrows.t(),
           return: Return.t(),
           right: Right.t(),
+          s: S.t(),
           sbyte: Sbyte.t(),
           sealed: Sealed.t(),
           sel: Sel.t(),
@@ -10909,6 +10949,7 @@ defmodule Obj4 do
       rethrows: Rethrows.from_map(m["rethrows"]),
       return: Return.from_map(m["return"]),
       right: Right.from_map(m["right"]),
+      s: S.from_map(m["s"]),
       sbyte: Sbyte.from_map(m["sbyte"]),
       sealed: Sealed.from_map(m["sealed"]),
       sel: Sel.from_map(m["SEL"]),
@@ -10985,6 +11026,7 @@ defmodule Obj4 do
       "rethrows" => Rethrows.to_map(struct.rethrows),
       "return" => Return.to_map(struct.return),
       "right" => Right.to_map(struct.right),
+      "s" => S.to_map(struct.s),
       "sbyte" => Sbyte.to_map(struct.sbyte),
       "sealed" => Sealed.to_map(struct.sealed),
       "SEL" => Sel.to_map(struct.sel),
diff --git a/base/elixir/test/inputs/json/priority/nbl-stats.json/default/QuickType.ex b/head/elixir/test/inputs/json/priority/nbl-stats.json/default/QuickType.ex
index b9b9eb4..9f670d9 100644
--- a/base/elixir/test/inputs/json/priority/nbl-stats.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/priority/nbl-stats.json/default/QuickType.ex
@@ -816,6 +816,12 @@ defmodule Scorer do
   def encode_name(value) when is_binary(value), do: value
   def encode_name(_), do: {:error, "Unexpected type when encoding Scorer.name"}
 
+  def decode_per(value) when is_integer(value), do: value
+  def decode_per(_), do: {:error, "Unexpected type when decoding Scorer.per"}
+
+  def encode_per(value) when is_integer(value), do: value
+  def encode_per(_), do: {:error, "Unexpected type when encoding Scorer.per"}
+
   def decode_player(value) when is_binary(value), do: value
   def decode_player(_), do: {:error, "Unexpected type when decoding Scorer.player"}
 
@@ -846,6 +852,12 @@ defmodule Scorer do
   def encode_tno(value) when is_integer(value), do: value
   def encode_tno(_), do: {:error, "Unexpected type when encoding Scorer.tno"}
 
+  def decode_tot(value) when is_integer(value), do: value
+  def decode_tot(_), do: {:error, "Unexpected type when decoding Scorer.tot"}
+
+  def encode_tot(value) when is_integer(value), do: value
+  def encode_tot(_), do: {:error, "Unexpected type when encoding Scorer.tot"}
+
   def from_map(m) do
     %Scorer{
       family_name: m["familyName"] && decode_family_name(m["familyName"]),
@@ -858,7 +870,7 @@ defmodule Scorer do
       international_first_name: m["internationalFirstName"] && decode_international_first_name(m["internationalFirstName"]),
       international_first_name_initial: m["internationalFirstNameInitial"] && FirstNameInitial.decode(m["internationalFirstNameInitial"]),
       name: m["name"] && decode_name(m["name"]),
-      per: m["per"],
+      per: m["per"] && decode_per(m["per"]),
       per_type: m["perType"] && PerType.decode(m["perType"]),
       player: m["player"] && decode_player(m["player"]),
       pno: decode_pno(m["pno"]),
@@ -867,7 +879,7 @@ defmodule Scorer do
       summary: m["summary"] && decode_summary(m["summary"]),
       times: m["times"] && Enum.map(m["times"], &TimeElement.from_map/1),
       tno: decode_tno(m["tno"]),
-      tot: m["tot"],
+      tot: m["tot"] && decode_tot(m["tot"]),
     }
   end
 
@@ -1130,6 +1142,12 @@ defmodule Pl do
   def encode_active(value) when is_integer(value), do: value
   def encode_active(_), do: {:error, "Unexpected type when encoding Pl.active"}
 
+  def decode_captain(value) when is_integer(value), do: value
+  def decode_captain(_), do: {:error, "Unexpected type when decoding Pl.captain"}
+
+  def encode_captain(value) when is_integer(value), do: value
+  def encode_captain(_), do: {:error, "Unexpected type when encoding Pl.captain"}
+
   def decode_eff_1(value) when is_integer(value), do: value
   def decode_eff_1(_), do: {:error, "Unexpected type when decoding Pl.eff_1"}
 
@@ -1389,7 +1407,7 @@ defmodule Pl do
   def from_map(m) do
     %Pl{
       active: decode_active(m["active"]),
-      captain: m["captain"],
+      captain: m["captain"] && decode_captain(m["captain"]),
       comp: m["comp"] && Comp.from_map(m["comp"]),
       eff_1: decode_eff_1(m["eff_1"]),
       eff_2: decode_eff_2(m["eff_2"]),
diff --git a/head/elixir/test/inputs/json/samples/copy-with-property.json/default/QuickType.ex b/head/elixir/test/inputs/json/samples/copy-with-property.json/default/QuickType.ex
new file mode 100644
index 0000000..85b8c8d
--- /dev/null
+++ b/head/elixir/test/inputs/json/samples/copy-with-property.json/default/QuickType.ex
@@ -0,0 +1,54 @@
+# This file was autogenerated using quicktype https://github.com/quicktype/quicktype
+#
+# Add Jason to your mix.exs
+#
+# Decode a JSON string: TopLevel.from_json(data)
+# Encode into a JSON string: TopLevel.to_json(struct)
+
+defmodule TopLevel do
+  @enforce_keys [:copy_with, :name]
+  defstruct [:copy_with, :name]
+
+  @type t :: %__MODULE__{
+          copy_with: integer(),
+          name: String.t()
+        }
+
+  def decode_copy_with(value) when is_integer(value), do: value
+  def decode_copy_with(_), do: {:error, "Unexpected type when decoding TopLevel.copy_with"}
+
+  def encode_copy_with(value) when is_integer(value), do: value
+  def encode_copy_with(_), do: {:error, "Unexpected type when encoding TopLevel.copy_with"}
+
+  def decode_name(value) when is_binary(value), do: value
+  def decode_name(_), do: {:error, "Unexpected type when decoding TopLevel.name"}
+
+  def encode_name(value) when is_binary(value), do: value
+  def encode_name(_), do: {:error, "Unexpected type when encoding TopLevel.name"}
+
+  def from_map(m) do
+    %TopLevel{
+      copy_with: decode_copy_with(m["copyWith"]),
+      name: decode_name(m["name"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "copyWith" => struct.copy_with,
+      "name" => struct.name,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
diff --git a/base/elixir/test/inputs/json/samples/github-events.json/default/QuickType.ex b/head/elixir/test/inputs/json/samples/github-events.json/default/QuickType.ex
index de5128c..cb036e5 100644
--- a/base/elixir/test/inputs/json/samples/github-events.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/samples/github-events.json/default/QuickType.ex
@@ -2233,6 +2233,12 @@ defmodule Payload do
   def encode_description(value) when is_binary(value), do: value
   def encode_description(_), do: {:error, "Unexpected type when encoding Payload.description"}
 
+  def decode_distinct_size(value) when is_integer(value), do: value
+  def decode_distinct_size(_), do: {:error, "Unexpected type when decoding Payload.distinct_size"}
+
+  def encode_distinct_size(value) when is_integer(value), do: value
+  def encode_distinct_size(_), do: {:error, "Unexpected type when encoding Payload.distinct_size"}
+
   def decode_head(value) when is_binary(value), do: value
   def decode_head(_), do: {:error, "Unexpected type when decoding Payload.head"}
 
@@ -2245,6 +2251,18 @@ defmodule Payload do
   def encode_master_branch(value) when is_binary(value), do: value
   def encode_master_branch(_), do: {:error, "Unexpected type when encoding Payload.master_branch"}
 
+  def decode_number(value) when is_integer(value), do: value
+  def decode_number(_), do: {:error, "Unexpected type when decoding Payload.number"}
+
+  def encode_number(value) when is_integer(value), do: value
+  def encode_number(_), do: {:error, "Unexpected type when encoding Payload.number"}
+
+  def decode_push_id(value) when is_integer(value), do: value
+  def decode_push_id(_), do: {:error, "Unexpected type when decoding Payload.push_id"}
+
+  def encode_push_id(value) when is_integer(value), do: value
+  def encode_push_id(_), do: {:error, "Unexpected type when encoding Payload.push_id"}
+
   def decode_pusher_type(value) when is_binary(value), do: value
   def decode_pusher_type(_), do: {:error, "Unexpected type when decoding Payload.pusher_type"}
 
@@ -2263,6 +2281,12 @@ defmodule Payload do
   def encode_ref_type(value) when is_binary(value), do: value
   def encode_ref_type(_), do: {:error, "Unexpected type when encoding Payload.ref_type"}
 
+  def decode_size(value) when is_integer(value), do: value
+  def decode_size(_), do: {:error, "Unexpected type when decoding Payload.size"}
+
+  def encode_size(value) when is_integer(value), do: value
+  def encode_size(_), do: {:error, "Unexpected type when encoding Payload.size"}
+
   def from_map(m) do
     %Payload{
       action: m["action"] && decode_action(m["action"]),
@@ -2270,17 +2294,17 @@ defmodule Payload do
       comment: m["comment"] && Comment.from_map(m["comment"]),
       commits: m["commits"] && Enum.map(m["commits"], &Commit.from_map/1),
       description: m["description"] && decode_description(m["description"]),
-      distinct_size: m["distinct_size"],
+      distinct_size: m["distinct_size"] && decode_distinct_size(m["distinct_size"]),
       head: m["head"] && decode_head(m["head"]),
       issue: m["issue"] && Issue.from_map(m["issue"]),
       master_branch: m["master_branch"] && decode_master_branch(m["master_branch"]),
-      number: m["number"],
+      number: m["number"] && decode_number(m["number"]),
       pull_request: m["pull_request"] && PayloadPullRequest.from_map(m["pull_request"]),
-      push_id: m["push_id"],
+      push_id: m["push_id"] && decode_push_id(m["push_id"]),
       pusher_type: m["pusher_type"] && decode_pusher_type(m["pusher_type"]),
       ref: m["ref"] && decode_ref(m["ref"]),
       ref_type: m["ref_type"] && decode_ref_type(m["ref_type"]),
-      size: m["size"],
+      size: m["size"] && decode_size(m["size"]),
     }
   end
 
diff --git a/head/elixir/test/inputs/json/samples/objc-control-characters.json/default/QuickType.ex b/head/elixir/test/inputs/json/samples/objc-control-characters.json/default/QuickType.ex
new file mode 100644
index 0000000..ee365c6
--- /dev/null
+++ b/head/elixir/test/inputs/json/samples/objc-control-characters.json/default/QuickType.ex
@@ -0,0 +1,100 @@
+# This file was autogenerated using quicktype https://github.com/quicktype/quicktype
+#
+# Add Jason to your mix.exs
+#
+# Decode a JSON string: TopLevel.from_json(data)
+# Encode into a JSON string: TopLevel.to_json(struct)
+
+defmodule Value do
+  @valid_enum_members [
+    :"c0",
+    :"c1",
+  ]
+
+  def valid_atom?(value), do: value in @valid_enum_members
+
+  def valid_atom_string?(value) do
+    try do
+        atom = String.to_existing_atom(value)
+        atom in @valid_enum_members
+    rescue
+        ArgumentError -> false
+    end
+  end
+
+  def encode(value) do
+    if valid_atom?(value) do
+        Atom.to_string(value)
+    else
+        {:error, "Unexpected value when encoding atom: #{inspect(value)}"}
+    end
+  end
+
+  def decode(value) do
+    if valid_atom_string?(value) do
+        String.to_existing_atom(value)
+    else
+        {:error, "Unexpected value when decoding atom: #{inspect(value)}"}
+    end
+  end
+
+  def from_json(json) do
+    json
+    |> Jason.decode!()
+    |> decode()
+  end
+
+  def to_json(data) do
+    data
+    |> encode()
+    |> Jason.encode!()
+  end
+end
+
+defmodule TopLevel do
+  @enforce_keys [:literal, :values]
+  defstruct [:literal, :values]
+
+  @type t :: %__MODULE__{
+          literal: String.t(),
+          values: [Value.t()]
+        }
+
+  def decode_literal(value) when is_binary(value), do: value
+  def decode_literal(_), do: {:error, "Unexpected type when decoding TopLevel.literal"}
+
+  def encode_literal(value) when is_binary(value), do: value
+  def encode_literal(_), do: {:error, "Unexpected type when encoding TopLevel.literal"}
+
+  def decode_values(value) when is_list(value), do: value
+  def decode_values(_), do: {:error, "Unexpected type when decoding TopLevel.values"}
+
+  def encode_values(value) when is_list(value), do: value
+  def encode_values(_), do: {:error, "Unexpected type when encoding TopLevel.values"}
+
+  def from_map(m) do
+    %TopLevel{
+      literal: decode_literal(m["literal"]),
+      values: Enum.map(m["values"], &Value.decode/1),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "literal" => struct.literal,
+      "values" => struct.values && Enum.map(struct.values, &Value.encode/1),
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
diff --git a/base/elixir/test/inputs/json/samples/pokedex.json/default/QuickType.ex b/head/elixir/test/inputs/json/samples/pokedex.json/default/QuickType.ex
index d78f11b..dd159fb 100644
--- a/base/elixir/test/inputs/json/samples/pokedex.json/default/QuickType.ex
+++ b/head/elixir/test/inputs/json/samples/pokedex.json/default/QuickType.ex
@@ -202,6 +202,12 @@ defmodule Pokemon do
   def encode_candy(value) when is_binary(value), do: value
   def encode_candy(_), do: {:error, "Unexpected type when encoding Pokemon.candy"}
 
+  def decode_candy_count(value) when is_integer(value), do: value
+  def decode_candy_count(_), do: {:error, "Unexpected type when decoding Pokemon.candy_count"}
+
+  def encode_candy_count(value) when is_integer(value), do: value
+  def encode_candy_count(_), do: {:error, "Unexpected type when encoding Pokemon.candy_count"}
+
   def decode_height(value) when is_binary(value), do: value
   def decode_height(_), do: {:error, "Unexpected type when decoding Pokemon.height"}
 
@@ -276,7 +282,7 @@ defmodule Pokemon do
     %Pokemon{
       avg_spawns: decode_avg_spawns(m["avg_spawns"]),
       candy: decode_candy(m["candy"]),
-      candy_count: m["candy_count"],
+      candy_count: m["candy_count"] && decode_candy_count(m["candy_count"]),
       egg: Egg.decode(m["egg"]),
       height: decode_height(m["height"]),
       id: decode_id(m["id"]),
diff --git a/base/elm/test/inputs/json/priority/keywords.json/default/QuickType.elm b/head/elm/test/inputs/json/priority/keywords.json/default/QuickType.elm
index 77707ee..7df6f5d 100644
--- a/base/elm/test/inputs/json/priority/keywords.json/default/QuickType.elm
+++ b/head/elm/test/inputs/json/priority/keywords.json/default/QuickType.elm
@@ -237,6 +237,7 @@ module QuickType exposing
     , Rethrows
     , Return
     , Right
+    , S
     , Sbyte
     , Sealed
     , Sel
@@ -1327,6 +1328,7 @@ type alias Obj4 =
     , rethrows : Rethrows
     , return : Return
     , right : Right
+    , s : S
     , sbyte : Sbyte
     , sealed : Sealed
     , sel : Sel
@@ -1462,6 +1464,10 @@ type alias Right =
     { right : Int
     }
 
+type alias S =
+    { s : Int
+    }
+
 type alias Sbyte =
     { sbyte : Int
     }
@@ -4357,6 +4363,7 @@ obj4 =
         |> Jpipe.required "rethrows" rethrows
         |> Jpipe.required "return" return
         |> Jpipe.required "right" right
+        |> Jpipe.required "s" s
         |> Jpipe.required "sbyte" sbyte
         |> Jpipe.required "sealed" sealed
         |> Jpipe.required "SEL" sel
@@ -4426,6 +4433,7 @@ encodeObj4 x =
         , ("rethrows", encodeRethrows x.rethrows)
         , ("return", encodeReturn x.return)
         , ("right", encodeRight x.right)
+        , ("s", encodeS x.s)
         , ("sbyte", encodeSbyte x.sbyte)
         , ("sealed", encodeSealed x.sealed)
         , ("SEL", encodeSel x.sel)
@@ -4722,6 +4730,17 @@ encodeRight x =
         [ ("right", Jenc.int x.right)
         ]
 
+s : Jdec.Decoder S
+s =
+    Jdec.succeed S
+        |> Jpipe.required "s" Jdec.int
+
+encodeS : S -> Jenc.Value
+encodeS x =
+    Jenc.object
+        [ ("s", Jenc.int x.s)
+        ]
+
 sbyte : Jdec.Decoder Sbyte
 sbyte =
     Jdec.succeed Sbyte
diff --git a/head/elm/test/inputs/json/samples/copy-with-property.json/default/QuickType.elm b/head/elm/test/inputs/json/samples/copy-with-property.json/default/QuickType.elm
new file mode 100644
index 0000000..aca5795
--- /dev/null
+++ b/head/elm/test/inputs/json/samples/copy-with-property.json/default/QuickType.elm
@@ -0,0 +1,60 @@
+-- To decode the JSON data, add this file to your project, run
+--
+--     elm install NoRedInk/elm-json-decode-pipeline
+--
+-- add these imports
+--
+--     import Json.Decode exposing (decodeString)
+--     import QuickType exposing (quickType)
+--
+-- and you're off to the races with
+--
+--     decodeString quickType myJsonString
+
+module QuickType exposing
+    ( QuickType
+    , quickTypeToString
+    , quickType
+    )
+
+import Json.Decode as Jdec
+import Json.Decode.Pipeline as Jpipe
+import Json.Encode as Jenc
+import Dict exposing (Dict)
+
+type alias QuickType =
+    { copyWith : Int
+    , name : String
+    }
+
+-- decoders and encoders
+optionalField key decoder fallback =
+    Jdec.dict Jdec.value
+        |> Jdec.andThen (\m ->
+            case Dict.get key m of
+                Nothing -> Jdec.succeed fallback
+                Just x -> Jdec.decodeValue decoder x |> Result.map Jdec.succeed |> Result.withDefault (Jdec.fail ("Invalid " ++ key)))
+
+quickTypeToString : QuickType -> String
+quickTypeToString r = Jenc.encode 0 (encodeQuickType r)
+
+quickType : Jdec.Decoder QuickType
+quickType =
+    Jdec.succeed QuickType
+        |> Jpipe.required "copyWith" Jdec.int
+        |> Jpipe.required "name" Jdec.string
+
+encodeQuickType : QuickType -> Jenc.Value
+encodeQuickType x =
+    Jenc.object
+        [ ("copyWith", Jenc.int x.copyWith)
+        , ("name", Jenc.string x.name)
+        ]
+
+--- encoder helpers
+
+makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
+makeNullableEncoder f m =
+    case m of
+    Just x -> f x
+    Nothing -> Jenc.null
diff --git a/head/elm/test/inputs/json/samples/objc-control-characters.json/default/QuickType.elm b/head/elm/test/inputs/json/samples/objc-control-characters.json/default/QuickType.elm
new file mode 100644
index 0000000..f7f6467
--- /dev/null
+++ b/head/elm/test/inputs/json/samples/objc-control-characters.json/default/QuickType.elm
@@ -0,0 +1,80 @@
+-- To decode the JSON data, add this file to your project, run
+--
+--     elm install NoRedInk/elm-json-decode-pipeline
+--
+-- add these imports
+--
+--     import Json.Decode exposing (decodeString)
+--     import QuickType exposing (quickType)
+--
+-- and you're off to the races with
+--
+--     decodeString quickType myJsonString
+
+module QuickType exposing
+    ( QuickType
+    , quickTypeToString
+    , quickType
+    , Value(..)
+    )
+
+import Json.Decode as Jdec
+import Json.Decode.Pipeline as Jpipe
+import Json.Encode as Jenc
+import Dict exposing (Dict)
+
+type alias QuickType =
+    { literal : String
+    , values : List Value
+    }
+
+type Value
+    = C0
+    | C1
+
+-- decoders and encoders
+optionalField key decoder fallback =
+    Jdec.dict Jdec.value
+        |> Jdec.andThen (\m ->
+            case Dict.get key m of
+                Nothing -> Jdec.succeed fallback
+                Just x -> Jdec.decodeValue decoder x |> Result.map Jdec.succeed |> Result.withDefault (Jdec.fail ("Invalid " ++ key)))
+
+quickTypeToString : QuickType -> String
+quickTypeToString r = Jenc.encode 0 (encodeQuickType r)
+
+quickType : Jdec.Decoder QuickType
+quickType =
+    Jdec.succeed QuickType
+        |> Jpipe.required "literal" Jdec.string
+        |> Jpipe.required "values" (Jdec.list value )
+
+encodeQuickType : QuickType -> Jenc.Value
+encodeQuickType x =
+    Jenc.object
+        [ ("literal", Jenc.string x.literal)
+        , ("values", Jenc.list encodeValue x.values)
+        ]
+
+value : Jdec.Decoder Value
+value =
+    Jdec.string
+        |> Jdec.andThen (\str ->
+            case str of
+                "c0\u{0001}\u{001B}\u{001F}" -> Jdec.succeed C0
+                "c1\u{007F}\u{0080}\u{0085}\u{009F}" -> Jdec.succeed C1
+                somethingElse -> Jdec.fail <| "Invalid Value: " ++ somethingElse
+        )
+
+encodeValue : Value -> Jenc.Value
+encodeValue x = case x of
+    C0 -> Jenc.string "c0\u{0001}\u{001B}\u{001F}"
+    C1 -> Jenc.string "c1\u{007F}\u{0080}\u{0085}\u{009F}"
+
+--- encoder helpers
+
+makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
+makeNullableEncoder f m =
+    case m of
+    Just x -> f x
+    Nothing -> Jenc.null
diff --git a/base/flow/test/inputs/json/misc/00c36.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/00c36.json/default/TopLevel.js
index 028c89f..cc42d8f 100644
--- a/base/flow/test/inputs/json/misc/00c36.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/00c36.json/default/TopLevel.js
@@ -163,7 +163,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/00ec5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/00ec5.json/default/TopLevel.js
index 46b5ac1..ddeecd4 100644
--- a/base/flow/test/inputs/json/misc/00ec5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/00ec5.json/default/TopLevel.js
@@ -202,7 +202,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/010b1.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/010b1.json/default/TopLevel.js
index 666804a..f84af0d 100644
--- a/base/flow/test/inputs/json/misc/010b1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/010b1.json/default/TopLevel.js
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/016af.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/016af.json/default/TopLevel.js
index c2c007d..cbe621d 100644
--- a/base/flow/test/inputs/json/misc/016af.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/016af.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/033b1.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/033b1.json/default/TopLevel.js
index 2ae4813..5fa36d1 100644
--- a/base/flow/test/inputs/json/misc/033b1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/033b1.json/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/050b0.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/050b0.json/default/TopLevel.js
index f489629..5250513 100644
--- a/base/flow/test/inputs/json/misc/050b0.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/050b0.json/default/TopLevel.js
@@ -191,7 +191,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/06bee.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/06bee.json/default/TopLevel.js
index bce87ba..c5932fd 100644
--- a/base/flow/test/inputs/json/misc/06bee.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/06bee.json/default/TopLevel.js
@@ -179,7 +179,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/07540.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/07540.json/default/TopLevel.js
index c1848de..e699d4e 100644
--- a/base/flow/test/inputs/json/misc/07540.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/07540.json/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/0779f.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/0779f.json/default/TopLevel.js
index a07dba1..3d06c27 100644
--- a/base/flow/test/inputs/json/misc/0779f.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/0779f.json/default/TopLevel.js
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/07c75.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/07c75.json/default/TopLevel.js
index 2745288..925106b 100644
--- a/base/flow/test/inputs/json/misc/07c75.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/07c75.json/default/TopLevel.js
@@ -160,7 +160,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/09f54.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/09f54.json/default/TopLevel.js
index ddea840..cdfaa32 100644
--- a/base/flow/test/inputs/json/misc/09f54.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/09f54.json/default/TopLevel.js
@@ -148,7 +148,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/0a358.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/0a358.json/default/TopLevel.js
index 02334fc..50e1b2a 100644
--- a/base/flow/test/inputs/json/misc/0a358.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/0a358.json/default/TopLevel.js
@@ -153,7 +153,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/0a91a.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/0a91a.json/default/TopLevel.js
index f6c0b9c..cbb73dd 100644
--- a/base/flow/test/inputs/json/misc/0a91a.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/0a91a.json/default/TopLevel.js
@@ -355,7 +355,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/0b91a.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/0b91a.json/default/TopLevel.js
index 0cc6b18..a055871 100644
--- a/base/flow/test/inputs/json/misc/0b91a.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/0b91a.json/default/TopLevel.js
@@ -176,7 +176,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/0cffa.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/0cffa.json/default/TopLevel.js
index e30bd60..7e8c132 100644
--- a/base/flow/test/inputs/json/misc/0cffa.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/0cffa.json/default/TopLevel.js
@@ -250,7 +250,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/0e0c2.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/0e0c2.json/default/TopLevel.js
index d529089..17fd377 100644
--- a/base/flow/test/inputs/json/misc/0e0c2.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/0e0c2.json/default/TopLevel.js
@@ -212,7 +212,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/0fecf.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/0fecf.json/default/TopLevel.js
index 9686fae..3c46850 100644
--- a/base/flow/test/inputs/json/misc/0fecf.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/0fecf.json/default/TopLevel.js
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/10be4.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/10be4.json/default/TopLevel.js
index 1fc02c1..22a5277 100644
--- a/base/flow/test/inputs/json/misc/10be4.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/10be4.json/default/TopLevel.js
@@ -202,7 +202,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/112b5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/112b5.json/default/TopLevel.js
index 2611898..6e0d3c1 100644
--- a/base/flow/test/inputs/json/misc/112b5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/112b5.json/default/TopLevel.js
@@ -148,7 +148,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/127a1.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/127a1.json/default/TopLevel.js
index 40d267f..199064c 100644
--- a/base/flow/test/inputs/json/misc/127a1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/127a1.json/default/TopLevel.js
@@ -249,7 +249,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/13d8d.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/13d8d.json/default/TopLevel.js
index 991c5fc..e03ad53 100644
--- a/base/flow/test/inputs/json/misc/13d8d.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/13d8d.json/default/TopLevel.js
@@ -161,7 +161,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/14d38.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/14d38.json/default/TopLevel.js
index bec0f25..0b913fa 100644
--- a/base/flow/test/inputs/json/misc/14d38.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/14d38.json/default/TopLevel.js
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/167d6.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/167d6.json/default/TopLevel.js
index 2ae4813..5fa36d1 100644
--- a/base/flow/test/inputs/json/misc/167d6.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/167d6.json/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/16bc5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/16bc5.json/default/TopLevel.js
index 704d101..e5480dc 100644
--- a/base/flow/test/inputs/json/misc/16bc5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/16bc5.json/default/TopLevel.js
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/176f1.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/176f1.json/default/TopLevel.js
index 8311c33..7fdf613 100644
--- a/base/flow/test/inputs/json/misc/176f1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/176f1.json/default/TopLevel.js
@@ -160,7 +160,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/1a7f5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/1a7f5.json/default/TopLevel.js
index 666804a..f84af0d 100644
--- a/base/flow/test/inputs/json/misc/1a7f5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/1a7f5.json/default/TopLevel.js
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/1b28c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/1b28c.json/default/TopLevel.js
index c2c007d..cbe621d 100644
--- a/base/flow/test/inputs/json/misc/1b28c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/1b28c.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/1b409.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/1b409.json/default/TopLevel.js
index b6437cb..bec5637 100644
--- a/base/flow/test/inputs/json/misc/1b409.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/1b409.json/default/TopLevel.js
@@ -226,7 +226,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/2465e.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/2465e.json/default/TopLevel.js
index 6701758..b7df128 100644
--- a/base/flow/test/inputs/json/misc/2465e.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/2465e.json/default/TopLevel.js
@@ -208,7 +208,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/24f52.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/24f52.json/default/TopLevel.js
index a07dba1..3d06c27 100644
--- a/base/flow/test/inputs/json/misc/24f52.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/24f52.json/default/TopLevel.js
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/262f0.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/262f0.json/default/TopLevel.js
index 4aa41ba..3730989 100644
--- a/base/flow/test/inputs/json/misc/262f0.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/262f0.json/default/TopLevel.js
@@ -238,7 +238,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/26b49.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/26b49.json/default/TopLevel.js
index 2fb7a69..33af2f1 100644
--- a/base/flow/test/inputs/json/misc/26b49.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/26b49.json/default/TopLevel.js
@@ -247,7 +247,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/26c9c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/26c9c.json/default/TopLevel.js
index 91e9a2f..d5ee5ad 100644
--- a/base/flow/test/inputs/json/misc/26c9c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/26c9c.json/default/TopLevel.js
@@ -322,7 +322,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/27332.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/27332.json/default/TopLevel.js
index 30017ad..504c0e4 100644
--- a/base/flow/test/inputs/json/misc/27332.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/27332.json/default/TopLevel.js
@@ -288,7 +288,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/29f47.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/29f47.json/default/TopLevel.js
index c0ba159..b89e1c0 100644
--- a/base/flow/test/inputs/json/misc/29f47.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/29f47.json/default/TopLevel.js
@@ -274,7 +274,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/2d4e2.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/2d4e2.json/default/TopLevel.js
index a78c314..245ea8e 100644
--- a/base/flow/test/inputs/json/misc/2d4e2.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/2d4e2.json/default/TopLevel.js
@@ -242,7 +242,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/2df80.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/2df80.json/default/TopLevel.js
index 3a22850..1f6626f 100644
--- a/base/flow/test/inputs/json/misc/2df80.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/2df80.json/default/TopLevel.js
@@ -208,7 +208,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/31189.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/31189.json/default/TopLevel.js
index 3eac00b..d66b9f3 100644
--- a/base/flow/test/inputs/json/misc/31189.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/31189.json/default/TopLevel.js
@@ -163,7 +163,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/32431.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/32431.json/default/TopLevel.js
index 8c2879f..de29f34 100644
--- a/base/flow/test/inputs/json/misc/32431.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/32431.json/default/TopLevel.js
@@ -206,7 +206,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/32d5c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/32d5c.json/default/TopLevel.js
index 7eccb8d..5dc52af 100644
--- a/base/flow/test/inputs/json/misc/32d5c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/32d5c.json/default/TopLevel.js
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/337ed.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/337ed.json/default/TopLevel.js
index 79aca28..19cc649 100644
--- a/base/flow/test/inputs/json/misc/337ed.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/337ed.json/default/TopLevel.js
@@ -203,7 +203,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/33d2e.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/33d2e.json/default/TopLevel.js
index 453bfdc..6f9cdad 100644
--- a/base/flow/test/inputs/json/misc/33d2e.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/33d2e.json/default/TopLevel.js
@@ -188,7 +188,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/34702.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/34702.json/default/TopLevel.js
index e2b147f..2c87ab2 100644
--- a/base/flow/test/inputs/json/misc/34702.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/34702.json/default/TopLevel.js
@@ -223,7 +223,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/3536b.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/3536b.json/default/TopLevel.js
index d6e56cf..3ac9dd6 100644
--- a/base/flow/test/inputs/json/misc/3536b.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/3536b.json/default/TopLevel.js
@@ -170,7 +170,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/3659d.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/3659d.json/default/TopLevel.js
index c2c007d..cbe621d 100644
--- a/base/flow/test/inputs/json/misc/3659d.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/3659d.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/36d5d.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/36d5d.json/default/TopLevel.js
index a07dba1..3d06c27 100644
--- a/base/flow/test/inputs/json/misc/36d5d.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/36d5d.json/default/TopLevel.js
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/3a6b3.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/3a6b3.json/default/TopLevel.js
index a07dba1..3d06c27 100644
--- a/base/flow/test/inputs/json/misc/3a6b3.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/3a6b3.json/default/TopLevel.js
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/3e9a3.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/3e9a3.json/default/TopLevel.js
index 8311c33..7fdf613 100644
--- a/base/flow/test/inputs/json/misc/3e9a3.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/3e9a3.json/default/TopLevel.js
@@ -160,7 +160,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/3f1ce.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/3f1ce.json/default/TopLevel.js
index 59024c0..ffe7713 100644
--- a/base/flow/test/inputs/json/misc/3f1ce.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/3f1ce.json/default/TopLevel.js
@@ -236,7 +236,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/421d4.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/421d4.json/default/TopLevel.js
index 2974976..797e37c 100644
--- a/base/flow/test/inputs/json/misc/421d4.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/421d4.json/default/TopLevel.js
@@ -249,7 +249,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/437e7.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/437e7.json/default/TopLevel.js
index 7712980..fe52e33 100644
--- a/base/flow/test/inputs/json/misc/437e7.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/437e7.json/default/TopLevel.js
@@ -244,7 +244,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/43970.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/43970.json/default/TopLevel.js
index 7a4cfc8..91eaf78 100644
--- a/base/flow/test/inputs/json/misc/43970.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/43970.json/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/43eaf.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/43eaf.json/default/TopLevel.js
index 2ae4813..5fa36d1 100644
--- a/base/flow/test/inputs/json/misc/43eaf.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/43eaf.json/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/458db.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/458db.json/default/TopLevel.js
index 113a18d..e5a3e27 100644
--- a/base/flow/test/inputs/json/misc/458db.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/458db.json/default/TopLevel.js
@@ -178,7 +178,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/4961a.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/4961a.json/default/TopLevel.js
index c2c007d..cbe621d 100644
--- a/base/flow/test/inputs/json/misc/4961a.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/4961a.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/4a0d7.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/4a0d7.json/default/TopLevel.js
index c2c007d..cbe621d 100644
--- a/base/flow/test/inputs/json/misc/4a0d7.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/4a0d7.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/4a455.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/4a455.json/default/TopLevel.js
index 52def58..4a31419 100644
--- a/base/flow/test/inputs/json/misc/4a455.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/4a455.json/default/TopLevel.js
@@ -178,7 +178,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/4c547.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/4c547.json/default/TopLevel.js
index 704d101..e5480dc 100644
--- a/base/flow/test/inputs/json/misc/4c547.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/4c547.json/default/TopLevel.js
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/4d6fb.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/4d6fb.json/default/TopLevel.js
index 43fa073..c52f7ca 100644
--- a/base/flow/test/inputs/json/misc/4d6fb.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/4d6fb.json/default/TopLevel.js
@@ -283,7 +283,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/4e336.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/4e336.json/default/TopLevel.js
index c2c007d..cbe621d 100644
--- a/base/flow/test/inputs/json/misc/4e336.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/4e336.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/54147.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/54147.json/default/TopLevel.js
index 9d2cb7a..20b1b87 100644
--- a/base/flow/test/inputs/json/misc/54147.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/54147.json/default/TopLevel.js
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/54d32.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/54d32.json/default/TopLevel.js
index efa659f..c0b24bd 100644
--- a/base/flow/test/inputs/json/misc/54d32.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/54d32.json/default/TopLevel.js
@@ -157,7 +157,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/570ec.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/570ec.json/default/TopLevel.js
index 9ef958f..96b0202 100644
--- a/base/flow/test/inputs/json/misc/570ec.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/570ec.json/default/TopLevel.js
@@ -170,7 +170,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/5dd0d.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/5dd0d.json/default/TopLevel.js
index a07dba1..3d06c27 100644
--- a/base/flow/test/inputs/json/misc/5dd0d.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/5dd0d.json/default/TopLevel.js
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/5eae5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/5eae5.json/default/TopLevel.js
index 060d57c..3269b79 100644
--- a/base/flow/test/inputs/json/misc/5eae5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/5eae5.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/5eb20.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/5eb20.json/default/TopLevel.js
index a07dba1..3d06c27 100644
--- a/base/flow/test/inputs/json/misc/5eb20.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/5eb20.json/default/TopLevel.js
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/5f3a1.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/5f3a1.json/default/TopLevel.js
index 2ae4813..5fa36d1 100644
--- a/base/flow/test/inputs/json/misc/5f3a1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/5f3a1.json/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/5f7fe.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/5f7fe.json/default/TopLevel.js
index 6571d23..80d7a26 100644
--- a/base/flow/test/inputs/json/misc/5f7fe.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/5f7fe.json/default/TopLevel.js
@@ -323,7 +323,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/617e8.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/617e8.json/default/TopLevel.js
index 2522d6c..5809480 100644
--- a/base/flow/test/inputs/json/misc/617e8.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/617e8.json/default/TopLevel.js
@@ -322,7 +322,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/61b66.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/61b66.json/default/TopLevel.js
index a07dba1..3d06c27 100644
--- a/base/flow/test/inputs/json/misc/61b66.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/61b66.json/default/TopLevel.js
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/6260a.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/6260a.json/default/TopLevel.js
index 2ae4813..5fa36d1 100644
--- a/base/flow/test/inputs/json/misc/6260a.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/6260a.json/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/65dec.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/65dec.json/default/TopLevel.js
index 3e305ab..48647e3 100644
--- a/base/flow/test/inputs/json/misc/65dec.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/65dec.json/default/TopLevel.js
@@ -222,7 +222,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/66121.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/66121.json/default/TopLevel.js
index 105594b..7c074a0 100644
--- a/base/flow/test/inputs/json/misc/66121.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/66121.json/default/TopLevel.js
@@ -179,7 +179,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/6617c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/6617c.json/default/TopLevel.js
index 4375d14..ca8ef0f 100644
--- a/base/flow/test/inputs/json/misc/6617c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/6617c.json/default/TopLevel.js
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/67c03.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/67c03.json/default/TopLevel.js
index 656f18f..8e41d6e 100644
--- a/base/flow/test/inputs/json/misc/67c03.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/67c03.json/default/TopLevel.js
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/68c30.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/68c30.json/default/TopLevel.js
index 942680a..1e83aa2 100644
--- a/base/flow/test/inputs/json/misc/68c30.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/68c30.json/default/TopLevel.js
@@ -166,7 +166,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/6c155.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/6c155.json/default/TopLevel.js
index 2f599b1..2d265b0 100644
--- a/base/flow/test/inputs/json/misc/6c155.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/6c155.json/default/TopLevel.js
@@ -189,7 +189,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/6de06.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/6de06.json/default/TopLevel.js
index e587b05..36eb35c 100644
--- a/base/flow/test/inputs/json/misc/6de06.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/6de06.json/default/TopLevel.js
@@ -283,7 +283,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/6dec6.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/6dec6.json/default/TopLevel.js
index f804b47..957598e 100644
--- a/base/flow/test/inputs/json/misc/6dec6.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/6dec6.json/default/TopLevel.js
@@ -238,7 +238,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/6eb00.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/6eb00.json/default/TopLevel.js
index 89db339..7e6c5f1 100644
--- a/base/flow/test/inputs/json/misc/6eb00.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/6eb00.json/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/70c77.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/70c77.json/default/TopLevel.js
index 2ae4813..5fa36d1 100644
--- a/base/flow/test/inputs/json/misc/70c77.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/70c77.json/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/734ad.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/734ad.json/default/TopLevel.js
index d21ec47..16ed733 100644
--- a/base/flow/test/inputs/json/misc/734ad.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/734ad.json/default/TopLevel.js
@@ -209,7 +209,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/75912.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/75912.json/default/TopLevel.js
index 2ae4813..5fa36d1 100644
--- a/base/flow/test/inputs/json/misc/75912.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/75912.json/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/7681c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/7681c.json/default/TopLevel.js
index 4146020..3fee931 100644
--- a/base/flow/test/inputs/json/misc/7681c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/7681c.json/default/TopLevel.js
@@ -251,7 +251,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/76ae1.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/76ae1.json/default/TopLevel.js
index 5ec1c7c..14d01a4 100644
--- a/base/flow/test/inputs/json/misc/76ae1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/76ae1.json/default/TopLevel.js
@@ -319,7 +319,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/77392.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/77392.json/default/TopLevel.js
index 53a2dde..a7509f3 100644
--- a/base/flow/test/inputs/json/misc/77392.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/77392.json/default/TopLevel.js
@@ -162,7 +162,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/7d397.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/7d397.json/default/TopLevel.js
index 8e42f75..f5f4c9c 100644
--- a/base/flow/test/inputs/json/misc/7d397.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/7d397.json/default/TopLevel.js
@@ -210,7 +210,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/7d722.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/7d722.json/default/TopLevel.js
index a07dba1..3d06c27 100644
--- a/base/flow/test/inputs/json/misc/7d722.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/7d722.json/default/TopLevel.js
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/7df41.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/7df41.json/default/TopLevel.js
index 4393320..0b3ca2e 100644
--- a/base/flow/test/inputs/json/misc/7df41.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/7df41.json/default/TopLevel.js
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/7dfa6.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/7dfa6.json/default/TopLevel.js
index c2c007d..cbe621d 100644
--- a/base/flow/test/inputs/json/misc/7dfa6.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/7dfa6.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/7eb30.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/7eb30.json/default/TopLevel.js
index 1106eed..1657849 100644
--- a/base/flow/test/inputs/json/misc/7eb30.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/7eb30.json/default/TopLevel.js
@@ -179,7 +179,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/7f568.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/7f568.json/default/TopLevel.js
index 9dec2ca..bdf0c1b 100644
--- a/base/flow/test/inputs/json/misc/7f568.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/7f568.json/default/TopLevel.js
@@ -166,7 +166,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/7fbfb.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/7fbfb.json/default/TopLevel.js
index 973db80..982e944 100644
--- a/base/flow/test/inputs/json/misc/7fbfb.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/7fbfb.json/default/TopLevel.js
@@ -163,7 +163,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/80aff.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/80aff.json/default/TopLevel.js
index 42e855b..936aad8 100644
--- a/base/flow/test/inputs/json/misc/80aff.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/80aff.json/default/TopLevel.js
@@ -154,7 +154,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/82509.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/82509.json/default/TopLevel.js
index de9c80d..4415a6d 100644
--- a/base/flow/test/inputs/json/misc/82509.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/82509.json/default/TopLevel.js
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/8592b.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/8592b.json/default/TopLevel.js
index 3e80895..117adcc 100644
--- a/base/flow/test/inputs/json/misc/8592b.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/8592b.json/default/TopLevel.js
@@ -258,7 +258,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/88130.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/88130.json/default/TopLevel.js
index 704d101..e5480dc 100644
--- a/base/flow/test/inputs/json/misc/88130.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/88130.json/default/TopLevel.js
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/8a62c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/8a62c.json/default/TopLevel.js
index c2c007d..cbe621d 100644
--- a/base/flow/test/inputs/json/misc/8a62c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/8a62c.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/908db.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/908db.json/default/TopLevel.js
index eddef7b..b1365ea 100644
--- a/base/flow/test/inputs/json/misc/908db.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/908db.json/default/TopLevel.js
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/9617f.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/9617f.json/default/TopLevel.js
index 2ae4813..5fa36d1 100644
--- a/base/flow/test/inputs/json/misc/9617f.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/9617f.json/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/96f7c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/96f7c.json/default/TopLevel.js
index 700e5c2..3e323b2 100644
--- a/base/flow/test/inputs/json/misc/96f7c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/96f7c.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/9847b.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/9847b.json/default/TopLevel.js
index 352402c..c6fa41c 100644
--- a/base/flow/test/inputs/json/misc/9847b.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/9847b.json/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/9929c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/9929c.json/default/TopLevel.js
index 704d101..e5480dc 100644
--- a/base/flow/test/inputs/json/misc/9929c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/9929c.json/default/TopLevel.js
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/996bd.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/996bd.json/default/TopLevel.js
index 25323db..0cab598 100644
--- a/base/flow/test/inputs/json/misc/996bd.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/996bd.json/default/TopLevel.js
@@ -179,7 +179,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/9a503.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/9a503.json/default/TopLevel.js
index f262bd5..4bb86ec 100644
--- a/base/flow/test/inputs/json/misc/9a503.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/9a503.json/default/TopLevel.js
@@ -165,7 +165,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/9ac3b.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/9ac3b.json/default/TopLevel.js
index 78f370b..c5aebc8 100644
--- a/base/flow/test/inputs/json/misc/9ac3b.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/9ac3b.json/default/TopLevel.js
@@ -166,7 +166,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/9eed5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/9eed5.json/default/TopLevel.js
index b74716c..cc710c9 100644
--- a/base/flow/test/inputs/json/misc/9eed5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/9eed5.json/default/TopLevel.js
@@ -164,7 +164,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/a0496.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/a0496.json/default/TopLevel.js
index 989f309..4c44164 100644
--- a/base/flow/test/inputs/json/misc/a0496.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/a0496.json/default/TopLevel.js
@@ -156,7 +156,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/a1eca.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/a1eca.json/default/TopLevel.js
index 704d101..e5480dc 100644
--- a/base/flow/test/inputs/json/misc/a1eca.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/a1eca.json/default/TopLevel.js
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/a3d8c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/a3d8c.json/default/TopLevel.js
index 9717075..1863828 100644
--- a/base/flow/test/inputs/json/misc/a3d8c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/a3d8c.json/default/TopLevel.js
@@ -251,7 +251,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/a45b0.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/a45b0.json/default/TopLevel.js
index 666804a..f84af0d 100644
--- a/base/flow/test/inputs/json/misc/a45b0.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/a45b0.json/default/TopLevel.js
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/a71df.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/a71df.json/default/TopLevel.js
index a07dba1..3d06c27 100644
--- a/base/flow/test/inputs/json/misc/a71df.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/a71df.json/default/TopLevel.js
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/a9691.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/a9691.json/default/TopLevel.js
index 2ae4813..5fa36d1 100644
--- a/base/flow/test/inputs/json/misc/a9691.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/a9691.json/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/ab0d1.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/ab0d1.json/default/TopLevel.js
index 666804a..f84af0d 100644
--- a/base/flow/test/inputs/json/misc/ab0d1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/ab0d1.json/default/TopLevel.js
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/abb4b.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/abb4b.json/default/TopLevel.js
index c2c007d..cbe621d 100644
--- a/base/flow/test/inputs/json/misc/abb4b.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/abb4b.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/ac944.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/ac944.json/default/TopLevel.js
index 2ae4813..5fa36d1 100644
--- a/base/flow/test/inputs/json/misc/ac944.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/ac944.json/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/ad8be.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/ad8be.json/default/TopLevel.js
index 1fc02c1..22a5277 100644
--- a/base/flow/test/inputs/json/misc/ad8be.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/ad8be.json/default/TopLevel.js
@@ -202,7 +202,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/ae7f0.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/ae7f0.json/default/TopLevel.js
index 11afdfe..7f35c44 100644
--- a/base/flow/test/inputs/json/misc/ae7f0.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/ae7f0.json/default/TopLevel.js
@@ -232,7 +232,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/ae9ca.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/ae9ca.json/default/TopLevel.js
index 8f0a2eb..03e9fba 100644
--- a/base/flow/test/inputs/json/misc/ae9ca.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/ae9ca.json/default/TopLevel.js
@@ -181,7 +181,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/af2d1.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/af2d1.json/default/TopLevel.js
index 921f0c2..febdb35 100644
--- a/base/flow/test/inputs/json/misc/af2d1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/af2d1.json/default/TopLevel.js
@@ -243,7 +243,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/b4865.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/b4865.json/default/TopLevel.js
index b965e11..715a5ec 100644
--- a/base/flow/test/inputs/json/misc/b4865.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/b4865.json/default/TopLevel.js
@@ -163,7 +163,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/b6f2c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/b6f2c.json/default/TopLevel.js
index c2c007d..cbe621d 100644
--- a/base/flow/test/inputs/json/misc/b6f2c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/b6f2c.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/b6fe5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/b6fe5.json/default/TopLevel.js
index 59ad879..32a8f00 100644
--- a/base/flow/test/inputs/json/misc/b6fe5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/b6fe5.json/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/b9f64.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/b9f64.json/default/TopLevel.js
index 767bc9b..37dcbf0 100644
--- a/base/flow/test/inputs/json/misc/b9f64.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/b9f64.json/default/TopLevel.js
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/bb1ec.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/bb1ec.json/default/TopLevel.js
index c2c007d..cbe621d 100644
--- a/base/flow/test/inputs/json/misc/bb1ec.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/bb1ec.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/be234.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/be234.json/default/TopLevel.js
index efc7121..618f294 100644
--- a/base/flow/test/inputs/json/misc/be234.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/be234.json/default/TopLevel.js
@@ -297,7 +297,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/c0356.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/c0356.json/default/TopLevel.js
index 82444c9..0bae148 100644
--- a/base/flow/test/inputs/json/misc/c0356.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/c0356.json/default/TopLevel.js
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/c0a3a.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/c0a3a.json/default/TopLevel.js
index a07dba1..3d06c27 100644
--- a/base/flow/test/inputs/json/misc/c0a3a.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/c0a3a.json/default/TopLevel.js
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/c3303.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/c3303.json/default/TopLevel.js
index 1ca909c..6e2391c 100644
--- a/base/flow/test/inputs/json/misc/c3303.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/c3303.json/default/TopLevel.js
@@ -248,7 +248,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/c6cfd.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/c6cfd.json/default/TopLevel.js
index 5f22df7..0cd5f59 100644
--- a/base/flow/test/inputs/json/misc/c6cfd.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/c6cfd.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/c8c7e.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/c8c7e.json/default/TopLevel.js
index 7342b40..175b9e8 100644
--- a/base/flow/test/inputs/json/misc/c8c7e.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/c8c7e.json/default/TopLevel.js
@@ -163,7 +163,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/cb0cc.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/cb0cc.json/default/TopLevel.js
index 0681c13..a54070f 100644
--- a/base/flow/test/inputs/json/misc/cb0cc.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/cb0cc.json/default/TopLevel.js
@@ -158,7 +158,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/cb81e.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/cb81e.json/default/TopLevel.js
index 9663ec2..40e5d6f 100644
--- a/base/flow/test/inputs/json/misc/cb81e.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/cb81e.json/default/TopLevel.js
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/ccd18.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/ccd18.json/default/TopLevel.js
index a07dba1..3d06c27 100644
--- a/base/flow/test/inputs/json/misc/ccd18.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/ccd18.json/default/TopLevel.js
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/cd238.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/cd238.json/default/TopLevel.js
index a07dba1..3d06c27 100644
--- a/base/flow/test/inputs/json/misc/cd238.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/cd238.json/default/TopLevel.js
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/cd463.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/cd463.json/default/TopLevel.js
index 2ae4813..5fa36d1 100644
--- a/base/flow/test/inputs/json/misc/cd463.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/cd463.json/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/cda6c.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/cda6c.json/default/TopLevel.js
index 0af0cd4..2606af6 100644
--- a/base/flow/test/inputs/json/misc/cda6c.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/cda6c.json/default/TopLevel.js
@@ -163,7 +163,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/cf0d8.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/cf0d8.json/default/TopLevel.js
index 704d101..e5480dc 100644
--- a/base/flow/test/inputs/json/misc/cf0d8.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/cf0d8.json/default/TopLevel.js
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/cfbce.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/cfbce.json/default/TopLevel.js
index 2ae4813..5fa36d1 100644
--- a/base/flow/test/inputs/json/misc/cfbce.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/cfbce.json/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/d0908.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/d0908.json/default/TopLevel.js
index c2c007d..cbe621d 100644
--- a/base/flow/test/inputs/json/misc/d0908.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/d0908.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/d23d5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/d23d5.json/default/TopLevel.js
index 29f090e..3307221 100644
--- a/base/flow/test/inputs/json/misc/d23d5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/d23d5.json/default/TopLevel.js
@@ -153,7 +153,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/dbfb3.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/dbfb3.json/default/TopLevel.js
index 48e64c8..3ca6bba 100644
--- a/base/flow/test/inputs/json/misc/dbfb3.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/dbfb3.json/default/TopLevel.js
@@ -237,7 +237,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/dc44f.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/dc44f.json/default/TopLevel.js
index b7ac151..6c56d4d 100644
--- a/base/flow/test/inputs/json/misc/dc44f.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/dc44f.json/default/TopLevel.js
@@ -261,7 +261,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/dd1ce.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/dd1ce.json/default/TopLevel.js
index b7ac151..6c56d4d 100644
--- a/base/flow/test/inputs/json/misc/dd1ce.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/dd1ce.json/default/TopLevel.js
@@ -261,7 +261,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/dec3a.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/dec3a.json/default/TopLevel.js
index c75a6b2..c872aa9 100644
--- a/base/flow/test/inputs/json/misc/dec3a.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/dec3a.json/default/TopLevel.js
@@ -197,7 +197,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/df957.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/df957.json/default/TopLevel.js
index 704d101..e5480dc 100644
--- a/base/flow/test/inputs/json/misc/df957.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/df957.json/default/TopLevel.js
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/e0ac7.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/e0ac7.json/default/TopLevel.js
index 97ba079..b10a4fd 100644
--- a/base/flow/test/inputs/json/misc/e0ac7.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/e0ac7.json/default/TopLevel.js
@@ -245,7 +245,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/e2915.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/e2915.json/default/TopLevel.js
index 49a78f9..3fb53d2 100644
--- a/base/flow/test/inputs/json/misc/e2915.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/e2915.json/default/TopLevel.js
@@ -236,7 +236,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/e2a58.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/e2a58.json/default/TopLevel.js
index f655445..ff7cead 100644
--- a/base/flow/test/inputs/json/misc/e2a58.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/e2a58.json/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/e324e.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/e324e.json/default/TopLevel.js
index bf50666..a4e43e9 100644
--- a/base/flow/test/inputs/json/misc/e324e.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/e324e.json/default/TopLevel.js
@@ -207,7 +207,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/e53b5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/e53b5.json/default/TopLevel.js
index 437c982..f87432b 100644
--- a/base/flow/test/inputs/json/misc/e53b5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/e53b5.json/default/TopLevel.js
@@ -163,7 +163,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/e64a0.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/e64a0.json/default/TopLevel.js
index 2611898..6e0d3c1 100644
--- a/base/flow/test/inputs/json/misc/e64a0.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/e64a0.json/default/TopLevel.js
@@ -148,7 +148,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/e8a0b.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/e8a0b.json/default/TopLevel.js
index 666804a..f84af0d 100644
--- a/base/flow/test/inputs/json/misc/e8a0b.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/e8a0b.json/default/TopLevel.js
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/e8b04.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/e8b04.json/default/TopLevel.js
index 2c1dfce..fe32852 100644
--- a/base/flow/test/inputs/json/misc/e8b04.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/e8b04.json/default/TopLevel.js
@@ -405,7 +405,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/ed095.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/ed095.json/default/TopLevel.js
index 0139657..a7c4403 100644
--- a/base/flow/test/inputs/json/misc/ed095.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/ed095.json/default/TopLevel.js
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/f22f5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/f22f5.json/default/TopLevel.js
index 7eb9210..c64073a 100644
--- a/base/flow/test/inputs/json/misc/f22f5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/f22f5.json/default/TopLevel.js
@@ -229,7 +229,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/f3139.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/f3139.json/default/TopLevel.js
index 352402c..c6fa41c 100644
--- a/base/flow/test/inputs/json/misc/f3139.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/f3139.json/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/f3edf.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/f3edf.json/default/TopLevel.js
index 666804a..f84af0d 100644
--- a/base/flow/test/inputs/json/misc/f3edf.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/f3edf.json/default/TopLevel.js
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/f466a.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/f466a.json/default/TopLevel.js
index 666804a..f84af0d 100644
--- a/base/flow/test/inputs/json/misc/f466a.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/f466a.json/default/TopLevel.js
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/f6a65.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/f6a65.json/default/TopLevel.js
index 8f1c326..dbdbf21 100644
--- a/base/flow/test/inputs/json/misc/f6a65.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/f6a65.json/default/TopLevel.js
@@ -252,7 +252,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/f74d5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/f74d5.json/default/TopLevel.js
index 8e9db3a..0a6f61c 100644
--- a/base/flow/test/inputs/json/misc/f74d5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/f74d5.json/default/TopLevel.js
@@ -251,7 +251,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/f82d9.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/f82d9.json/default/TopLevel.js
index 84be934..d0556f7 100644
--- a/base/flow/test/inputs/json/misc/f82d9.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/f82d9.json/default/TopLevel.js
@@ -220,7 +220,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/f974d.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/f974d.json/default/TopLevel.js
index 4c8ed85..ce5a641 100644
--- a/base/flow/test/inputs/json/misc/f974d.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/f974d.json/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/faff5.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/faff5.json/default/TopLevel.js
index e84344e..f99d30d 100644
--- a/base/flow/test/inputs/json/misc/faff5.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/faff5.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/fcca3.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/fcca3.json/default/TopLevel.js
index a714023..6121ebf 100644
--- a/base/flow/test/inputs/json/misc/fcca3.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/fcca3.json/default/TopLevel.js
@@ -348,7 +348,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/misc/fd329.json/default/TopLevel.js b/head/flow/test/inputs/json/misc/fd329.json/default/TopLevel.js
index ddea840..cdfaa32 100644
--- a/base/flow/test/inputs/json/misc/fd329.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/misc/fd329.json/default/TopLevel.js
@@ -148,7 +148,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/blns-object.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/blns-object.json/default/TopLevel.js
index 5039626..72b32e5 100644
--- a/base/flow/test/inputs/json/priority/blns-object.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/blns-object.json/default/TopLevel.js
@@ -730,7 +730,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/bug2037.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug2037.json/default/TopLevel.js
index 73ebd8e..56fb38a 100644
--- a/base/flow/test/inputs/json/priority/bug2037.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug2037.json/default/TopLevel.js
@@ -146,7 +146,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/bug2521.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug2521.json/default/TopLevel.js
index 8c1629d..f30e5b4 100644
--- a/base/flow/test/inputs/json/priority/bug2521.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug2521.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/bug2590.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug2590.json/default/TopLevel.js
index 8625ee8..0ff795d 100644
--- a/base/flow/test/inputs/json/priority/bug2590.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug2590.json/default/TopLevel.js
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/bug2663.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug2663.json/default/TopLevel.js
index 8c7e069..a40eac7 100644
--- a/base/flow/test/inputs/json/priority/bug2663.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug2663.json/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/bug2793.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug2793.json/default/TopLevel.js
index 82cc898..9e8ca62 100644
--- a/base/flow/test/inputs/json/priority/bug2793.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug2793.json/default/TopLevel.js
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/bug427.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug427.json/default/TopLevel.js
index 9deb49f..4e83eaa 100644
--- a/base/flow/test/inputs/json/priority/bug427.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug427.json/default/TopLevel.js
@@ -746,7 +746,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/bug790.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug790.json/default/TopLevel.js
index 67e4f76..86226fd 100644
--- a/base/flow/test/inputs/json/priority/bug790.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug790.json/default/TopLevel.js
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/bug855-short.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug855-short.json/default/TopLevel.js
index 2713d71..4d40fe1 100644
--- a/base/flow/test/inputs/json/priority/bug855-short.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug855-short.json/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/bug863.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/bug863.json/default/TopLevel.js
index 79dff4e..873b3ae 100644
--- a/base/flow/test/inputs/json/priority/bug863.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/bug863.json/default/TopLevel.js
@@ -221,7 +221,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/coin-pairs.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/coin-pairs.json/default/TopLevel.js
index ae3caec..7eaadc1 100644
--- a/base/flow/test/inputs/json/priority/coin-pairs.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/coin-pairs.json/default/TopLevel.js
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations1.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/combinations1.json/default/TopLevel.js
index 471d5ef..8f831c4 100644
--- a/base/flow/test/inputs/json/priority/combinations1.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations1.json/default/TopLevel.js
@@ -527,7 +527,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations1.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js b/head/flow/test/inputs/json/priority/combinations1.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
index c0ed060..5a250ee 100644
--- a/base/flow/test/inputs/json/priority/combinations1.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations1.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
@@ -527,7 +527,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations1.json/prefer-unions-false--a5053c0a486d/TopLevel.js b/head/flow/test/inputs/json/priority/combinations1.json/prefer-unions-false--a5053c0a486d/TopLevel.js
index 471d5ef..8f831c4 100644
--- a/base/flow/test/inputs/json/priority/combinations1.json/prefer-unions-false--a5053c0a486d/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations1.json/prefer-unions-false--a5053c0a486d/TopLevel.js
@@ -527,7 +527,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations1.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js b/head/flow/test/inputs/json/priority/combinations1.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
index 471d5ef..8f831c4 100644
--- a/base/flow/test/inputs/json/priority/combinations1.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations1.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
@@ -527,7 +527,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js b/head/flow/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
index 367dbf7..d304189 100644
--- a/base/flow/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
@@ -527,7 +527,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations2.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/combinations2.json/default/TopLevel.js
index c65cd0a..510e574 100644
--- a/base/flow/test/inputs/json/priority/combinations2.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations2.json/default/TopLevel.js
@@ -479,7 +479,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations2.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js b/head/flow/test/inputs/json/priority/combinations2.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
index 5f4b38b..40d15ab 100644
--- a/base/flow/test/inputs/json/priority/combinations2.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations2.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
@@ -479,7 +479,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations2.json/prefer-unions-false--a5053c0a486d/TopLevel.js b/head/flow/test/inputs/json/priority/combinations2.json/prefer-unions-false--a5053c0a486d/TopLevel.js
index c65cd0a..510e574 100644
--- a/base/flow/test/inputs/json/priority/combinations2.json/prefer-unions-false--a5053c0a486d/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations2.json/prefer-unions-false--a5053c0a486d/TopLevel.js
@@ -479,7 +479,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations2.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js b/head/flow/test/inputs/json/priority/combinations2.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
index c65cd0a..510e574 100644
--- a/base/flow/test/inputs/json/priority/combinations2.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations2.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
@@ -479,7 +479,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js b/head/flow/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
index 5299a0c..9b9ad73 100644
--- a/base/flow/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
@@ -479,7 +479,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations3.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/combinations3.json/default/TopLevel.js
index 2917fea..f16fccf 100644
--- a/base/flow/test/inputs/json/priority/combinations3.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations3.json/default/TopLevel.js
@@ -583,7 +583,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations3.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js b/head/flow/test/inputs/json/priority/combinations3.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
index 87730a3..6681434 100644
--- a/base/flow/test/inputs/json/priority/combinations3.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations3.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
@@ -583,7 +583,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations3.json/prefer-unions-false--a5053c0a486d/TopLevel.js b/head/flow/test/inputs/json/priority/combinations3.json/prefer-unions-false--a5053c0a486d/TopLevel.js
index 2917fea..f16fccf 100644
--- a/base/flow/test/inputs/json/priority/combinations3.json/prefer-unions-false--a5053c0a486d/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations3.json/prefer-unions-false--a5053c0a486d/TopLevel.js
@@ -583,7 +583,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations3.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js b/head/flow/test/inputs/json/priority/combinations3.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
index 2917fea..f16fccf 100644
--- a/base/flow/test/inputs/json/priority/combinations3.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations3.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
@@ -583,7 +583,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js b/head/flow/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
index 492f21d..dac2f81 100644
--- a/base/flow/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
@@ -583,7 +583,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations4.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/combinations4.json/default/TopLevel.js
index bd03cb9..1b76a6c 100644
--- a/base/flow/test/inputs/json/priority/combinations4.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations4.json/default/TopLevel.js
@@ -653,7 +653,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations4.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js b/head/flow/test/inputs/json/priority/combinations4.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
index c025003..e235b35 100644
--- a/base/flow/test/inputs/json/priority/combinations4.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations4.json/nice-property-names-true--f4d7920ee2ce/TopLevel.js
@@ -653,7 +653,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations4.json/prefer-unions-false--a5053c0a486d/TopLevel.js b/head/flow/test/inputs/json/priority/combinations4.json/prefer-unions-false--a5053c0a486d/TopLevel.js
index bd03cb9..1b76a6c 100644
--- a/base/flow/test/inputs/json/priority/combinations4.json/prefer-unions-false--a5053c0a486d/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations4.json/prefer-unions-false--a5053c0a486d/TopLevel.js
@@ -653,7 +653,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations4.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js b/head/flow/test/inputs/json/priority/combinations4.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
index bd03cb9..1b76a6c 100644
--- a/base/flow/test/inputs/json/priority/combinations4.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations4.json/prefer-unknown-false--f1ab9e45d823/TopLevel.js
@@ -653,7 +653,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js b/head/flow/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
index 78bf87d..a467e53 100644
--- a/base/flow/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
@@ -653,7 +653,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/combined-enum.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/combined-enum.json/default/TopLevel.js
index cce650f..31b0193 100644
--- a/base/flow/test/inputs/json/priority/combined-enum.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/combined-enum.json/default/TopLevel.js
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/direct-recursive.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/direct-recursive.json/default/TopLevel.js
index 67ff89d..acd233c 100644
--- a/base/flow/test/inputs/json/priority/direct-recursive.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/direct-recursive.json/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/empty-enum.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/empty-enum.json/default/TopLevel.js
index 084984f..98bfdd8 100644
--- a/base/flow/test/inputs/json/priority/empty-enum.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/empty-enum.json/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/identifiers.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/identifiers.json/default/TopLevel.js
index 8aad518..48da16d 100644
--- a/base/flow/test/inputs/json/priority/identifiers.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/identifiers.json/default/TopLevel.js
@@ -166,7 +166,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.js
index 0fc960a..ed72dbc 100644
--- a/base/flow/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.js
index dcbd39d..9a2c339 100644
--- a/base/flow/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.js
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/keywords.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/keywords.json/default/TopLevel.js
index fcb98df..5bb0301 100644
--- a/base/flow/test/inputs/json/priority/keywords.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/keywords.json/default/TopLevel.js
@@ -1028,6 +1028,7 @@ export type Obj4 = {
     rethrows:         Rethrows;
     return:           Return;
     right:            Right;
+    s:                S;
     sbyte:            Sbyte;
     sealed:           Sealed;
     select:           Select;
@@ -1157,6 +1158,10 @@ export type Right = {
     right: number;
 };
 
+export type S = {
+    s: number;
+};
+
 export type Sbyte = {
     sbyte: number;
 };
@@ -1555,7 +1560,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
@@ -2438,6 +2443,7 @@ const typeMap: any = {
         { json: "rethrows", js: "rethrows", typ: r("Rethrows") },
         { json: "return", js: "return", typ: r("Return") },
         { json: "right", js: "right", typ: r("Right") },
+        { json: "s", js: "s", typ: r("S") },
         { json: "sbyte", js: "sbyte", typ: r("Sbyte") },
         { json: "sealed", js: "sealed", typ: r("Sealed") },
         { json: "select", js: "select", typ: r("Select") },
@@ -2545,6 +2551,9 @@ const typeMap: any = {
     "Right": o([
         { json: "right", js: "right", typ: i(0) },
     ], false),
+    "S": o([
+        { json: "s", js: "s", typ: i(0) },
+    ], false),
     "Sbyte": o([
         { json: "sbyte", js: "sbyte", typ: i(0) },
     ], false),
diff --git a/base/flow/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.js
index 8fa3577..ff467e0 100644
--- a/base/flow/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.js
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/list.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/list.json/default/TopLevel.js
index 2c32b91..447ff4a 100644
--- a/base/flow/test/inputs/json/priority/list.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/list.json/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/name-style.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/name-style.json/default/TopLevel.js
index 3fd7740..b8a8e89 100644
--- a/base/flow/test/inputs/json/priority/name-style.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/name-style.json/default/TopLevel.js
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/nbl-stats.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/nbl-stats.json/default/TopLevel.js
index d54ed07..0213099 100644
--- a/base/flow/test/inputs/json/priority/nbl-stats.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/nbl-stats.json/default/TopLevel.js
@@ -467,7 +467,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/nested-objects.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/nested-objects.json/default/TopLevel.js
index 9b24cec..f48df76 100644
--- a/base/flow/test/inputs/json/priority/nested-objects.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/nested-objects.json/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/no-classes.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/no-classes.json/default/TopLevel.js
index e911e7a..9bd66d5 100644
--- a/base/flow/test/inputs/json/priority/no-classes.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/no-classes.json/default/TopLevel.js
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.js
index 315cb72..efc6519 100644
--- a/base/flow/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.js
@@ -275,7 +275,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/number-map.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/number-map.json/default/TopLevel.js
index 65a52ce..0455d1a 100644
--- a/base/flow/test/inputs/json/priority/number-map.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/number-map.json/default/TopLevel.js
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/omit-empty.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/omit-empty.json/default/TopLevel.js
index 6b6178b..903de82 100644
--- a/base/flow/test/inputs/json/priority/omit-empty.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/omit-empty.json/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/optional-union.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/optional-union.json/default/TopLevel.js
index e91330a..bb5ab92 100644
--- a/base/flow/test/inputs/json/priority/optional-union.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/optional-union.json/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.js
index a8eed91..0e39fc6 100644
--- a/base/flow/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.js
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/php-validation.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/php-validation.json/default/TopLevel.js
index d60e336..8be774a 100644
--- a/base/flow/test/inputs/json/priority/php-validation.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/php-validation.json/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/recursive.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/recursive.json/default/TopLevel.js
index e6ae2a5..65fe913 100644
--- a/base/flow/test/inputs/json/priority/recursive.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/recursive.json/default/TopLevel.js
@@ -254,7 +254,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.js
index e89d8d0..d57969b 100644
--- a/base/flow/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.js
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.js
index 3d399af..31df67f 100644
--- a/base/flow/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.js
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/unions.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/unions.json/default/TopLevel.js
index 09e870e..e188a7c 100644
--- a/base/flow/test/inputs/json/priority/unions.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/unions.json/default/TopLevel.js
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/url.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/url.json/default/TopLevel.js
index e8d9a96..20f95c0 100644
--- a/base/flow/test/inputs/json/priority/url.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/url.json/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/priority/uuids.json/default/TopLevel.js b/head/flow/test/inputs/json/priority/uuids.json/default/TopLevel.js
index bb4e29d..ea407ee 100644
--- a/base/flow/test/inputs/json/priority/uuids.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/priority/uuids.json/default/TopLevel.js
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.js
index 4c8ed85..ce5a641 100644
--- a/base/flow/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/flow/test/inputs/json/samples/copy-with-property.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/copy-with-property.json/default/TopLevel.js
new file mode 100644
index 0000000..aff9803
--- /dev/null
+++ b/head/flow/test/inputs/json/samples/copy-with-property.json/default/TopLevel.js
@@ -0,0 +1,211 @@
+// @flow
+
+// To parse this data:
+//
+//   const Convert = require("./TopLevel");
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export type TopLevel = {
+    copyWith: number;
+    name:     string;
+};
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+function toTopLevel(json: string): TopLevel {
+    return cast(JSON.parse(json), r("TopLevel"));
+}
+
+function topLevelToJson(value: TopLevel): string {
+    return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = '') {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "copyWith", js: "copyWith", typ: i(0) },
+        { json: "name", js: "name", typ: "" },
+    ], false),
+};
+
+module.exports = {
+    "topLevelToJson": topLevelToJson,
+    "toTopLevel": toTopLevel,
+};
diff --git a/base/flow/test/inputs/json/samples/getting-started.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/getting-started.json/default/TopLevel.js
index ae73cfd..6ea77e9 100644
--- a/base/flow/test/inputs/json/samples/getting-started.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/getting-started.json/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/samples/github-events.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/github-events.json/default/TopLevel.js
index 1d2d9e0..b5d327c 100644
--- a/base/flow/test/inputs/json/samples/github-events.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/github-events.json/default/TopLevel.js
@@ -423,7 +423,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.js
index 0d056c0..f31502b 100644
--- a/base/flow/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.js
@@ -167,7 +167,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/samples/null-safe.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/null-safe.json/default/TopLevel.js
index c0316c7..4399f87 100644
--- a/base/flow/test/inputs/json/samples/null-safe.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/null-safe.json/default/TopLevel.js
@@ -148,7 +148,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/flow/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.js
new file mode 100644
index 0000000..7ea540b
--- /dev/null
+++ b/head/flow/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.js
@@ -0,0 +1,219 @@
+// @flow
+
+// To parse this data:
+//
+//   const Convert = require("./TopLevel");
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export type TopLevel = {
+    literal: string;
+    values:  Value[];
+};
+
+export type Value =
+      "c0\u0001\u001b\u001f"
+    | "c1\u007f\u0080\u0085\u009f";
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+function toTopLevel(json: string): TopLevel {
+    return cast(JSON.parse(json), r("TopLevel"));
+}
+
+function topLevelToJson(value: TopLevel): string {
+    return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = '') {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "literal", js: "literal", typ: "" },
+        { json: "values", js: "values", typ: a(r("Value")) },
+    ], false),
+    "Value": [
+        "c0\u0001\u001b\u001f",
+        "c1\u007f\u0080\u0085\u009f",
+    ],
+};
+
+module.exports = {
+    "topLevelToJson": topLevelToJson,
+    "toTopLevel": toTopLevel,
+};
diff --git a/base/flow/test/inputs/json/samples/pokedex.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/pokedex.json/default/TopLevel.js
index 6ad0269..562138f 100644
--- a/base/flow/test/inputs/json/samples/pokedex.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/pokedex.json/default/TopLevel.js
@@ -187,7 +187,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/samples/reddit.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/reddit.json/default/TopLevel.js
index 2845c6a..7cf956c 100644
--- a/base/flow/test/inputs/json/samples/reddit.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/reddit.json/default/TopLevel.js
@@ -276,7 +276,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/samples/simple-object.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/simple-object.json/default/TopLevel.js
index f47044a..f652760 100644
--- a/base/flow/test/inputs/json/samples/simple-object.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/simple-object.json/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/samples/spotify-album.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/spotify-album.json/default/TopLevel.js
index 2ea6b6b..d773ba3 100644
--- a/base/flow/test/inputs/json/samples/spotify-album.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/spotify-album.json/default/TopLevel.js
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.js
index ddea840..cdfaa32 100644
--- a/base/flow/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.js
@@ -148,7 +148,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/flow/test/inputs/json/samples/us-senators.json/default/TopLevel.js b/head/flow/test/inputs/json/samples/us-senators.json/default/TopLevel.js
index e14d144..051e481 100644
--- a/base/flow/test/inputs/json/samples/us-senators.json/default/TopLevel.js
+++ b/head/flow/test/inputs/json/samples/us-senators.json/default/TopLevel.js
@@ -240,7 +240,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/golang/test/inputs/json/priority/keywords.json/default/quicktype.go b/head/golang/test/inputs/json/priority/keywords.json/default/quicktype.go
index 500118c..260e9db 100644
--- a/base/golang/test/inputs/json/priority/keywords.json/default/quicktype.go
+++ b/head/golang/test/inputs/json/priority/keywords.json/default/quicktype.go
@@ -1036,6 +1036,7 @@ type Obj4 struct {
 	Rethrows        Rethrows        `json:"rethrows"`
 	Return          Return          `json:"return"`
 	Right           Right           `json:"right"`
+	S               S               `json:"s"`
 	Sbyte           Sbyte           `json:"sbyte"`
 	Sealed          Sealed          `json:"sealed"`
 	Sel             Sel             `json:"SEL"`
@@ -1162,6 +1163,10 @@ type Right struct {
 	Right int64 `json:"right"`
 }
 
+type S struct {
+	S int64 `json:"s"`
+}
+
 type Sbyte struct {
 	Sbyte int64 `json:"sbyte"`
 }
diff --git a/head/golang/test/inputs/json/samples/copy-with-property.json/default/quicktype.go b/head/golang/test/inputs/json/samples/copy-with-property.json/default/quicktype.go
new file mode 100644
index 0000000..a8dd007
--- /dev/null
+++ b/head/golang/test/inputs/json/samples/copy-with-property.json/default/quicktype.go
@@ -0,0 +1,24 @@
+// Code generated from JSON Schema using quicktype. DO NOT EDIT.
+// To parse and unparse this JSON data, add this code to your project and do:
+//
+//    topLevel, err := UnmarshalTopLevel(bytes)
+//    bytes, err = topLevel.Marshal()
+
+package main
+
+import "encoding/json"
+
+func UnmarshalTopLevel(data []byte) (TopLevel, error) {
+	var r TopLevel
+	err := json.Unmarshal(data, &r)
+	return r, err
+}
+
+func (r *TopLevel) Marshal() ([]byte, error) {
+	return json.Marshal(r)
+}
+
+type TopLevel struct {
+	CopyWith int64  `json:"copyWith"`
+	Name     string `json:"name"`
+}
diff --git a/head/golang/test/inputs/json/samples/objc-control-characters.json/default/quicktype.go b/head/golang/test/inputs/json/samples/objc-control-characters.json/default/quicktype.go
new file mode 100644
index 0000000..2eb363d
--- /dev/null
+++ b/head/golang/test/inputs/json/samples/objc-control-characters.json/default/quicktype.go
@@ -0,0 +1,43 @@
+// Code generated from JSON Schema using quicktype. DO NOT EDIT.
+// To parse and unparse this JSON data, add this code to your project and do:
+//
+//    topLevel, err := UnmarshalTopLevel(bytes)
+//    bytes, err = topLevel.Marshal()
+
+package main
+
+import "encoding/json"
+
+func UnmarshalTopLevel(data []byte) (TopLevel, error) {
+	var r TopLevel
+	err := json.Unmarshal(data, &r)
+	return r, err
+}
+
+func (r *TopLevel) Marshal() ([]byte, error) {
+	return json.Marshal(r)
+}
+
+type TopLevel struct {
+	Literal string  `json:"literal"`
+	Values  []Value `json:"values"`
+}
+
+type Value string
+
+const (
+	C0 Value = "c0\u0001\u001b\u001f"
+	C1 Value = "c1\u007f\u0080\u0085\u009f"
+)
+
+type invalidValue string
+func (x invalidValue) Error() string { return "invalid Value: " + string(x) }
+
+func (x *Value) UnmarshalJSON(data []byte) error {
+	var value string
+	if err := json.Unmarshal(data, &value); err != nil { return err }
+	switch Value(value) {
+	case C0, C1: *x = Value(value); return nil
+	}
+	return invalidValue(value)
+}
diff --git a/base/graphql-flow/test/inputs/graphql/github1.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github1.graphql/default/TopLevel.js
index 6b590a9..51e1098 100644
--- a/base/graphql-flow/test/inputs/graphql/github1.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github1.graphql/default/TopLevel.js
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-flow/test/inputs/graphql/github2.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github2.graphql/default/TopLevel.js
index 8a6c2b5..4e66b84 100644
--- a/base/graphql-flow/test/inputs/graphql/github2.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github2.graphql/default/TopLevel.js
@@ -158,7 +158,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-flow/test/inputs/graphql/github3.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github3.graphql/default/TopLevel.js
index 87dd299..a435f38 100644
--- a/base/graphql-flow/test/inputs/graphql/github3.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github3.graphql/default/TopLevel.js
@@ -166,7 +166,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-flow/test/inputs/graphql/github4.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github4.graphql/default/TopLevel.js
index fad899c..a92c640 100644
--- a/base/graphql-flow/test/inputs/graphql/github4.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github4.graphql/default/TopLevel.js
@@ -167,7 +167,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-flow/test/inputs/graphql/github5.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github5.graphql/default/TopLevel.js
index d45c3af..38b371e 100644
--- a/base/graphql-flow/test/inputs/graphql/github5.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github5.graphql/default/TopLevel.js
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-flow/test/inputs/graphql/github6.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github6.graphql/default/TopLevel.js
index f1587eb..59e92bf 100644
--- a/base/graphql-flow/test/inputs/graphql/github6.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github6.graphql/default/TopLevel.js
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-flow/test/inputs/graphql/github7.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github7.graphql/default/TopLevel.js
index d558b0e..d24e373 100644
--- a/base/graphql-flow/test/inputs/graphql/github7.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github7.graphql/default/TopLevel.js
@@ -170,7 +170,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-flow/test/inputs/graphql/github8.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github8.graphql/default/TopLevel.js
index 84314c1..e6e1dbf 100644
--- a/base/graphql-flow/test/inputs/graphql/github8.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github8.graphql/default/TopLevel.js
@@ -160,7 +160,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-flow/test/inputs/graphql/github9.graphql/default/TopLevel.js b/head/graphql-flow/test/inputs/graphql/github9.graphql/default/TopLevel.js
index eb54db1..27dc171 100644
--- a/base/graphql-flow/test/inputs/graphql/github9.graphql/default/TopLevel.js
+++ b/head/graphql-flow/test/inputs/graphql/github9.graphql/default/TopLevel.js
@@ -167,7 +167,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-javascript/test/inputs/graphql/github1.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github1.graphql/default/TopLevel.js
index cda4faa..725a829 100644
--- a/base/graphql-javascript/test/inputs/graphql/github1.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github1.graphql/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-javascript/test/inputs/graphql/github2.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github2.graphql/default/TopLevel.js
index d9e41f0..55ecc46 100644
--- a/base/graphql-javascript/test/inputs/graphql/github2.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github2.graphql/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-javascript/test/inputs/graphql/github3.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github3.graphql/default/TopLevel.js
index b890c1d..cc10a98 100644
--- a/base/graphql-javascript/test/inputs/graphql/github3.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github3.graphql/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-javascript/test/inputs/graphql/github4.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github4.graphql/default/TopLevel.js
index 48b05ea..5860617 100644
--- a/base/graphql-javascript/test/inputs/graphql/github4.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github4.graphql/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-javascript/test/inputs/graphql/github5.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github5.graphql/default/TopLevel.js
index 5a1e0ea..d487676 100644
--- a/base/graphql-javascript/test/inputs/graphql/github5.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github5.graphql/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-javascript/test/inputs/graphql/github6.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github6.graphql/default/TopLevel.js
index a592d63..44cc2dd 100644
--- a/base/graphql-javascript/test/inputs/graphql/github6.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github6.graphql/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-javascript/test/inputs/graphql/github7.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github7.graphql/default/TopLevel.js
index 9891b62..f133526 100644
--- a/base/graphql-javascript/test/inputs/graphql/github7.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github7.graphql/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-javascript/test/inputs/graphql/github8.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github8.graphql/default/TopLevel.js
index f280976..1491fd8 100644
--- a/base/graphql-javascript/test/inputs/graphql/github8.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github8.graphql/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-javascript/test/inputs/graphql/github9.graphql/default/TopLevel.js b/head/graphql-javascript/test/inputs/graphql/github9.graphql/default/TopLevel.js
index 1b9771a..ea7e284 100644
--- a/base/graphql-javascript/test/inputs/graphql/github9.graphql/default/TopLevel.js
+++ b/head/graphql-javascript/test/inputs/graphql/github9.graphql/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-typescript/test/inputs/graphql/github1.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github1.graphql/default/TopLevel.ts
index 2247bec..159c145 100644
--- a/base/graphql-typescript/test/inputs/graphql/github1.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github1.graphql/default/TopLevel.ts
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-typescript/test/inputs/graphql/github2.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github2.graphql/default/TopLevel.ts
index add79a2..f1e8a80 100644
--- a/base/graphql-typescript/test/inputs/graphql/github2.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github2.graphql/default/TopLevel.ts
@@ -158,7 +158,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-typescript/test/inputs/graphql/github3.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github3.graphql/default/TopLevel.ts
index b646fd3..616d91c 100644
--- a/base/graphql-typescript/test/inputs/graphql/github3.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github3.graphql/default/TopLevel.ts
@@ -163,7 +163,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-typescript/test/inputs/graphql/github4.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github4.graphql/default/TopLevel.ts
index 45d035c..1fec4c6 100644
--- a/base/graphql-typescript/test/inputs/graphql/github4.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github4.graphql/default/TopLevel.ts
@@ -164,7 +164,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-typescript/test/inputs/graphql/github5.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github5.graphql/default/TopLevel.ts
index 745f128..81441df 100644
--- a/base/graphql-typescript/test/inputs/graphql/github5.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github5.graphql/default/TopLevel.ts
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-typescript/test/inputs/graphql/github6.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github6.graphql/default/TopLevel.ts
index 1381ed1..3a83cda 100644
--- a/base/graphql-typescript/test/inputs/graphql/github6.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github6.graphql/default/TopLevel.ts
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-typescript/test/inputs/graphql/github7.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github7.graphql/default/TopLevel.ts
index d98de7a..747f382 100644
--- a/base/graphql-typescript/test/inputs/graphql/github7.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github7.graphql/default/TopLevel.ts
@@ -170,7 +170,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-typescript/test/inputs/graphql/github8.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github8.graphql/default/TopLevel.ts
index d8077bf..08ab69a 100644
--- a/base/graphql-typescript/test/inputs/graphql/github8.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github8.graphql/default/TopLevel.ts
@@ -158,7 +158,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/graphql-typescript/test/inputs/graphql/github9.graphql/default/TopLevel.ts b/head/graphql-typescript/test/inputs/graphql/github9.graphql/default/TopLevel.ts
index 410e31a..215f6b4 100644
--- a/base/graphql-typescript/test/inputs/graphql/github9.graphql/default/TopLevel.ts
+++ b/head/graphql-typescript/test/inputs/graphql/github9.graphql/default/TopLevel.ts
@@ -161,7 +161,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/haskell/test/inputs/json/priority/keywords.json/default/QuickType.hs b/head/haskell/test/inputs/json/priority/keywords.json/default/QuickType.hs
index c0a99ee..7c9af54 100644
--- a/base/haskell/test/inputs/json/priority/keywords.json/default/QuickType.hs
+++ b/head/haskell/test/inputs/json/priority/keywords.json/default/QuickType.hs
@@ -224,6 +224,7 @@ module QuickType
     , Rethrows (..)
     , Return (..)
     , RightClass (..)
+    , S (..)
     , Sbyte (..)
     , Sealed (..)
     , Sel (..)
@@ -1316,6 +1317,7 @@ data Obj4 = Obj4
     , rethrowsObj4 :: Rethrows
     , returnObj4 :: Return
     , rightObj4 :: RightClass
+    , sObj4 :: S
     , sbyteObj4 :: Sbyte
     , sealedObj4 :: Sealed
     , selObj4 :: Sel
@@ -1448,6 +1450,10 @@ data RightClass = RightClass
     { rightRightClass :: Int
     } deriving (Show)
 
+data S = S
+    { sS :: Int
+    } deriving (Show)
+
 data Sbyte = Sbyte
     { sbyteSbyte :: Int
     } deriving (Show)
@@ -4114,7 +4120,7 @@ instance FromJSON Protocol where
         <$> v .: "Protocol"
 
 instance ToJSON Obj4 where
-    toJSON (Obj4 dummyObj4 obj4SelfObj4 obj4ThenObj4 obj4TrueObj4 obj4TypeObj4 publicObj4 purpleTypeObj4 quicktypeObj4 raiseObj4 rangeObj4 readonlyObj4 refObj4 registerObj4 reinterpretCastObj4 repeatObj4 requireObj4 requiredObj4 requiresObj4 restrictObj4 retainObj4 rethrowsObj4 returnObj4 rightObj4 sbyteObj4 sealedObj4 selObj4 selectObj4 selfObj4 serializeObj4 setObj4 shortObj4 signedObj4 sizeofObj4 stackallocObj4 staticObj4 staticAssertObj4 staticCastObj4 strictfpObj4 stringObj4 structObj4 subscriptObj4 superObj4 switchObj4 symbolObj4 synchronizedObj4 systemObj4 templateObj4 thisObj4 threadLocalObj4 throwObj4 throwsObj4 toJSONObj4 topLevelObj4 transientObj4 trueObj4 tryObj4 typealiasObj4 typedefObj4 typeidObj4 typenameObj4 typeofObj4 uintObj4 ulongObj4 uncheckedObj4 undefinedObj4) =
+    toJSON (Obj4 dummyObj4 obj4SelfObj4 obj4ThenObj4 obj4TrueObj4 obj4TypeObj4 publicObj4 purpleTypeObj4 quicktypeObj4 raiseObj4 rangeObj4 readonlyObj4 refObj4 registerObj4 reinterpretCastObj4 repeatObj4 requireObj4 requiredObj4 requiresObj4 restrictObj4 retainObj4 rethrowsObj4 returnObj4 rightObj4 sObj4 sbyteObj4 sealedObj4 selObj4 selectObj4 selfObj4 serializeObj4 setObj4 shortObj4 signedObj4 sizeofObj4 stackallocObj4 staticObj4 staticAssertObj4 staticCastObj4 strictfpObj4 stringObj4 structObj4 subscriptObj4 superObj4 switchObj4 symbolObj4 synchronizedObj4 systemObj4 templateObj4 thisObj4 threadLocalObj4 throwObj4 throwsObj4 toJSONObj4 topLevelObj4 transientObj4 trueObj4 tryObj4 typealiasObj4 typedefObj4 typeidObj4 typenameObj4 typeofObj4 uintObj4 ulongObj4 uncheckedObj4 undefinedObj4) =
         object
         [ "dummy" .= dummyObj4
         , "self" .= obj4SelfObj4
@@ -4139,6 +4145,7 @@ instance ToJSON Obj4 where
         , "rethrows" .= rethrowsObj4
         , "return" .= returnObj4
         , "right" .= rightObj4
+        , "s" .= sObj4
         , "sbyte" .= sbyteObj4
         , "sealed" .= sealedObj4
         , "SEL" .= selObj4
@@ -4208,6 +4215,7 @@ instance FromJSON Obj4 where
         <*> v .: "rethrows"
         <*> v .: "return"
         <*> v .: "right"
+        <*> v .: "s"
         <*> v .: "sbyte"
         <*> v .: "sealed"
         <*> v .: "SEL"
@@ -4471,6 +4479,16 @@ instance FromJSON RightClass where
     parseJSON (Object v) = RightClass
         <$> v .: "right"
 
+instance ToJSON S where
+    toJSON (S sS) =
+        object
+        [ "s" .= sS
+        ]
+
+instance FromJSON S where
+    parseJSON (Object v) = S
+        <$> v .: "s"
+
 instance ToJSON Sbyte where
     toJSON (Sbyte sbyteSbyte) =
         object
diff --git a/head/haskell/test/inputs/json/samples/copy-with-property.json/default/QuickType.hs b/head/haskell/test/inputs/json/samples/copy-with-property.json/default/QuickType.hs
new file mode 100644
index 0000000..389000f
--- /dev/null
+++ b/head/haskell/test/inputs/json/samples/copy-with-property.json/default/QuickType.hs
@@ -0,0 +1,33 @@
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module QuickType
+    ( QuickType (..)
+    , decodeTopLevel
+    ) where
+
+import Data.Aeson
+import Data.Aeson.Types (emptyObject)
+import Data.ByteString.Lazy (ByteString)
+import Data.HashMap.Strict (HashMap)
+import Data.Text (Text)
+
+data QuickType = QuickType
+    { copyWithQuickType :: Int
+    , nameQuickType :: Text
+    } deriving (Show)
+
+decodeTopLevel :: ByteString -> Maybe QuickType
+decodeTopLevel = decode
+
+instance ToJSON QuickType where
+    toJSON (QuickType copyWithQuickType nameQuickType) =
+        object
+        [ "copyWith" .= copyWithQuickType
+        , "name" .= nameQuickType
+        ]
+
+instance FromJSON QuickType where
+    parseJSON (Object v) = QuickType
+        <$> v .: "copyWith"
+        <*> v .: "name"
diff --git a/head/haskell/test/inputs/json/samples/objc-control-characters.json/default/QuickType.hs b/head/haskell/test/inputs/json/samples/objc-control-characters.json/default/QuickType.hs
new file mode 100644
index 0000000..09e89fe
--- /dev/null
+++ b/head/haskell/test/inputs/json/samples/objc-control-characters.json/default/QuickType.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module QuickType
+    ( QuickType (..)
+    , ValueElement (..)
+    , decodeTopLevel
+    ) where
+
+import Data.Aeson
+import Data.Aeson.Types (emptyObject)
+import Data.ByteString.Lazy (ByteString)
+import Data.HashMap.Strict (HashMap)
+import Data.Text (Text)
+
+data QuickType = QuickType
+    { literalQuickType :: Text
+    , valuesQuickType :: [ValueElement]
+    } deriving (Show)
+
+data ValueElement
+    = C0ValueElement
+    | C1ValueElement
+    deriving (Show)
+
+decodeTopLevel :: ByteString -> Maybe QuickType
+decodeTopLevel = decode
+
+instance ToJSON QuickType where
+    toJSON (QuickType literalQuickType valuesQuickType) =
+        object
+        [ "literal" .= literalQuickType
+        , "values" .= valuesQuickType
+        ]
+
+instance FromJSON QuickType where
+    parseJSON (Object v) = QuickType
+        <$> v .: "literal"
+        <*> v .: "values"
+
+instance ToJSON ValueElement where
+    toJSON C0ValueElement = "c0\x0001\&\x001b\&\x001f\&"
+    toJSON C1ValueElement = "c1\x007f\&\x0080\&\x0085\&\x009f\&"
+
+instance FromJSON ValueElement where
+    parseJSON = withText "ValueElement" parseText
+        where
+            parseText "c0\x0001\&\x001b\&\x001f\&" = return C0ValueElement
+            parseText "c1\x007f\&\x0080\&\x0085\&\x009f\&" = return C1ValueElement
diff --git a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
index fb5fed6..d8860f6 100644
--- a/base/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
@@ -36,6 +36,7 @@ public class Obj4 {
     private Retain retain;
     private Rethrows rethrows;
     private Right right;
+    private S s;
     private Sbyte sbyte;
     private Sealed sealed;
     private Sel sel;
@@ -234,6 +235,11 @@ public class Obj4 {
     @JsonProperty("right")
     public void setRight(Right value) { this.right = value; }
 
+    @JsonProperty("s")
+    public S getS() { return s; }
+    @JsonProperty("s")
+    public void setS(S value) { this.s = value; }
+
     @JsonProperty("sbyte")
     public Sbyte getSbyte() { return sbyte; }
     @JsonProperty("sbyte")
diff --git a/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/S.java b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/S.java
new file mode 100644
index 0000000..d949cd5
--- /dev/null
+++ b/head/java/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/S.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class S {
+    private long s;
+
+    @JsonProperty("s")
+    public long getS() { return s; }
+    @JsonProperty("s")
+    public void setS(long value) { this.s = value; }
+}
diff --git a/head/java/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/Converter.java b/head/java/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/Converter.java
new file mode 100644
index 0000000..d243dc1
--- /dev/null
+++ b/head/java/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/Converter.java
@@ -0,0 +1,103 @@
+// To use this code, add the following Maven dependency to your project:
+//
+//
+//     com.fasterxml.jackson.core     : jackson-databind          : 2.9.0
+//     com.fasterxml.jackson.datatype : jackson-datatype-jsr310   : 2.9.0
+//
+// Import this package:
+//
+//     import io.quicktype.Converter;
+//
+// Then you can deserialize a JSON string with
+//
+//     TopLevel data = Converter.fromJsonString(jsonString);
+
+package io.quicktype;
+
+import java.io.IOException;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import java.util.*;
+import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
+import java.time.temporal.ChronoField;
+
+public class Converter {
+    // Date-time helpers
+
+    private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()
+            .appendOptional(DateTimeFormatter.ISO_DATE_TIME)
+            .appendOptional(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
+            .appendOptional(DateTimeFormatter.ISO_INSTANT)
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SX"))
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssX"))
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
+            .toFormatter()
+            .withZone(ZoneOffset.UTC);
+
+    public static OffsetDateTime parseDateTimeString(String str) {
+        return ZonedDateTime.from(Converter.DATE_TIME_FORMATTER.parse(str)).toOffsetDateTime();
+    }
+
+    private static final DateTimeFormatter TIME_FORMATTER = new DateTimeFormatterBuilder()
+            .appendOptional(DateTimeFormatter.ISO_TIME)
+            .appendOptional(DateTimeFormatter.ISO_OFFSET_TIME)
+            .parseDefaulting(ChronoField.YEAR, 2020)
+            .parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
+            .parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
+            .toFormatter()
+            .withZone(ZoneOffset.UTC);
+
+    public static OffsetTime parseTimeString(String str) {
+        return ZonedDateTime.from(Converter.TIME_FORMATTER.parse(str)).toOffsetDateTime().toOffsetTime();
+    }
+    // Serialize/deserialize helpers
+
+    public static TopLevel fromJsonString(String json) throws IOException {
+        return getObjectReader().readValue(json);
+    }
+
+    public static String toJsonString(TopLevel obj) throws JsonProcessingException {
+        return getObjectWriter().writeValueAsString(obj);
+    }
+
+    private static ObjectReader reader;
+    private static ObjectWriter writer;
+
+    private static void instantiateMapper() {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.findAndRegisterModules();
+        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        mapper.configure(DeserializationFeature.ACCEPT_FLOAT_AS_INT, false);
+        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+        SimpleModule module = new SimpleModule();
+        module.addDeserializer(OffsetDateTime.class, new JsonDeserializer<OffsetDateTime>() {
+            @Override
+            public OffsetDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+                String value = jsonParser.getText();
+                return Converter.parseDateTimeString(value);
+            }
+        });
+        mapper.registerModule(module);
+        reader = mapper.readerFor(TopLevel.class);
+        writer = mapper.writerFor(TopLevel.class);
+    }
+
+    private static ObjectReader getObjectReader() {
+        if (reader == null) instantiateMapper();
+        return reader;
+    }
+
+    private static ObjectWriter getObjectWriter() {
+        if (writer == null) instantiateMapper();
+        return writer;
+    }
+}
diff --git a/head/java/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/TopLevel.java b/head/java/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/TopLevel.java
new file mode 100644
index 0000000..6ee687e
--- /dev/null
+++ b/head/java/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/TopLevel.java
@@ -0,0 +1,18 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class TopLevel {
+    private long copyWith;
+    private String name;
+
+    @JsonProperty("copyWith")
+    public long getCopyWith() { return copyWith; }
+    @JsonProperty("copyWith")
+    public void setCopyWith(long value) { this.copyWith = value; }
+
+    @JsonProperty("name")
+    public String getName() { return name; }
+    @JsonProperty("name")
+    public void setName(String value) { this.name = value; }
+}
diff --git a/head/java/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Converter.java b/head/java/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Converter.java
new file mode 100644
index 0000000..cf0c886
--- /dev/null
+++ b/head/java/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Converter.java
@@ -0,0 +1,102 @@
+// To use this code, add the following Maven dependency to your project:
+//
+//
+//     com.fasterxml.jackson.core     : jackson-databind          : 2.9.0
+//     com.fasterxml.jackson.datatype : jackson-datatype-jsr310   : 2.9.0
+//
+// Import this package:
+//
+//     import io.quicktype.Converter;
+//
+// Then you can deserialize a JSON string with
+//
+//     TopLevel data = Converter.fromJsonString(jsonString);
+
+package io.quicktype;
+
+import java.io.IOException;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import java.util.*;
+import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
+import java.time.temporal.ChronoField;
+
+public class Converter {
+    // Date-time helpers
+
+    private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()
+            .appendOptional(DateTimeFormatter.ISO_DATE_TIME)
+            .appendOptional(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
+            .appendOptional(DateTimeFormatter.ISO_INSTANT)
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SX"))
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssX"))
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
+            .toFormatter()
+            .withZone(ZoneOffset.UTC);
+
+    public static OffsetDateTime parseDateTimeString(String str) {
+        return ZonedDateTime.from(Converter.DATE_TIME_FORMATTER.parse(str)).toOffsetDateTime();
+    }
+
+    private static final DateTimeFormatter TIME_FORMATTER = new DateTimeFormatterBuilder()
+            .appendOptional(DateTimeFormatter.ISO_TIME)
+            .appendOptional(DateTimeFormatter.ISO_OFFSET_TIME)
+            .parseDefaulting(ChronoField.YEAR, 2020)
+            .parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
+            .parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
+            .toFormatter()
+            .withZone(ZoneOffset.UTC);
+
+    public static OffsetTime parseTimeString(String str) {
+        return ZonedDateTime.from(Converter.TIME_FORMATTER.parse(str)).toOffsetDateTime().toOffsetTime();
+    }
+    // Serialize/deserialize helpers
+
+    public static TopLevel fromJsonString(String json) throws IOException {
+        return getObjectReader().readValue(json);
+    }
+
+    public static String toJsonString(TopLevel obj) throws JsonProcessingException {
+        return getObjectWriter().writeValueAsString(obj);
+    }
+
+    private static ObjectReader reader;
+    private static ObjectWriter writer;
+
+    private static void instantiateMapper() {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.findAndRegisterModules();
+        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+        SimpleModule module = new SimpleModule();
+        module.addDeserializer(OffsetDateTime.class, new JsonDeserializer<OffsetDateTime>() {
+            @Override
+            public OffsetDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+                String value = jsonParser.getText();
+                return Converter.parseDateTimeString(value);
+            }
+        });
+        mapper.registerModule(module);
+        reader = mapper.readerFor(TopLevel.class);
+        writer = mapper.writerFor(TopLevel.class);
+    }
+
+    private static ObjectReader getObjectReader() {
+        if (reader == null) instantiateMapper();
+        return reader;
+    }
+
+    private static ObjectWriter getObjectWriter() {
+        if (writer == null) instantiateMapper();
+        return writer;
+    }
+}
diff --git a/head/java/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/TopLevel.java b/head/java/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/TopLevel.java
new file mode 100644
index 0000000..447ada9
--- /dev/null
+++ b/head/java/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/TopLevel.java
@@ -0,0 +1,19 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+import java.util.List;
+
+public class TopLevel {
+    private String literal;
+    private List<Value> values;
+
+    @JsonProperty("literal")
+    public String getLiteral() { return literal; }
+    @JsonProperty("literal")
+    public void setLiteral(String value) { this.literal = value; }
+
+    @JsonProperty("values")
+    public List<Value> getValues() { return values; }
+    @JsonProperty("values")
+    public void setValues(List<Value> value) { this.values = value; }
+}
diff --git a/head/java/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Value.java b/head/java/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Value.java
new file mode 100644
index 0000000..9ec314e
--- /dev/null
+++ b/head/java/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Value.java
@@ -0,0 +1,24 @@
+package io.quicktype;
+
+import java.io.IOException;
+import com.fasterxml.jackson.annotation.*;
+
+public enum Value {
+    C0, C1;
+
+    @JsonValue
+    public String toValue() {
+        switch (this) {
+            case C0: return "c0";
+            case C1: return "c1\u0080\u0085\u009f";
+        }
+        return null;
+    }
+
+    @JsonCreator
+    public static Value forValue(String value) throws IOException {
+        if (value.equals("c0")) return C0;
+        if (value.equals("c1\u0080\u0085\u009f")) return C1;
+        throw new IOException("Cannot deserialize Value");
+    }
+}
diff --git a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
index fb5fed6..d8860f6 100644
--- a/base/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
@@ -36,6 +36,7 @@ public class Obj4 {
     private Retain retain;
     private Rethrows rethrows;
     private Right right;
+    private S s;
     private Sbyte sbyte;
     private Sealed sealed;
     private Sel sel;
@@ -234,6 +235,11 @@ public class Obj4 {
     @JsonProperty("right")
     public void setRight(Right value) { this.right = value; }
 
+    @JsonProperty("s")
+    public S getS() { return s; }
+    @JsonProperty("s")
+    public void setS(S value) { this.s = value; }
+
     @JsonProperty("sbyte")
     public Sbyte getSbyte() { return sbyte; }
     @JsonProperty("sbyte")
diff --git a/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/S.java b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/S.java
new file mode 100644
index 0000000..d949cd5
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/S.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class S {
+    private long s;
+
+    @JsonProperty("s")
+    public long getS() { return s; }
+    @JsonProperty("s")
+    public void setS(long value) { this.s = value; }
+}
diff --git a/head/java-datetime-legacy/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/Converter.java b/head/java-datetime-legacy/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/Converter.java
new file mode 100644
index 0000000..aeaa704
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/Converter.java
@@ -0,0 +1,124 @@
+// To use this code, add the following Maven dependency to your project:
+//
+//
+//     com.fasterxml.jackson.core     : jackson-databind          : 2.9.0
+//
+//
+// Import this package:
+//
+//     import io.quicktype.Converter;
+//
+// Then you can deserialize a JSON string with
+//
+//     TopLevel data = Converter.fromJsonString(jsonString);
+
+package io.quicktype;
+
+import java.io.IOException;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import java.util.*;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+
+public class Converter {
+    // Date-time helpers
+
+    private static final String[] DATE_TIME_FORMATS = {
+            "yyyy-MM-dd'T'HH:mm:ss.SX",
+            "yyyy-MM-dd'T'HH:mm:ss.S",
+            "yyyy-MM-dd'T'HH:mm:ssX",
+            "yyyy-MM-dd'T'HH:mm:ss",
+            "yyyy-MM-dd HH:mm:ss.SX",
+            "yyyy-MM-dd HH:mm:ss.S",
+            "yyyy-MM-dd HH:mm:ssX",
+            "yyyy-MM-dd HH:mm:ss",
+            "HH:mm:ss.SZ",
+            "HH:mm:ss.S",
+            "HH:mm:ssZ",
+            "HH:mm:ss",
+            "yyyy-MM-dd",
+    };
+
+    public static Date parseAllDateTimeString(String str) {
+        str = str.replaceFirst("(\\.\\d{3})\\d+", "$1");
+        for (String format : DATE_TIME_FORMATS) {
+            try {
+                return new SimpleDateFormat(format).parse(str);
+            } catch (Exception ex) {
+                // Ignored
+            }
+        }
+        return null;
+    }
+
+    public static String serializeDateTime(Date datetime) {
+        return new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ssZ").format(datetime);
+    }
+
+    public static String serializeDate(Date datetime) {
+        return new SimpleDateFormat("yyyy-MM-dd").format(datetime);
+    }
+
+    public static String serializeTime(Date datetime) {
+        return new SimpleDateFormat("hh:mm:ssZ").format(datetime);
+    }
+    // Serialize/deserialize helpers
+
+    public static TopLevel fromJsonString(String json) throws IOException {
+        return getObjectReader().readValue(json);
+    }
+
+    public static String toJsonString(TopLevel obj) throws JsonProcessingException {
+        return getObjectWriter().writeValueAsString(obj);
+    }
+
+    private static ObjectReader reader;
+    private static ObjectWriter writer;
+
+    private static void instantiateMapper() {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.findAndRegisterModules();
+        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        mapper.configure(DeserializationFeature.ACCEPT_FLOAT_AS_INT, false);
+        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+        SimpleModule module = new SimpleModule();
+        module.addDeserializer(Date.class, new JsonDeserializer<Date>() {
+            @Override
+            public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+                String value = jsonParser.getText();
+                return Converter.parseAllDateTimeString(value);
+            }
+        });
+        module.addDeserializer(Date.class, new JsonDeserializer<Date>() {
+            @Override
+            public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+                String value = jsonParser.getText();
+                return Converter.parseAllDateTimeString(value);
+            }
+        });
+        module.addDeserializer(Date.class, new JsonDeserializer<Date>() {
+            @Override
+            public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+                String value = jsonParser.getText();
+                return Converter.parseAllDateTimeString(value);
+            }
+        });
+        mapper.registerModule(module);
+        reader = mapper.readerFor(TopLevel.class);
+        writer = mapper.writerFor(TopLevel.class);
+    }
+
+    private static ObjectReader getObjectReader() {
+        if (reader == null) instantiateMapper();
+        return reader;
+    }
+
+    private static ObjectWriter getObjectWriter() {
+        if (writer == null) instantiateMapper();
+        return writer;
+    }
+}
diff --git a/head/java-datetime-legacy/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/TopLevel.java b/head/java-datetime-legacy/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/TopLevel.java
new file mode 100644
index 0000000..6ee687e
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/TopLevel.java
@@ -0,0 +1,18 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class TopLevel {
+    private long copyWith;
+    private String name;
+
+    @JsonProperty("copyWith")
+    public long getCopyWith() { return copyWith; }
+    @JsonProperty("copyWith")
+    public void setCopyWith(long value) { this.copyWith = value; }
+
+    @JsonProperty("name")
+    public String getName() { return name; }
+    @JsonProperty("name")
+    public void setName(String value) { this.name = value; }
+}
diff --git a/head/java-datetime-legacy/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Converter.java b/head/java-datetime-legacy/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Converter.java
new file mode 100644
index 0000000..322888e
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Converter.java
@@ -0,0 +1,123 @@
+// To use this code, add the following Maven dependency to your project:
+//
+//
+//     com.fasterxml.jackson.core     : jackson-databind          : 2.9.0
+//
+//
+// Import this package:
+//
+//     import io.quicktype.Converter;
+//
+// Then you can deserialize a JSON string with
+//
+//     TopLevel data = Converter.fromJsonString(jsonString);
+
+package io.quicktype;
+
+import java.io.IOException;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import java.util.*;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+
+public class Converter {
+    // Date-time helpers
+
+    private static final String[] DATE_TIME_FORMATS = {
+            "yyyy-MM-dd'T'HH:mm:ss.SX",
+            "yyyy-MM-dd'T'HH:mm:ss.S",
+            "yyyy-MM-dd'T'HH:mm:ssX",
+            "yyyy-MM-dd'T'HH:mm:ss",
+            "yyyy-MM-dd HH:mm:ss.SX",
+            "yyyy-MM-dd HH:mm:ss.S",
+            "yyyy-MM-dd HH:mm:ssX",
+            "yyyy-MM-dd HH:mm:ss",
+            "HH:mm:ss.SZ",
+            "HH:mm:ss.S",
+            "HH:mm:ssZ",
+            "HH:mm:ss",
+            "yyyy-MM-dd",
+    };
+
+    public static Date parseAllDateTimeString(String str) {
+        str = str.replaceFirst("(\\.\\d{3})\\d+", "$1");
+        for (String format : DATE_TIME_FORMATS) {
+            try {
+                return new SimpleDateFormat(format).parse(str);
+            } catch (Exception ex) {
+                // Ignored
+            }
+        }
+        return null;
+    }
+
+    public static String serializeDateTime(Date datetime) {
+        return new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ssZ").format(datetime);
+    }
+
+    public static String serializeDate(Date datetime) {
+        return new SimpleDateFormat("yyyy-MM-dd").format(datetime);
+    }
+
+    public static String serializeTime(Date datetime) {
+        return new SimpleDateFormat("hh:mm:ssZ").format(datetime);
+    }
+    // Serialize/deserialize helpers
+
+    public static TopLevel fromJsonString(String json) throws IOException {
+        return getObjectReader().readValue(json);
+    }
+
+    public static String toJsonString(TopLevel obj) throws JsonProcessingException {
+        return getObjectWriter().writeValueAsString(obj);
+    }
+
+    private static ObjectReader reader;
+    private static ObjectWriter writer;
+
+    private static void instantiateMapper() {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.findAndRegisterModules();
+        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+        SimpleModule module = new SimpleModule();
+        module.addDeserializer(Date.class, new JsonDeserializer<Date>() {
+            @Override
+            public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+                String value = jsonParser.getText();
+                return Converter.parseAllDateTimeString(value);
+            }
+        });
+        module.addDeserializer(Date.class, new JsonDeserializer<Date>() {
+            @Override
+            public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+                String value = jsonParser.getText();
+                return Converter.parseAllDateTimeString(value);
+            }
+        });
+        module.addDeserializer(Date.class, new JsonDeserializer<Date>() {
+            @Override
+            public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+                String value = jsonParser.getText();
+                return Converter.parseAllDateTimeString(value);
+            }
+        });
+        mapper.registerModule(module);
+        reader = mapper.readerFor(TopLevel.class);
+        writer = mapper.writerFor(TopLevel.class);
+    }
+
+    private static ObjectReader getObjectReader() {
+        if (reader == null) instantiateMapper();
+        return reader;
+    }
+
+    private static ObjectWriter getObjectWriter() {
+        if (writer == null) instantiateMapper();
+        return writer;
+    }
+}
diff --git a/head/java-datetime-legacy/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/TopLevel.java b/head/java-datetime-legacy/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/TopLevel.java
new file mode 100644
index 0000000..447ada9
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/TopLevel.java
@@ -0,0 +1,19 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+import java.util.List;
+
+public class TopLevel {
+    private String literal;
+    private List<Value> values;
+
+    @JsonProperty("literal")
+    public String getLiteral() { return literal; }
+    @JsonProperty("literal")
+    public void setLiteral(String value) { this.literal = value; }
+
+    @JsonProperty("values")
+    public List<Value> getValues() { return values; }
+    @JsonProperty("values")
+    public void setValues(List<Value> value) { this.values = value; }
+}
diff --git a/head/java-datetime-legacy/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Value.java b/head/java-datetime-legacy/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Value.java
new file mode 100644
index 0000000..9ec314e
--- /dev/null
+++ b/head/java-datetime-legacy/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Value.java
@@ -0,0 +1,24 @@
+package io.quicktype;
+
+import java.io.IOException;
+import com.fasterxml.jackson.annotation.*;
+
+public enum Value {
+    C0, C1;
+
+    @JsonValue
+    public String toValue() {
+        switch (this) {
+            case C0: return "c0";
+            case C1: return "c1\u0080\u0085\u009f";
+        }
+        return null;
+    }
+
+    @JsonCreator
+    public static Value forValue(String value) throws IOException {
+        if (value.equals("c0")) return C0;
+        if (value.equals("c1\u0080\u0085\u009f")) return C1;
+        throw new IOException("Cannot deserialize Value");
+    }
+}
diff --git a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
index fb5fed6..d8860f6 100644
--- a/base/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/Obj4.java
@@ -36,6 +36,7 @@ public class Obj4 {
     private Retain retain;
     private Rethrows rethrows;
     private Right right;
+    private S s;
     private Sbyte sbyte;
     private Sealed sealed;
     private Sel sel;
@@ -234,6 +235,11 @@ public class Obj4 {
     @JsonProperty("right")
     public void setRight(Right value) { this.right = value; }
 
+    @JsonProperty("s")
+    public S getS() { return s; }
+    @JsonProperty("s")
+    public void setS(S value) { this.s = value; }
+
     @JsonProperty("sbyte")
     public Sbyte getSbyte() { return sbyte; }
     @JsonProperty("sbyte")
diff --git a/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/S.java b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/S.java
new file mode 100644
index 0000000..d949cd5
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/priority/keywords.json/default/src/main/java/io/quicktype/S.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class S {
+    private long s;
+
+    @JsonProperty("s")
+    public long getS() { return s; }
+    @JsonProperty("s")
+    public void setS(long value) { this.s = value; }
+}
diff --git a/head/java-lombok/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/Converter.java b/head/java-lombok/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/Converter.java
new file mode 100644
index 0000000..d243dc1
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/Converter.java
@@ -0,0 +1,103 @@
+// To use this code, add the following Maven dependency to your project:
+//
+//
+//     com.fasterxml.jackson.core     : jackson-databind          : 2.9.0
+//     com.fasterxml.jackson.datatype : jackson-datatype-jsr310   : 2.9.0
+//
+// Import this package:
+//
+//     import io.quicktype.Converter;
+//
+// Then you can deserialize a JSON string with
+//
+//     TopLevel data = Converter.fromJsonString(jsonString);
+
+package io.quicktype;
+
+import java.io.IOException;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import java.util.*;
+import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
+import java.time.temporal.ChronoField;
+
+public class Converter {
+    // Date-time helpers
+
+    private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()
+            .appendOptional(DateTimeFormatter.ISO_DATE_TIME)
+            .appendOptional(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
+            .appendOptional(DateTimeFormatter.ISO_INSTANT)
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SX"))
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssX"))
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
+            .toFormatter()
+            .withZone(ZoneOffset.UTC);
+
+    public static OffsetDateTime parseDateTimeString(String str) {
+        return ZonedDateTime.from(Converter.DATE_TIME_FORMATTER.parse(str)).toOffsetDateTime();
+    }
+
+    private static final DateTimeFormatter TIME_FORMATTER = new DateTimeFormatterBuilder()
+            .appendOptional(DateTimeFormatter.ISO_TIME)
+            .appendOptional(DateTimeFormatter.ISO_OFFSET_TIME)
+            .parseDefaulting(ChronoField.YEAR, 2020)
+            .parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
+            .parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
+            .toFormatter()
+            .withZone(ZoneOffset.UTC);
+
+    public static OffsetTime parseTimeString(String str) {
+        return ZonedDateTime.from(Converter.TIME_FORMATTER.parse(str)).toOffsetDateTime().toOffsetTime();
+    }
+    // Serialize/deserialize helpers
+
+    public static TopLevel fromJsonString(String json) throws IOException {
+        return getObjectReader().readValue(json);
+    }
+
+    public static String toJsonString(TopLevel obj) throws JsonProcessingException {
+        return getObjectWriter().writeValueAsString(obj);
+    }
+
+    private static ObjectReader reader;
+    private static ObjectWriter writer;
+
+    private static void instantiateMapper() {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.findAndRegisterModules();
+        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        mapper.configure(DeserializationFeature.ACCEPT_FLOAT_AS_INT, false);
+        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+        SimpleModule module = new SimpleModule();
+        module.addDeserializer(OffsetDateTime.class, new JsonDeserializer<OffsetDateTime>() {
+            @Override
+            public OffsetDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+                String value = jsonParser.getText();
+                return Converter.parseDateTimeString(value);
+            }
+        });
+        mapper.registerModule(module);
+        reader = mapper.readerFor(TopLevel.class);
+        writer = mapper.writerFor(TopLevel.class);
+    }
+
+    private static ObjectReader getObjectReader() {
+        if (reader == null) instantiateMapper();
+        return reader;
+    }
+
+    private static ObjectWriter getObjectWriter() {
+        if (writer == null) instantiateMapper();
+        return writer;
+    }
+}
diff --git a/head/java-lombok/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/TopLevel.java b/head/java-lombok/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/TopLevel.java
new file mode 100644
index 0000000..6ee687e
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/samples/copy-with-property.json/default/src/main/java/io/quicktype/TopLevel.java
@@ -0,0 +1,18 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class TopLevel {
+    private long copyWith;
+    private String name;
+
+    @JsonProperty("copyWith")
+    public long getCopyWith() { return copyWith; }
+    @JsonProperty("copyWith")
+    public void setCopyWith(long value) { this.copyWith = value; }
+
+    @JsonProperty("name")
+    public String getName() { return name; }
+    @JsonProperty("name")
+    public void setName(String value) { this.name = value; }
+}
diff --git a/head/java-lombok/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Converter.java b/head/java-lombok/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Converter.java
new file mode 100644
index 0000000..cf0c886
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Converter.java
@@ -0,0 +1,102 @@
+// To use this code, add the following Maven dependency to your project:
+//
+//
+//     com.fasterxml.jackson.core     : jackson-databind          : 2.9.0
+//     com.fasterxml.jackson.datatype : jackson-datatype-jsr310   : 2.9.0
+//
+// Import this package:
+//
+//     import io.quicktype.Converter;
+//
+// Then you can deserialize a JSON string with
+//
+//     TopLevel data = Converter.fromJsonString(jsonString);
+
+package io.quicktype;
+
+import java.io.IOException;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import java.util.*;
+import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
+import java.time.temporal.ChronoField;
+
+public class Converter {
+    // Date-time helpers
+
+    private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()
+            .appendOptional(DateTimeFormatter.ISO_DATE_TIME)
+            .appendOptional(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
+            .appendOptional(DateTimeFormatter.ISO_INSTANT)
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SX"))
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssX"))
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
+            .toFormatter()
+            .withZone(ZoneOffset.UTC);
+
+    public static OffsetDateTime parseDateTimeString(String str) {
+        return ZonedDateTime.from(Converter.DATE_TIME_FORMATTER.parse(str)).toOffsetDateTime();
+    }
+
+    private static final DateTimeFormatter TIME_FORMATTER = new DateTimeFormatterBuilder()
+            .appendOptional(DateTimeFormatter.ISO_TIME)
+            .appendOptional(DateTimeFormatter.ISO_OFFSET_TIME)
+            .parseDefaulting(ChronoField.YEAR, 2020)
+            .parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
+            .parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
+            .toFormatter()
+            .withZone(ZoneOffset.UTC);
+
+    public static OffsetTime parseTimeString(String str) {
+        return ZonedDateTime.from(Converter.TIME_FORMATTER.parse(str)).toOffsetDateTime().toOffsetTime();
+    }
+    // Serialize/deserialize helpers
+
+    public static TopLevel fromJsonString(String json) throws IOException {
+        return getObjectReader().readValue(json);
+    }
+
+    public static String toJsonString(TopLevel obj) throws JsonProcessingException {
+        return getObjectWriter().writeValueAsString(obj);
+    }
+
+    private static ObjectReader reader;
+    private static ObjectWriter writer;
+
+    private static void instantiateMapper() {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.findAndRegisterModules();
+        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+        SimpleModule module = new SimpleModule();
+        module.addDeserializer(OffsetDateTime.class, new JsonDeserializer<OffsetDateTime>() {
+            @Override
+            public OffsetDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+                String value = jsonParser.getText();
+                return Converter.parseDateTimeString(value);
+            }
+        });
+        mapper.registerModule(module);
+        reader = mapper.readerFor(TopLevel.class);
+        writer = mapper.writerFor(TopLevel.class);
+    }
+
+    private static ObjectReader getObjectReader() {
+        if (reader == null) instantiateMapper();
+        return reader;
+    }
+
+    private static ObjectWriter getObjectWriter() {
+        if (writer == null) instantiateMapper();
+        return writer;
+    }
+}
diff --git a/head/java-lombok/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/TopLevel.java b/head/java-lombok/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/TopLevel.java
new file mode 100644
index 0000000..447ada9
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/TopLevel.java
@@ -0,0 +1,19 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+import java.util.List;
+
+public class TopLevel {
+    private String literal;
+    private List<Value> values;
+
+    @JsonProperty("literal")
+    public String getLiteral() { return literal; }
+    @JsonProperty("literal")
+    public void setLiteral(String value) { this.literal = value; }
+
+    @JsonProperty("values")
+    public List<Value> getValues() { return values; }
+    @JsonProperty("values")
+    public void setValues(List<Value> value) { this.values = value; }
+}
diff --git a/head/java-lombok/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Value.java b/head/java-lombok/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Value.java
new file mode 100644
index 0000000..9ec314e
--- /dev/null
+++ b/head/java-lombok/test/inputs/json/samples/objc-control-characters.json/default/src/main/java/io/quicktype/Value.java
@@ -0,0 +1,24 @@
+package io.quicktype;
+
+import java.io.IOException;
+import com.fasterxml.jackson.annotation.*;
+
+public enum Value {
+    C0, C1;
+
+    @JsonValue
+    public String toValue() {
+        switch (this) {
+            case C0: return "c0";
+            case C1: return "c1\u0080\u0085\u009f";
+        }
+        return null;
+    }
+
+    @JsonCreator
+    public static Value forValue(String value) throws IOException {
+        if (value.equals("c0")) return C0;
+        if (value.equals("c1\u0080\u0085\u009f")) return C1;
+        throw new IOException("Cannot deserialize Value");
+    }
+}
diff --git a/base/javascript/test/inputs/json/misc/00c36.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/00c36.json/default/TopLevel.js
index 1eae18f..4b2c4f9 100644
--- a/base/javascript/test/inputs/json/misc/00c36.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/00c36.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/00ec5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/00ec5.json/default/TopLevel.js
index 9e32023..3c9566f 100644
--- a/base/javascript/test/inputs/json/misc/00ec5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/00ec5.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/010b1.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/010b1.json/default/TopLevel.js
index e64053d..53b69dd 100644
--- a/base/javascript/test/inputs/json/misc/010b1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/010b1.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/016af.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/016af.json/default/TopLevel.js
index 7a0802e..7ee1afa 100644
--- a/base/javascript/test/inputs/json/misc/016af.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/016af.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/033b1.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/033b1.json/default/TopLevel.js
index c2bf8a2..89e1fca 100644
--- a/base/javascript/test/inputs/json/misc/033b1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/033b1.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/050b0.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/050b0.json/default/TopLevel.js
index 4e4979a..373b95b 100644
--- a/base/javascript/test/inputs/json/misc/050b0.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/050b0.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/06bee.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/06bee.json/default/TopLevel.js
index a609a36..828e6ba 100644
--- a/base/javascript/test/inputs/json/misc/06bee.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/06bee.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/07540.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/07540.json/default/TopLevel.js
index 13adf5a..afd2b5b 100644
--- a/base/javascript/test/inputs/json/misc/07540.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/07540.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/0779f.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/0779f.json/default/TopLevel.js
index 20164df..da96760 100644
--- a/base/javascript/test/inputs/json/misc/0779f.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/0779f.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/07c75.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/07c75.json/default/TopLevel.js
index 9e9c2c7..65d48cd 100644
--- a/base/javascript/test/inputs/json/misc/07c75.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/07c75.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/09f54.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/09f54.json/default/TopLevel.js
index 279fd7c..2843bb9 100644
--- a/base/javascript/test/inputs/json/misc/09f54.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/09f54.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/0a358.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/0a358.json/default/TopLevel.js
index 5ad9544..083096e 100644
--- a/base/javascript/test/inputs/json/misc/0a358.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/0a358.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/0a91a.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/0a91a.json/default/TopLevel.js
index 9e6fa01..5a7a624 100644
--- a/base/javascript/test/inputs/json/misc/0a91a.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/0a91a.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/0b91a.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/0b91a.json/default/TopLevel.js
index d5f970c..481f39f 100644
--- a/base/javascript/test/inputs/json/misc/0b91a.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/0b91a.json/default/TopLevel.js
@@ -130,7 +130,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/0cffa.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/0cffa.json/default/TopLevel.js
index 6a56fc1..47d638a 100644
--- a/base/javascript/test/inputs/json/misc/0cffa.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/0cffa.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/0e0c2.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/0e0c2.json/default/TopLevel.js
index 1c9593e..a9e3980 100644
--- a/base/javascript/test/inputs/json/misc/0e0c2.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/0e0c2.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/0fecf.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/0fecf.json/default/TopLevel.js
index 06084a6..cc99ab8 100644
--- a/base/javascript/test/inputs/json/misc/0fecf.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/0fecf.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/10be4.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/10be4.json/default/TopLevel.js
index d45deb4..27740c9 100644
--- a/base/javascript/test/inputs/json/misc/10be4.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/10be4.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/112b5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/112b5.json/default/TopLevel.js
index 0907cde..6a82d0d 100644
--- a/base/javascript/test/inputs/json/misc/112b5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/112b5.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/127a1.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/127a1.json/default/TopLevel.js
index 1b0abc9..e5db02c 100644
--- a/base/javascript/test/inputs/json/misc/127a1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/127a1.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/13d8d.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/13d8d.json/default/TopLevel.js
index f9bbbec..b40eb91 100644
--- a/base/javascript/test/inputs/json/misc/13d8d.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/13d8d.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/14d38.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/14d38.json/default/TopLevel.js
index e065e77..23d27bd 100644
--- a/base/javascript/test/inputs/json/misc/14d38.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/14d38.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/167d6.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/167d6.json/default/TopLevel.js
index c2bf8a2..89e1fca 100644
--- a/base/javascript/test/inputs/json/misc/167d6.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/167d6.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/16bc5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/16bc5.json/default/TopLevel.js
index afb1626..8797717 100644
--- a/base/javascript/test/inputs/json/misc/16bc5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/16bc5.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/176f1.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/176f1.json/default/TopLevel.js
index 3a8ec95..8bba887 100644
--- a/base/javascript/test/inputs/json/misc/176f1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/176f1.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/1a7f5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/1a7f5.json/default/TopLevel.js
index e64053d..53b69dd 100644
--- a/base/javascript/test/inputs/json/misc/1a7f5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/1a7f5.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/1b28c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/1b28c.json/default/TopLevel.js
index 7a0802e..7ee1afa 100644
--- a/base/javascript/test/inputs/json/misc/1b28c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/1b28c.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/1b409.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/1b409.json/default/TopLevel.js
index 7f3ffca..5110389 100644
--- a/base/javascript/test/inputs/json/misc/1b409.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/1b409.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/2465e.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/2465e.json/default/TopLevel.js
index 3bb6b93..376b62d 100644
--- a/base/javascript/test/inputs/json/misc/2465e.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/2465e.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/24f52.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/24f52.json/default/TopLevel.js
index 20164df..da96760 100644
--- a/base/javascript/test/inputs/json/misc/24f52.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/24f52.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/262f0.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/262f0.json/default/TopLevel.js
index f83a5b8..463d597 100644
--- a/base/javascript/test/inputs/json/misc/262f0.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/262f0.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/26b49.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/26b49.json/default/TopLevel.js
index 1e547a4..1450c3f 100644
--- a/base/javascript/test/inputs/json/misc/26b49.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/26b49.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/26c9c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/26c9c.json/default/TopLevel.js
index 98b4900..4d67ea6 100644
--- a/base/javascript/test/inputs/json/misc/26c9c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/26c9c.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/27332.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/27332.json/default/TopLevel.js
index bd50ce7..3f5ae6d 100644
--- a/base/javascript/test/inputs/json/misc/27332.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/27332.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/29f47.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/29f47.json/default/TopLevel.js
index 537f6fc..313fb29 100644
--- a/base/javascript/test/inputs/json/misc/29f47.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/29f47.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/2d4e2.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/2d4e2.json/default/TopLevel.js
index 90d7480..f8f6a2e 100644
--- a/base/javascript/test/inputs/json/misc/2d4e2.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/2d4e2.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/2df80.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/2df80.json/default/TopLevel.js
index 323ece6..cdbc58a 100644
--- a/base/javascript/test/inputs/json/misc/2df80.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/2df80.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/31189.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/31189.json/default/TopLevel.js
index e0faa70..843e350 100644
--- a/base/javascript/test/inputs/json/misc/31189.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/31189.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/32431.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/32431.json/default/TopLevel.js
index a5ba9e5..5a4dd01 100644
--- a/base/javascript/test/inputs/json/misc/32431.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/32431.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/32d5c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/32d5c.json/default/TopLevel.js
index 6c782c0..cd11a95 100644
--- a/base/javascript/test/inputs/json/misc/32d5c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/32d5c.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/337ed.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/337ed.json/default/TopLevel.js
index 4bf3dd5..7ca3440 100644
--- a/base/javascript/test/inputs/json/misc/337ed.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/337ed.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/33d2e.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/33d2e.json/default/TopLevel.js
index fab6bdf..3a01f28 100644
--- a/base/javascript/test/inputs/json/misc/33d2e.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/33d2e.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/34702.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/34702.json/default/TopLevel.js
index eb2719c..a9b3fbf 100644
--- a/base/javascript/test/inputs/json/misc/34702.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/34702.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/3536b.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/3536b.json/default/TopLevel.js
index 6a734f2..7b27507 100644
--- a/base/javascript/test/inputs/json/misc/3536b.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/3536b.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/3659d.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/3659d.json/default/TopLevel.js
index 7a0802e..7ee1afa 100644
--- a/base/javascript/test/inputs/json/misc/3659d.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/3659d.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/36d5d.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/36d5d.json/default/TopLevel.js
index 20164df..da96760 100644
--- a/base/javascript/test/inputs/json/misc/36d5d.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/36d5d.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/3a6b3.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/3a6b3.json/default/TopLevel.js
index 20164df..da96760 100644
--- a/base/javascript/test/inputs/json/misc/3a6b3.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/3a6b3.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/3e9a3.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/3e9a3.json/default/TopLevel.js
index 3a8ec95..8bba887 100644
--- a/base/javascript/test/inputs/json/misc/3e9a3.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/3e9a3.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/3f1ce.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/3f1ce.json/default/TopLevel.js
index 0ce7d8b..5a00c63 100644
--- a/base/javascript/test/inputs/json/misc/3f1ce.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/3f1ce.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/421d4.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/421d4.json/default/TopLevel.js
index 3087b59..76fd39f 100644
--- a/base/javascript/test/inputs/json/misc/421d4.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/421d4.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/437e7.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/437e7.json/default/TopLevel.js
index f7e3060..a3749cf 100644
--- a/base/javascript/test/inputs/json/misc/437e7.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/437e7.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/43970.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/43970.json/default/TopLevel.js
index 63e3bb0..8e2aeb1 100644
--- a/base/javascript/test/inputs/json/misc/43970.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/43970.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/43eaf.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/43eaf.json/default/TopLevel.js
index c2bf8a2..89e1fca 100644
--- a/base/javascript/test/inputs/json/misc/43eaf.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/43eaf.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/458db.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/458db.json/default/TopLevel.js
index a3db007..fe9dcb7 100644
--- a/base/javascript/test/inputs/json/misc/458db.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/458db.json/default/TopLevel.js
@@ -130,7 +130,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/4961a.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/4961a.json/default/TopLevel.js
index 7a0802e..7ee1afa 100644
--- a/base/javascript/test/inputs/json/misc/4961a.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/4961a.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/4a0d7.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/4a0d7.json/default/TopLevel.js
index 7a0802e..7ee1afa 100644
--- a/base/javascript/test/inputs/json/misc/4a0d7.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/4a0d7.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/4a455.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/4a455.json/default/TopLevel.js
index da2d3a9..d265bae 100644
--- a/base/javascript/test/inputs/json/misc/4a455.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/4a455.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/4c547.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/4c547.json/default/TopLevel.js
index afb1626..8797717 100644
--- a/base/javascript/test/inputs/json/misc/4c547.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/4c547.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/4d6fb.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/4d6fb.json/default/TopLevel.js
index 9381577..21d6b23 100644
--- a/base/javascript/test/inputs/json/misc/4d6fb.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/4d6fb.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/4e336.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/4e336.json/default/TopLevel.js
index 7a0802e..7ee1afa 100644
--- a/base/javascript/test/inputs/json/misc/4e336.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/4e336.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/54147.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/54147.json/default/TopLevel.js
index ce9bcb8..38c1e17 100644
--- a/base/javascript/test/inputs/json/misc/54147.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/54147.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/54d32.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/54d32.json/default/TopLevel.js
index dd62ee9..d952f1e 100644
--- a/base/javascript/test/inputs/json/misc/54d32.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/54d32.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/570ec.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/570ec.json/default/TopLevel.js
index 2c51906..b1bd14a 100644
--- a/base/javascript/test/inputs/json/misc/570ec.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/570ec.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/5dd0d.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/5dd0d.json/default/TopLevel.js
index 20164df..da96760 100644
--- a/base/javascript/test/inputs/json/misc/5dd0d.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/5dd0d.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/5eae5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/5eae5.json/default/TopLevel.js
index 8a34709..9abaa2b 100644
--- a/base/javascript/test/inputs/json/misc/5eae5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/5eae5.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/5eb20.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/5eb20.json/default/TopLevel.js
index 20164df..da96760 100644
--- a/base/javascript/test/inputs/json/misc/5eb20.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/5eb20.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/5f3a1.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/5f3a1.json/default/TopLevel.js
index c2bf8a2..89e1fca 100644
--- a/base/javascript/test/inputs/json/misc/5f3a1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/5f3a1.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/5f7fe.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/5f7fe.json/default/TopLevel.js
index 51f75c1..7e8756d 100644
--- a/base/javascript/test/inputs/json/misc/5f7fe.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/5f7fe.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/617e8.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/617e8.json/default/TopLevel.js
index 46af6d4..09c6030 100644
--- a/base/javascript/test/inputs/json/misc/617e8.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/617e8.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/61b66.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/61b66.json/default/TopLevel.js
index 20164df..da96760 100644
--- a/base/javascript/test/inputs/json/misc/61b66.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/61b66.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/6260a.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/6260a.json/default/TopLevel.js
index c2bf8a2..89e1fca 100644
--- a/base/javascript/test/inputs/json/misc/6260a.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/6260a.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/65dec.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/65dec.json/default/TopLevel.js
index daf81e6..390ffdd 100644
--- a/base/javascript/test/inputs/json/misc/65dec.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/65dec.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/66121.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/66121.json/default/TopLevel.js
index 897495b..cae28e1 100644
--- a/base/javascript/test/inputs/json/misc/66121.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/66121.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/6617c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/6617c.json/default/TopLevel.js
index d1a5b8f..504057f 100644
--- a/base/javascript/test/inputs/json/misc/6617c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/6617c.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/67c03.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/67c03.json/default/TopLevel.js
index c6ac0db..b633061 100644
--- a/base/javascript/test/inputs/json/misc/67c03.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/67c03.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/68c30.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/68c30.json/default/TopLevel.js
index 79ad361..b847771 100644
--- a/base/javascript/test/inputs/json/misc/68c30.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/68c30.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/6c155.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/6c155.json/default/TopLevel.js
index 9916bf3..d59fc42 100644
--- a/base/javascript/test/inputs/json/misc/6c155.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/6c155.json/default/TopLevel.js
@@ -130,7 +130,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/6de06.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/6de06.json/default/TopLevel.js
index 0dbcd3a..83856f6 100644
--- a/base/javascript/test/inputs/json/misc/6de06.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/6de06.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/6dec6.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/6dec6.json/default/TopLevel.js
index f16135c..a96a8ab 100644
--- a/base/javascript/test/inputs/json/misc/6dec6.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/6dec6.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/6eb00.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/6eb00.json/default/TopLevel.js
index edb0a76..7146a38 100644
--- a/base/javascript/test/inputs/json/misc/6eb00.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/6eb00.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/70c77.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/70c77.json/default/TopLevel.js
index c2bf8a2..89e1fca 100644
--- a/base/javascript/test/inputs/json/misc/70c77.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/70c77.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/734ad.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/734ad.json/default/TopLevel.js
index 8d56333..673e18b 100644
--- a/base/javascript/test/inputs/json/misc/734ad.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/734ad.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/75912.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/75912.json/default/TopLevel.js
index c2bf8a2..89e1fca 100644
--- a/base/javascript/test/inputs/json/misc/75912.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/75912.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/7681c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/7681c.json/default/TopLevel.js
index 9e1c26e..0a61b51 100644
--- a/base/javascript/test/inputs/json/misc/7681c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/7681c.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/76ae1.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/76ae1.json/default/TopLevel.js
index c6b5f7a..3d7f7fc 100644
--- a/base/javascript/test/inputs/json/misc/76ae1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/76ae1.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/77392.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/77392.json/default/TopLevel.js
index 27ee60a..4399f9f 100644
--- a/base/javascript/test/inputs/json/misc/77392.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/77392.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/7d397.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/7d397.json/default/TopLevel.js
index 4f6d19f..7e2532d 100644
--- a/base/javascript/test/inputs/json/misc/7d397.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/7d397.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/7d722.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/7d722.json/default/TopLevel.js
index 20164df..da96760 100644
--- a/base/javascript/test/inputs/json/misc/7d722.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/7d722.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/7df41.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/7df41.json/default/TopLevel.js
index 2a78be1..72704b6 100644
--- a/base/javascript/test/inputs/json/misc/7df41.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/7df41.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/7dfa6.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/7dfa6.json/default/TopLevel.js
index 7a0802e..7ee1afa 100644
--- a/base/javascript/test/inputs/json/misc/7dfa6.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/7dfa6.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/7eb30.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/7eb30.json/default/TopLevel.js
index 7b0c6cf..6816e49 100644
--- a/base/javascript/test/inputs/json/misc/7eb30.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/7eb30.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/7f568.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/7f568.json/default/TopLevel.js
index ad3307c..aff2371 100644
--- a/base/javascript/test/inputs/json/misc/7f568.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/7f568.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/7fbfb.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/7fbfb.json/default/TopLevel.js
index aaf3a07..4f77542 100644
--- a/base/javascript/test/inputs/json/misc/7fbfb.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/7fbfb.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/80aff.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/80aff.json/default/TopLevel.js
index 18f5b39..89a6010 100644
--- a/base/javascript/test/inputs/json/misc/80aff.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/80aff.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/82509.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/82509.json/default/TopLevel.js
index 5938abf..bd8181d 100644
--- a/base/javascript/test/inputs/json/misc/82509.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/82509.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/8592b.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/8592b.json/default/TopLevel.js
index 2f6c40e..fe36f3c 100644
--- a/base/javascript/test/inputs/json/misc/8592b.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/8592b.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/88130.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/88130.json/default/TopLevel.js
index afb1626..8797717 100644
--- a/base/javascript/test/inputs/json/misc/88130.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/88130.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/8a62c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/8a62c.json/default/TopLevel.js
index 7a0802e..7ee1afa 100644
--- a/base/javascript/test/inputs/json/misc/8a62c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/8a62c.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/908db.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/908db.json/default/TopLevel.js
index a52338b..8fb94d1 100644
--- a/base/javascript/test/inputs/json/misc/908db.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/908db.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/9617f.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/9617f.json/default/TopLevel.js
index c2bf8a2..89e1fca 100644
--- a/base/javascript/test/inputs/json/misc/9617f.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/9617f.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/96f7c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/96f7c.json/default/TopLevel.js
index 77acd06..3bb3064 100644
--- a/base/javascript/test/inputs/json/misc/96f7c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/96f7c.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/9847b.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/9847b.json/default/TopLevel.js
index 6b6a39c..ed30824 100644
--- a/base/javascript/test/inputs/json/misc/9847b.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/9847b.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/9929c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/9929c.json/default/TopLevel.js
index afb1626..8797717 100644
--- a/base/javascript/test/inputs/json/misc/9929c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/9929c.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/996bd.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/996bd.json/default/TopLevel.js
index 9b5b5ab..2eecf7e 100644
--- a/base/javascript/test/inputs/json/misc/996bd.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/996bd.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/9a503.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/9a503.json/default/TopLevel.js
index 4fa553a..289b33a 100644
--- a/base/javascript/test/inputs/json/misc/9a503.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/9a503.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/9ac3b.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/9ac3b.json/default/TopLevel.js
index c38f1ea..c725e75 100644
--- a/base/javascript/test/inputs/json/misc/9ac3b.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/9ac3b.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/9eed5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/9eed5.json/default/TopLevel.js
index 3f82480..3daf645 100644
--- a/base/javascript/test/inputs/json/misc/9eed5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/9eed5.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/a0496.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/a0496.json/default/TopLevel.js
index d4a2b7d..dedc844 100644
--- a/base/javascript/test/inputs/json/misc/a0496.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/a0496.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/a1eca.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/a1eca.json/default/TopLevel.js
index afb1626..8797717 100644
--- a/base/javascript/test/inputs/json/misc/a1eca.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/a1eca.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/a3d8c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/a3d8c.json/default/TopLevel.js
index ff1ec44..b981cae 100644
--- a/base/javascript/test/inputs/json/misc/a3d8c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/a3d8c.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/a45b0.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/a45b0.json/default/TopLevel.js
index e64053d..53b69dd 100644
--- a/base/javascript/test/inputs/json/misc/a45b0.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/a45b0.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/a71df.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/a71df.json/default/TopLevel.js
index 20164df..da96760 100644
--- a/base/javascript/test/inputs/json/misc/a71df.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/a71df.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/a9691.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/a9691.json/default/TopLevel.js
index c2bf8a2..89e1fca 100644
--- a/base/javascript/test/inputs/json/misc/a9691.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/a9691.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/ab0d1.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/ab0d1.json/default/TopLevel.js
index e64053d..53b69dd 100644
--- a/base/javascript/test/inputs/json/misc/ab0d1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/ab0d1.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/abb4b.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/abb4b.json/default/TopLevel.js
index 7a0802e..7ee1afa 100644
--- a/base/javascript/test/inputs/json/misc/abb4b.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/abb4b.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/ac944.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/ac944.json/default/TopLevel.js
index c2bf8a2..89e1fca 100644
--- a/base/javascript/test/inputs/json/misc/ac944.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/ac944.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/ad8be.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/ad8be.json/default/TopLevel.js
index d45deb4..27740c9 100644
--- a/base/javascript/test/inputs/json/misc/ad8be.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/ad8be.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/ae7f0.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/ae7f0.json/default/TopLevel.js
index b715117..b1f12f9 100644
--- a/base/javascript/test/inputs/json/misc/ae7f0.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/ae7f0.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/ae9ca.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/ae9ca.json/default/TopLevel.js
index c649d88..399c60e 100644
--- a/base/javascript/test/inputs/json/misc/ae9ca.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/ae9ca.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/af2d1.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/af2d1.json/default/TopLevel.js
index 9d7e65f..7fbbeb2 100644
--- a/base/javascript/test/inputs/json/misc/af2d1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/af2d1.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/b4865.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/b4865.json/default/TopLevel.js
index 5586f38..5a5f316 100644
--- a/base/javascript/test/inputs/json/misc/b4865.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/b4865.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/b6f2c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/b6f2c.json/default/TopLevel.js
index 7a0802e..7ee1afa 100644
--- a/base/javascript/test/inputs/json/misc/b6f2c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/b6f2c.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/b6fe5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/b6fe5.json/default/TopLevel.js
index 7120acd..4bdc039 100644
--- a/base/javascript/test/inputs/json/misc/b6fe5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/b6fe5.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/b9f64.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/b9f64.json/default/TopLevel.js
index d19e1b4..a049de5 100644
--- a/base/javascript/test/inputs/json/misc/b9f64.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/b9f64.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/bb1ec.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/bb1ec.json/default/TopLevel.js
index 7a0802e..7ee1afa 100644
--- a/base/javascript/test/inputs/json/misc/bb1ec.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/bb1ec.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/be234.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/be234.json/default/TopLevel.js
index f368bb2..13394f6 100644
--- a/base/javascript/test/inputs/json/misc/be234.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/be234.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/c0356.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/c0356.json/default/TopLevel.js
index 87bdad7..18bdd7d 100644
--- a/base/javascript/test/inputs/json/misc/c0356.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/c0356.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/c0a3a.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/c0a3a.json/default/TopLevel.js
index 20164df..da96760 100644
--- a/base/javascript/test/inputs/json/misc/c0a3a.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/c0a3a.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/c3303.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/c3303.json/default/TopLevel.js
index 9d3f83b..642a6e1 100644
--- a/base/javascript/test/inputs/json/misc/c3303.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/c3303.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/c6cfd.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/c6cfd.json/default/TopLevel.js
index bcb31f7..5bce032 100644
--- a/base/javascript/test/inputs/json/misc/c6cfd.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/c6cfd.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/c8c7e.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/c8c7e.json/default/TopLevel.js
index 21f2218..b9db820 100644
--- a/base/javascript/test/inputs/json/misc/c8c7e.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/c8c7e.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/cb0cc.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/cb0cc.json/default/TopLevel.js
index 2e9ec77..ed3e4af 100644
--- a/base/javascript/test/inputs/json/misc/cb0cc.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/cb0cc.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/cb81e.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/cb81e.json/default/TopLevel.js
index e751afc..93fec62 100644
--- a/base/javascript/test/inputs/json/misc/cb81e.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/cb81e.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/ccd18.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/ccd18.json/default/TopLevel.js
index 20164df..da96760 100644
--- a/base/javascript/test/inputs/json/misc/ccd18.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/ccd18.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/cd238.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/cd238.json/default/TopLevel.js
index 20164df..da96760 100644
--- a/base/javascript/test/inputs/json/misc/cd238.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/cd238.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/cd463.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/cd463.json/default/TopLevel.js
index c2bf8a2..89e1fca 100644
--- a/base/javascript/test/inputs/json/misc/cd463.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/cd463.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/cda6c.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/cda6c.json/default/TopLevel.js
index 03d1c1d..56080be 100644
--- a/base/javascript/test/inputs/json/misc/cda6c.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/cda6c.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/cf0d8.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/cf0d8.json/default/TopLevel.js
index afb1626..8797717 100644
--- a/base/javascript/test/inputs/json/misc/cf0d8.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/cf0d8.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/cfbce.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/cfbce.json/default/TopLevel.js
index c2bf8a2..89e1fca 100644
--- a/base/javascript/test/inputs/json/misc/cfbce.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/cfbce.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/d0908.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/d0908.json/default/TopLevel.js
index 7a0802e..7ee1afa 100644
--- a/base/javascript/test/inputs/json/misc/d0908.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/d0908.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/d23d5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/d23d5.json/default/TopLevel.js
index 81e452e..6ea2cd8 100644
--- a/base/javascript/test/inputs/json/misc/d23d5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/d23d5.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/dbfb3.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/dbfb3.json/default/TopLevel.js
index 7368b7f..f3d5f27 100644
--- a/base/javascript/test/inputs/json/misc/dbfb3.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/dbfb3.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/dc44f.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/dc44f.json/default/TopLevel.js
index f2e6090..329bbfc 100644
--- a/base/javascript/test/inputs/json/misc/dc44f.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/dc44f.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/dd1ce.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/dd1ce.json/default/TopLevel.js
index f2e6090..329bbfc 100644
--- a/base/javascript/test/inputs/json/misc/dd1ce.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/dd1ce.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/dec3a.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/dec3a.json/default/TopLevel.js
index 7747c5e..c49d1f6 100644
--- a/base/javascript/test/inputs/json/misc/dec3a.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/dec3a.json/default/TopLevel.js
@@ -130,7 +130,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/df957.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/df957.json/default/TopLevel.js
index afb1626..8797717 100644
--- a/base/javascript/test/inputs/json/misc/df957.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/df957.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/e0ac7.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/e0ac7.json/default/TopLevel.js
index d4188ed..47d3552 100644
--- a/base/javascript/test/inputs/json/misc/e0ac7.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/e0ac7.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/e2915.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/e2915.json/default/TopLevel.js
index 65548c1..de5c087 100644
--- a/base/javascript/test/inputs/json/misc/e2915.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/e2915.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/e2a58.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/e2a58.json/default/TopLevel.js
index 0284dca..b6e2a6c 100644
--- a/base/javascript/test/inputs/json/misc/e2a58.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/e2a58.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/e324e.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/e324e.json/default/TopLevel.js
index 0cb2754..744eeb6 100644
--- a/base/javascript/test/inputs/json/misc/e324e.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/e324e.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/e53b5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/e53b5.json/default/TopLevel.js
index e5f4f15..8b8220e 100644
--- a/base/javascript/test/inputs/json/misc/e53b5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/e53b5.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/e64a0.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/e64a0.json/default/TopLevel.js
index 0907cde..6a82d0d 100644
--- a/base/javascript/test/inputs/json/misc/e64a0.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/e64a0.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/e8a0b.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/e8a0b.json/default/TopLevel.js
index e64053d..53b69dd 100644
--- a/base/javascript/test/inputs/json/misc/e8a0b.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/e8a0b.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/e8b04.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/e8b04.json/default/TopLevel.js
index c7533ba..edc9042 100644
--- a/base/javascript/test/inputs/json/misc/e8b04.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/e8b04.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/ed095.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/ed095.json/default/TopLevel.js
index d549e25..d21c253 100644
--- a/base/javascript/test/inputs/json/misc/ed095.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/ed095.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/f22f5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/f22f5.json/default/TopLevel.js
index ad65f03..fecd30e 100644
--- a/base/javascript/test/inputs/json/misc/f22f5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/f22f5.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/f3139.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/f3139.json/default/TopLevel.js
index 6b6a39c..ed30824 100644
--- a/base/javascript/test/inputs/json/misc/f3139.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/f3139.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/f3edf.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/f3edf.json/default/TopLevel.js
index e64053d..53b69dd 100644
--- a/base/javascript/test/inputs/json/misc/f3edf.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/f3edf.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/f466a.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/f466a.json/default/TopLevel.js
index e64053d..53b69dd 100644
--- a/base/javascript/test/inputs/json/misc/f466a.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/f466a.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/f6a65.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/f6a65.json/default/TopLevel.js
index ccae6a8..edfd4a6 100644
--- a/base/javascript/test/inputs/json/misc/f6a65.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/f6a65.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/f74d5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/f74d5.json/default/TopLevel.js
index 48fadf8..b17e3f0 100644
--- a/base/javascript/test/inputs/json/misc/f74d5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/f74d5.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/f82d9.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/f82d9.json/default/TopLevel.js
index 59f4135..9e4fb5d 100644
--- a/base/javascript/test/inputs/json/misc/f82d9.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/f82d9.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/f974d.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/f974d.json/default/TopLevel.js
index 6cf685b..fb5d5ee 100644
--- a/base/javascript/test/inputs/json/misc/f974d.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/f974d.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/faff5.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/faff5.json/default/TopLevel.js
index 9239186..1279f15 100644
--- a/base/javascript/test/inputs/json/misc/faff5.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/faff5.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/fcca3.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/fcca3.json/default/TopLevel.js
index 9c92f34..7ecd4eb 100644
--- a/base/javascript/test/inputs/json/misc/fcca3.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/fcca3.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/misc/fd329.json/default/TopLevel.js b/head/javascript/test/inputs/json/misc/fd329.json/default/TopLevel.js
index 279fd7c..2843bb9 100644
--- a/base/javascript/test/inputs/json/misc/fd329.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/misc/fd329.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/blns-object.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/blns-object.json/default/TopLevel.js
index 29e830b..6882164 100644
--- a/base/javascript/test/inputs/json/priority/blns-object.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/blns-object.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/bug2037.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug2037.json/default/TopLevel.js
index e84c605..ec05c5f 100644
--- a/base/javascript/test/inputs/json/priority/bug2037.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug2037.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/bug2521.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug2521.json/default/TopLevel.js
index 052eabb..9d60567 100644
--- a/base/javascript/test/inputs/json/priority/bug2521.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug2521.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/bug2590.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug2590.json/default/TopLevel.js
index 41c99a0..5875410 100644
--- a/base/javascript/test/inputs/json/priority/bug2590.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug2590.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/bug2663.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug2663.json/default/TopLevel.js
index c9e36dc..8b9499e 100644
--- a/base/javascript/test/inputs/json/priority/bug2663.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug2663.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/bug2793.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug2793.json/default/TopLevel.js
index 1811c1d..fac9b8e 100644
--- a/base/javascript/test/inputs/json/priority/bug2793.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug2793.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/bug427.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug427.json/default/TopLevel.js
index be4743b..9006bd4 100644
--- a/base/javascript/test/inputs/json/priority/bug427.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug427.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/bug790.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug790.json/default/TopLevel.js
index 3718ca1..2dd183e 100644
--- a/base/javascript/test/inputs/json/priority/bug790.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug790.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/bug855-short.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug855-short.json/default/TopLevel.js
index 60500f3..7d6cf13 100644
--- a/base/javascript/test/inputs/json/priority/bug855-short.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug855-short.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/bug863.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/bug863.json/default/TopLevel.js
index eb29de3..cc6a9e5 100644
--- a/base/javascript/test/inputs/json/priority/bug863.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/bug863.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/coin-pairs.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/coin-pairs.json/default/TopLevel.js
index 14a4e26..0ca4b6d 100644
--- a/base/javascript/test/inputs/json/priority/coin-pairs.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/coin-pairs.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/combinations1.json/converters-top-level--67aa452ed509/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations1.json/converters-top-level--67aa452ed509/TopLevel.js
index 05a2053..88d564a 100644
--- a/base/javascript/test/inputs/json/priority/combinations1.json/converters-top-level--67aa452ed509/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations1.json/converters-top-level--67aa452ed509/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/combinations1.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations1.json/default/TopLevel.js
index 05a2053..88d564a 100644
--- a/base/javascript/test/inputs/json/priority/combinations1.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations1.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
index f821b60..44655c4 100644
--- a/base/javascript/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/combinations2.json/converters-top-level--67aa452ed509/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations2.json/converters-top-level--67aa452ed509/TopLevel.js
index 7608c68..8e794cc 100644
--- a/base/javascript/test/inputs/json/priority/combinations2.json/converters-top-level--67aa452ed509/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations2.json/converters-top-level--67aa452ed509/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/combinations2.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations2.json/default/TopLevel.js
index 7608c68..8e794cc 100644
--- a/base/javascript/test/inputs/json/priority/combinations2.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations2.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
index 0ab0ca9..3d12c61 100644
--- a/base/javascript/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/combinations3.json/converters-top-level--67aa452ed509/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations3.json/converters-top-level--67aa452ed509/TopLevel.js
index 8485c3e..fb2f1c3 100644
--- a/base/javascript/test/inputs/json/priority/combinations3.json/converters-top-level--67aa452ed509/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations3.json/converters-top-level--67aa452ed509/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/combinations3.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations3.json/default/TopLevel.js
index 8485c3e..fb2f1c3 100644
--- a/base/javascript/test/inputs/json/priority/combinations3.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations3.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
index 4d6733e..624456d 100644
--- a/base/javascript/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/combinations4.json/converters-top-level--67aa452ed509/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations4.json/converters-top-level--67aa452ed509/TopLevel.js
index c952b8d..ca6ffde 100644
--- a/base/javascript/test/inputs/json/priority/combinations4.json/converters-top-level--67aa452ed509/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations4.json/converters-top-level--67aa452ed509/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/combinations4.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations4.json/default/TopLevel.js
index c952b8d..ca6ffde 100644
--- a/base/javascript/test/inputs/json/priority/combinations4.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations4.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js b/head/javascript/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
index ea2b74f..4f8e19a 100644
--- a/base/javascript/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/combined-enum.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/combined-enum.json/default/TopLevel.js
index e5c755c..e6e4381 100644
--- a/base/javascript/test/inputs/json/priority/combined-enum.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/combined-enum.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/direct-recursive.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/direct-recursive.json/default/TopLevel.js
index 892673a..8ecc199 100644
--- a/base/javascript/test/inputs/json/priority/direct-recursive.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/direct-recursive.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/empty-enum.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/empty-enum.json/default/TopLevel.js
index f2cccf7..e092e28 100644
--- a/base/javascript/test/inputs/json/priority/empty-enum.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/empty-enum.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/identifiers.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/identifiers.json/default/TopLevel.js
index f5979d9..9df1554 100644
--- a/base/javascript/test/inputs/json/priority/identifiers.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/identifiers.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.js
index dafae68..658f4ef 100644
--- a/base/javascript/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.js
index bbf1861..ca3c226 100644
--- a/base/javascript/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/keywords.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/keywords.json/default/TopLevel.js
index a07148f..1f5ef6b 100644
--- a/base/javascript/test/inputs/json/priority/keywords.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/keywords.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
@@ -1012,6 +1012,7 @@ const typeMap = {
         { json: "rethrows", js: "rethrows", typ: r("Rethrows") },
         { json: "return", js: "return", typ: r("Return") },
         { json: "right", js: "right", typ: r("Right") },
+        { json: "s", js: "s", typ: r("S") },
         { json: "sbyte", js: "sbyte", typ: r("Sbyte") },
         { json: "sealed", js: "sealed", typ: r("Sealed") },
         { json: "select", js: "select", typ: r("Select") },
@@ -1119,6 +1120,9 @@ const typeMap = {
     "Right": o([
         { json: "right", js: "right", typ: i(0) },
     ], false),
+    "S": o([
+        { json: "s", js: "s", typ: i(0) },
+    ], false),
     "Sbyte": o([
         { json: "sbyte", js: "sbyte", typ: i(0) },
     ], false),
diff --git a/base/javascript/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.js
index 372328c..9ea4f82 100644
--- a/base/javascript/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/list.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/list.json/default/TopLevel.js
index f3d2721..ca51b35 100644
--- a/base/javascript/test/inputs/json/priority/list.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/list.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/name-style.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/name-style.json/default/TopLevel.js
index d60d428..125a6f4 100644
--- a/base/javascript/test/inputs/json/priority/name-style.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/name-style.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/nbl-stats.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/nbl-stats.json/default/TopLevel.js
index 9b555c5..e7ab3c3 100644
--- a/base/javascript/test/inputs/json/priority/nbl-stats.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/nbl-stats.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/nested-objects.json/converters-all-objects--3a443babd1cb/TopLevel.js b/head/javascript/test/inputs/json/priority/nested-objects.json/converters-all-objects--3a443babd1cb/TopLevel.js
index 222f6ec..cfd27e9 100644
--- a/base/javascript/test/inputs/json/priority/nested-objects.json/converters-all-objects--3a443babd1cb/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/nested-objects.json/converters-all-objects--3a443babd1cb/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/nested-objects.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/nested-objects.json/default/TopLevel.js
index 222f6ec..cfd27e9 100644
--- a/base/javascript/test/inputs/json/priority/nested-objects.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/nested-objects.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/no-classes.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/no-classes.json/default/TopLevel.js
index 597cc0e..0616383 100644
--- a/base/javascript/test/inputs/json/priority/no-classes.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/no-classes.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.js
index f21c58c..c5d2a33 100644
--- a/base/javascript/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/number-map.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/number-map.json/default/TopLevel.js
index b4c8d4b..785b69f 100644
--- a/base/javascript/test/inputs/json/priority/number-map.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/number-map.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/omit-empty.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/omit-empty.json/default/TopLevel.js
index f106da1..29d5144 100644
--- a/base/javascript/test/inputs/json/priority/omit-empty.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/omit-empty.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/optional-union.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/optional-union.json/default/TopLevel.js
index 4be82c8..df58b18 100644
--- a/base/javascript/test/inputs/json/priority/optional-union.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/optional-union.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.js
index cd66066..459f483 100644
--- a/base/javascript/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/php-validation.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/php-validation.json/default/TopLevel.js
index 86467b0..44deb53 100644
--- a/base/javascript/test/inputs/json/priority/php-validation.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/php-validation.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/recursive.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/recursive.json/default/TopLevel.js
index 04ade36..7c73e2f 100644
--- a/base/javascript/test/inputs/json/priority/recursive.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/recursive.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.js
index cbcccb7..25ceaf8 100644
--- a/base/javascript/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.js
index e1fc92a..3cfd3d7 100644
--- a/base/javascript/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/unions.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/unions.json/default/TopLevel.js
index 025854b..2b9d888 100644
--- a/base/javascript/test/inputs/json/priority/unions.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/unions.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/url.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/url.json/default/TopLevel.js
index cb165e9..41482d3 100644
--- a/base/javascript/test/inputs/json/priority/url.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/url.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/priority/uuids.json/default/TopLevel.js b/head/javascript/test/inputs/json/priority/uuids.json/default/TopLevel.js
index 9131b1f..dbd1453 100644
--- a/base/javascript/test/inputs/json/priority/uuids.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/priority/uuids.json/default/TopLevel.js
@@ -130,7 +130,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.js
index 6cf685b..fb5d5ee 100644
--- a/base/javascript/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/javascript/test/inputs/json/samples/copy-with-property.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/copy-with-property.json/default/TopLevel.js
new file mode 100644
index 0000000..b2d0da1
--- /dev/null
+++ b/head/javascript/test/inputs/json/samples/copy-with-property.json/default/TopLevel.js
@@ -0,0 +1,204 @@
+// To parse this data:
+//
+//   const Convert = require("./TopLevel");
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+function toTopLevel(json) {
+    return cast(JSON.parse(json), r("TopLevel"));
+}
+
+function topLevelToJson(value) {
+    return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+}
+
+function invalidValue(typ, val, key, parent = '') {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ) {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ) {
+    if (typ.jsonToJS === undefined) {
+        const map = {};
+        typ.props.forEach((p) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ) {
+    if (typ.jsToJSON === undefined) {
+        const map = {};
+        typ.props.forEach((p) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val, typ, getProps, key = '', parent = '') {
+    function transformPrimitive(typ, val) {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs, val) {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases, val) {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ, val) {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val) {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props, additional, val) {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast(val, typ) {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast(val, typ) {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ) {
+    return { literal: typ };
+}
+
+function a(typ) {
+    return { arrayItems: typ };
+}
+
+function i(typ) {
+    return { integer: typ };
+}
+
+function p(pattern) {
+    return { pattern };
+}
+
+function s(typ, min, max) {
+    return { string: typ, min, max };
+}
+
+function n(typ, min, max) {
+    return { number: typ, min, max };
+}
+
+function u(...typs) {
+    return { unionMembers: typs };
+}
+
+function o(props, additional) {
+    return { props, additional };
+}
+
+function m(additional) {
+    const props = [];
+    return { props, additional };
+}
+
+function r(name) {
+    return { ref: name };
+}
+
+const typeMap = {
+    "TopLevel": o([
+        { json: "copyWith", js: "copyWith", typ: i(0) },
+        { json: "name", js: "name", typ: "" },
+    ], false),
+};
+
+module.exports = {
+    "topLevelToJson": topLevelToJson,
+    "toTopLevel": toTopLevel,
+};
diff --git a/base/javascript/test/inputs/json/samples/getting-started.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/getting-started.json/default/TopLevel.js
index e860f8d..293caf7 100644
--- a/base/javascript/test/inputs/json/samples/getting-started.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/getting-started.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/samples/github-events.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/github-events.json/default/TopLevel.js
index 7344cc2..d2bd14b 100644
--- a/base/javascript/test/inputs/json/samples/github-events.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/github-events.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.js
index 4b0251d..fe3a002 100644
--- a/base/javascript/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/samples/null-safe.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/null-safe.json/default/TopLevel.js
index b3e2d3f..83064a1 100644
--- a/base/javascript/test/inputs/json/samples/null-safe.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/null-safe.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/javascript/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.js
new file mode 100644
index 0000000..9c0ec2e
--- /dev/null
+++ b/head/javascript/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.js
@@ -0,0 +1,208 @@
+// To parse this data:
+//
+//   const Convert = require("./TopLevel");
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+function toTopLevel(json) {
+    return cast(JSON.parse(json), r("TopLevel"));
+}
+
+function topLevelToJson(value) {
+    return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+}
+
+function invalidValue(typ, val, key, parent = '') {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ) {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ) {
+    if (typ.jsonToJS === undefined) {
+        const map = {};
+        typ.props.forEach((p) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ) {
+    if (typ.jsToJSON === undefined) {
+        const map = {};
+        typ.props.forEach((p) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val, typ, getProps, key = '', parent = '') {
+    function transformPrimitive(typ, val) {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs, val) {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases, val) {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ, val) {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val) {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props, additional, val) {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast(val, typ) {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast(val, typ) {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ) {
+    return { literal: typ };
+}
+
+function a(typ) {
+    return { arrayItems: typ };
+}
+
+function i(typ) {
+    return { integer: typ };
+}
+
+function p(pattern) {
+    return { pattern };
+}
+
+function s(typ, min, max) {
+    return { string: typ, min, max };
+}
+
+function n(typ, min, max) {
+    return { number: typ, min, max };
+}
+
+function u(...typs) {
+    return { unionMembers: typs };
+}
+
+function o(props, additional) {
+    return { props, additional };
+}
+
+function m(additional) {
+    const props = [];
+    return { props, additional };
+}
+
+function r(name) {
+    return { ref: name };
+}
+
+const typeMap = {
+    "TopLevel": o([
+        { json: "literal", js: "literal", typ: "" },
+        { json: "values", js: "values", typ: a(r("Value")) },
+    ], false),
+    "Value": [
+        "c0\u0001\u001b\u001f",
+        "c1\u007f\u0080\u0085\u009f",
+    ],
+};
+
+module.exports = {
+    "topLevelToJson": topLevelToJson,
+    "toTopLevel": toTopLevel,
+};
diff --git a/base/javascript/test/inputs/json/samples/pokedex.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/pokedex.json/default/TopLevel.js
index 8f21bd6..3d13ee8 100644
--- a/base/javascript/test/inputs/json/samples/pokedex.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/pokedex.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/samples/reddit.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/reddit.json/default/TopLevel.js
index a44c8fb..e07d07d 100644
--- a/base/javascript/test/inputs/json/samples/reddit.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/reddit.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/samples/simple-object.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/simple-object.json/default/TopLevel.js
index 9d5ed50..f7aac63 100644
--- a/base/javascript/test/inputs/json/samples/simple-object.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/simple-object.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/samples/spotify-album.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/spotify-album.json/default/TopLevel.js
index c47efb8..21a4eaf 100644
--- a/base/javascript/test/inputs/json/samples/spotify-album.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/spotify-album.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.js
index 279fd7c..2843bb9 100644
--- a/base/javascript/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript/test/inputs/json/samples/us-senators.json/default/TopLevel.js b/head/javascript/test/inputs/json/samples/us-senators.json/default/TopLevel.js
index 0b8f089..3852fa9 100644
--- a/base/javascript/test/inputs/json/samples/us-senators.json/default/TopLevel.js
+++ b/head/javascript/test/inputs/json/samples/us-senators.json/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/javascript-prop-types/test/inputs/json/priority/keywords.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/priority/keywords.json/default/toplevel.js
index f20178d..e00479f 100644
--- a/base/javascript-prop-types/test/inputs/json/priority/keywords.json/default/toplevel.js
+++ b/head/javascript-prop-types/test/inputs/json/priority/keywords.json/default/toplevel.js
@@ -234,6 +234,7 @@ let _Retain;
 let _Rethrows;
 let _Return;
 let _Right;
+let _S;
 let _Sbyte;
 let _Sealed;
 let _Select;
@@ -1150,6 +1151,9 @@ _Return = PropTypes.shape({
 _Right = PropTypes.shape({
     "right": PropTypes.oneOfType([Integer]).isRequired,
 });
+_S = PropTypes.shape({
+    "s": PropTypes.oneOfType([Integer]).isRequired,
+});
 _Sbyte = PropTypes.shape({
     "sbyte": PropTypes.oneOfType([Integer]).isRequired,
 });
@@ -1302,6 +1306,7 @@ _Obj4 = PropTypes.shape({
     "rethrows": _Rethrows,
     "return": _Return,
     "right": _Right,
+    "s": _S,
     "sbyte": _Sbyte,
     "sealed": _Sealed,
     "select": _Select,
diff --git a/head/javascript-prop-types/test/inputs/json/samples/copy-with-property.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/samples/copy-with-property.json/default/toplevel.js
new file mode 100644
index 0000000..fcd1e9f
--- /dev/null
+++ b/head/javascript-prop-types/test/inputs/json/samples/copy-with-property.json/default/toplevel.js
@@ -0,0 +1,22 @@
+// Example usage:
+//
+// import { MyShape } from ./myShape.js;
+//
+// class MyComponent extends React.Component {
+//   //
+// }
+//
+// MyComponent.propTypes = {
+//   input: MyShape
+// };
+
+import PropTypes from "prop-types";
+const Integer = (props, name) => props[name] == null || Number.isInteger(props[name]) ? null : new Error("Expected integer");
+
+let _TopLevel;
+_TopLevel = PropTypes.shape({
+    "copyWith": PropTypes.oneOfType([Integer]).isRequired,
+    "name": PropTypes.oneOfType([PropTypes.string]).isRequired,
+});
+
+export const TopLevel = _TopLevel;
diff --git a/head/javascript-prop-types/test/inputs/json/samples/objc-control-characters.json/default/toplevel.js b/head/javascript-prop-types/test/inputs/json/samples/objc-control-characters.json/default/toplevel.js
new file mode 100644
index 0000000..e21db7f
--- /dev/null
+++ b/head/javascript-prop-types/test/inputs/json/samples/objc-control-characters.json/default/toplevel.js
@@ -0,0 +1,22 @@
+// Example usage:
+//
+// import { MyShape } from ./myShape.js;
+//
+// class MyComponent extends React.Component {
+//   //
+// }
+//
+// MyComponent.propTypes = {
+//   input: MyShape
+// };
+
+import PropTypes from "prop-types";
+
+let _TopLevel;
+const _Value = PropTypes.oneOf(['c0\u0001\u001b\u001f', 'c1\u007f\u0080\u0085\u009f']);
+_TopLevel = PropTypes.shape({
+    "literal": PropTypes.oneOfType([PropTypes.string]).isRequired,
+    "values": PropTypes.oneOfType([PropTypes.arrayOf(_Value)]).isRequired,
+});
+
+export const TopLevel = _TopLevel;
diff --git a/base/kotlin/test/inputs/json/priority/keywords.json/default/TopLevel.kt b/head/kotlin/test/inputs/json/priority/keywords.json/default/TopLevel.kt
index c059c6f..250ed16 100644
--- a/base/kotlin/test/inputs/json/priority/keywords.json/default/TopLevel.kt
+++ b/head/kotlin/test/inputs/json/priority/keywords.json/default/TopLevel.kt
@@ -1247,6 +1247,7 @@ data class Obj4 (
     val retain: Retain,
     val rethrows: Rethrows,
     val right: Right,
+    val s: S,
     val sbyte: Sbyte,
     val sealed: Sealed,
 
@@ -1426,6 +1427,10 @@ data class Right (
     val right: Long
 )
 
+data class S (
+    val s: Long
+)
+
 data class Sbyte (
     val sbyte: Long
 )
diff --git a/head/kotlin/test/inputs/json/samples/copy-with-property.json/default/TopLevel.kt b/head/kotlin/test/inputs/json/samples/copy-with-property.json/default/TopLevel.kt
new file mode 100644
index 0000000..c8f358c
--- /dev/null
+++ b/head/kotlin/test/inputs/json/samples/copy-with-property.json/default/TopLevel.kt
@@ -0,0 +1,20 @@
+// To parse the JSON, install Klaxon and do:
+//
+//   val topLevel = TopLevel.fromJson(jsonString)
+
+package quicktype
+
+import com.beust.klaxon.*
+
+private val klaxon = Klaxon()
+
+data class TopLevel (
+    val copyWith: Long,
+    val name: String
+) {
+    public fun toJson() = klaxon.toJsonString(this)
+
+    companion object {
+        public fun fromJson(json: String) = klaxon.parse<TopLevel>(json)
+    }
+}
diff --git a/base/kotlin-jackson/test/inputs/json/priority/keywords.json/default/TopLevel.kt b/head/kotlin-jackson/test/inputs/json/priority/keywords.json/default/TopLevel.kt
index ab3695c..d41f7a7 100644
--- a/base/kotlin-jackson/test/inputs/json/priority/keywords.json/default/TopLevel.kt
+++ b/head/kotlin-jackson/test/inputs/json/priority/keywords.json/default/TopLevel.kt
@@ -1705,6 +1705,9 @@ data class Obj4 (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val right: Right,
 
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val s: S,
+
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val sbyte: Sbyte,
 
@@ -1952,6 +1955,11 @@ data class Right (
     val right: Long
 )
 
+data class S (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val s: Long
+)
+
 data class Sbyte (
     @get:JsonProperty(required=true)@field:JsonProperty(required=true)
     val sbyte: Long
diff --git a/head/kotlin-jackson/test/inputs/json/samples/copy-with-property.json/default/TopLevel.kt b/head/kotlin-jackson/test/inputs/json/samples/copy-with-property.json/default/TopLevel.kt
new file mode 100644
index 0000000..86521f6
--- /dev/null
+++ b/head/kotlin-jackson/test/inputs/json/samples/copy-with-property.json/default/TopLevel.kt
@@ -0,0 +1,34 @@
+// To parse the JSON, install jackson-module-kotlin and do:
+//
+//   val topLevel = TopLevel.fromJson(jsonString)
+
+package quicktype
+
+import com.fasterxml.jackson.annotation.*
+import com.fasterxml.jackson.core.*
+import com.fasterxml.jackson.databind.*
+import com.fasterxml.jackson.databind.deser.std.StdDeserializer
+import com.fasterxml.jackson.databind.module.SimpleModule
+import com.fasterxml.jackson.databind.node.*
+import com.fasterxml.jackson.databind.ser.std.StdSerializer
+import com.fasterxml.jackson.module.kotlin.*
+
+val mapper = jacksonObjectMapper().apply {
+    propertyNamingStrategy = object : PropertyNamingStrategy.PropertyNamingStrategyBase() { override fun translate(name: String) = if (name == "empty") "" else name }
+    setSerializationInclusion(JsonInclude.Include.NON_NULL)
+    disable(DeserializationFeature.ACCEPT_FLOAT_AS_INT)
+}
+
+data class TopLevel (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val copyWith: Long,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val name: String
+) {
+    fun toJson() = mapper.writeValueAsString(this)
+
+    companion object {
+        fun fromJson(json: String) = mapper.readValue<TopLevel>(json)
+    }
+}
diff --git a/base/kotlinx/test/inputs/json/priority/keywords.json/default/TopLevel.kt b/head/kotlinx/test/inputs/json/priority/keywords.json/default/TopLevel.kt
index 0c822b1..c0ac134 100644
--- a/base/kotlinx/test/inputs/json/priority/keywords.json/default/TopLevel.kt
+++ b/head/kotlinx/test/inputs/json/priority/keywords.json/default/TopLevel.kt
@@ -1443,6 +1443,7 @@ data class Obj4 (
     val retain: Retain,
     val rethrows: Rethrows,
     val right: Right,
+    val s: S,
     val sbyte: Sbyte,
     val sealed: Sealed,
 
@@ -1649,6 +1650,11 @@ data class Right (
     val right: Long
 )
 
+@Serializable
+data class S (
+    val s: Long
+)
+
 @Serializable
 data class Sbyte (
     val sbyte: Long
diff --git a/head/kotlinx/test/inputs/json/samples/copy-with-property.json/default/TopLevel.kt b/head/kotlinx/test/inputs/json/samples/copy-with-property.json/default/TopLevel.kt
new file mode 100644
index 0000000..5a7c473
--- /dev/null
+++ b/head/kotlinx/test/inputs/json/samples/copy-with-property.json/default/TopLevel.kt
@@ -0,0 +1,17 @@
+// To parse the JSON, install kotlin's serialization plugin and do:
+//
+// val json     = Json { allowStructuredMapKeys = true }
+// val topLevel = json.parse(TopLevel.serializer(), jsonString)
+
+package quicktype
+
+import kotlinx.serialization.*
+import kotlinx.serialization.json.*
+import kotlinx.serialization.descriptors.*
+import kotlinx.serialization.encoding.*
+
+@Serializable
+data class TopLevel (
+    val copyWith: Long,
+    val name: String
+)
diff --git a/head/kotlinx/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.kt b/head/kotlinx/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.kt
new file mode 100644
index 0000000..65f16a1
--- /dev/null
+++ b/head/kotlinx/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.kt
@@ -0,0 +1,23 @@
+// To parse the JSON, install kotlin's serialization plugin and do:
+//
+// val json     = Json { allowStructuredMapKeys = true }
+// val topLevel = json.parse(TopLevel.serializer(), jsonString)
+
+package quicktype
+
+import kotlinx.serialization.*
+import kotlinx.serialization.json.*
+import kotlinx.serialization.descriptors.*
+import kotlinx.serialization.encoding.*
+
+@Serializable
+data class TopLevel (
+    val literal: String,
+    val values: List<Value>
+)
+
+@Serializable
+enum class Value(val value: String) {
+    @SerialName("c0\u0001\u001b\u001f") C0("c0\u0001\u001b\u001f"),
+    @SerialName("c1\u007f\u0080\u0085\u009f") C1("c1\u007f\u0080\u0085\u009f");
+}
diff --git a/base/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.h b/head/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.h
index cba566c..9c4b79d 100644
--- a/base/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.h
+++ b/head/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.h
@@ -233,6 +233,7 @@
 @class QTRequires;
 @class QTRethrows;
 @class QTRight;
+@class QTS;
 @class QTSbyte;
 @class QTSealed;
 @class QTSel;
@@ -1333,6 +1334,7 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, strong) QTRequires *requires;
 @property (nonatomic, strong) QTRethrows *rethrows;
 @property (nonatomic, strong) QTRight *right;
+@property (nonatomic, strong) QTS *s;
 @property (nonatomic, strong) QTSbyte *sbyte;
 @property (nonatomic, strong) QTSealed *sealed;
 @property (nonatomic, strong) QTSel *sel;
@@ -1483,6 +1485,10 @@ NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding en
 @property (nonatomic, assign) NSInteger right;
 @end
 
+@interface QTS : NSObject
+@property (nonatomic, assign) NSInteger s;
+@end
+
 @interface QTSbyte : NSObject
 @property (nonatomic, assign) NSInteger sbyte;
 @end
diff --git a/base/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.m b/head/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.m
index 9c3d8bf..4e4d813 100644
--- a/base/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.m
+++ b/head/objective-c/test/inputs/json/priority/keywords.json/default/QTTopLevel.m
@@ -1148,6 +1148,11 @@ NS_ASSUME_NONNULL_BEGIN
 - (NSDictionary *)JSONDictionary;
 @end
 
+@interface QTS (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
 @interface QTSbyte (JSONConversion)
 + (instancetype)fromJSONDictionary:(NSDictionary *)dict;
 - (NSDictionary *)JSONDictionary;
@@ -11565,6 +11570,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"requires": @"requires",
         @"rethrows": @"rethrows",
         @"right": @"right",
+        @"s": @"s",
         @"sbyte": @"sbyte",
         @"sealed": @"sealed",
         @"SEL": @"sel",
@@ -11642,6 +11648,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (![dict[@"requires"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"rethrows"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"right"] isKindOfClass:NSDictionary.class]) return nil;
+        if (![dict[@"s"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"sbyte"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"sealed"] isKindOfClass:NSDictionary.class]) return nil;
         if (![dict[@"SEL"] isKindOfClass:NSDictionary.class]) return nil;
@@ -11735,6 +11742,8 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         if (!_rethrows && dict[@"rethrows"] && ![dict[@"rethrows"] isKindOfClass:NSNull.class]) return nil;
         _right = [QTRight fromJSONDictionary:(id)_right];
         if (!_right && dict[@"right"] && ![dict[@"right"] isKindOfClass:NSNull.class]) return nil;
+        _s = [QTS fromJSONDictionary:(id)_s];
+        if (!_s && dict[@"s"] && ![dict[@"s"] isKindOfClass:NSNull.class]) return nil;
         _sbyte = [QTSbyte fromJSONDictionary:(id)_sbyte];
         if (!_sbyte && dict[@"sbyte"] && ![dict[@"sbyte"] isKindOfClass:NSNull.class]) return nil;
         _sealed = [QTSealed fromJSONDictionary:(id)_sealed];
@@ -11864,6 +11873,7 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
         @"requires": [_requires JSONDictionary],
         @"rethrows": [_rethrows JSONDictionary],
         @"right": [_right JSONDictionary],
+        @"s": [_s JSONDictionary],
         @"sbyte": [_sbyte JSONDictionary],
         @"sealed": [_sealed JSONDictionary],
         @"SEL": [_sel JSONDictionary],
@@ -13222,6 +13232,48 @@ NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding enco
 }
 @end
 
+@implementation QTS
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"s": @"s",
+    };
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTS alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"s"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"s"] doubleValue] != [dict[@"s"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTS.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTS.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTS.properties.allValues];
+}
+@end
+
 @implementation QTSbyte
 + (NSDictionary<NSString *, NSString *> *)properties
 {
diff --git a/head/objective-c/test/inputs/json/samples/copy-with-property.json/default/QTTopLevel.h b/head/objective-c/test/inputs/json/samples/copy-with-property.json/default/QTTopLevel.h
new file mode 100644
index 0000000..7bbcaa8
--- /dev/null
+++ b/head/objective-c/test/inputs/json/samples/copy-with-property.json/default/QTTopLevel.h
@@ -0,0 +1,31 @@
+// To parse this JSON:
+//
+//   NSError *error;
+//   QTTopLevel *topLevel = [QTTopLevel fromJSON:json encoding:NSUTF8Encoding error:&error];
+
+#import <Foundation/Foundation.h>
+
+@class QTTopLevel;
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark - Top-level marshaling functions
+
+QTTopLevel *_Nullable QTTopLevelFromData(NSData *data, NSError **error);
+QTTopLevel *_Nullable QTTopLevelFromJSON(NSString *json, NSStringEncoding encoding, NSError **error);
+NSData     *_Nullable QTTopLevelToData(QTTopLevel *topLevel, NSError **error);
+NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding encoding, NSError **error);
+
+#pragma mark - Object interfaces
+
+@interface QTTopLevel : NSObject
+@property (nonatomic, copy)   NSString *name;
+@property (nonatomic, assign) NSInteger theCopyWith;
+
++ (_Nullable instancetype)fromJSON:(NSString *)json encoding:(NSStringEncoding)encoding error:(NSError *_Nullable *)error;
++ (_Nullable instancetype)fromData:(NSData *)data error:(NSError *_Nullable *)error;
+- (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error;
+- (NSData *_Nullable)toData:(NSError *_Nullable *)error;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/head/objective-c/test/inputs/json/samples/copy-with-property.json/default/QTTopLevel.m b/head/objective-c/test/inputs/json/samples/copy-with-property.json/default/QTTopLevel.m
new file mode 100644
index 0000000..a04d18a
--- /dev/null
+++ b/head/objective-c/test/inputs/json/samples/copy-with-property.json/default/QTTopLevel.m
@@ -0,0 +1,126 @@
+#import "QTTopLevel.h"
+
+#define λ(decl, expr) (^(decl) { return (expr); })
+
+static id NSNullify(id _Nullable x) {
+    return (x == nil || x == NSNull.null) ? NSNull.null : x;
+}
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface QTTopLevel (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
+#pragma mark - JSON serialization
+
+QTTopLevel *_Nullable QTTopLevelFromData(NSData *data, NSError **error)
+{
+    @try {
+        id json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:error];
+        return *error ? nil : [QTTopLevel fromJSONDictionary:json];
+    } @catch (NSException *exception) {
+        *error = [NSError errorWithDomain:@"JSONSerialization" code:-1 userInfo:@{ @"exception": exception }];
+        return nil;
+    }
+}
+
+QTTopLevel *_Nullable QTTopLevelFromJSON(NSString *json, NSStringEncoding encoding, NSError **error)
+{
+    return QTTopLevelFromData([json dataUsingEncoding:encoding], error);
+}
+
+NSData *_Nullable QTTopLevelToData(QTTopLevel *topLevel, NSError **error)
+{
+    @try {
+        id json = [topLevel JSONDictionary];
+        NSData *data = [NSJSONSerialization dataWithJSONObject:json options:NSJSONWritingFragmentsAllowed error:error];
+        return *error ? nil : data;
+    } @catch (NSException *exception) {
+        *error = [NSError errorWithDomain:@"JSONSerialization" code:-1 userInfo:@{ @"exception": exception }];
+        return nil;
+    }
+}
+
+NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding encoding, NSError **error)
+{
+    NSData *data = QTTopLevelToData(topLevel, error);
+    return data ? [[NSString alloc] initWithData:data encoding:encoding] : nil;
+}
+
+@implementation QTTopLevel
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"name": @"name",
+        @"copyWith": @"theCopyWith",
+    };
+}
+
++ (_Nullable instancetype)fromData:(NSData *)data error:(NSError *_Nullable *)error
+{
+    return QTTopLevelFromData(data, error);
+}
+
++ (_Nullable instancetype)fromJSON:(NSString *)json encoding:(NSStringEncoding)encoding error:(NSError *_Nullable *)error
+{
+    return QTTopLevelFromJSON(json, encoding, error);
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTTopLevel alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"name"] isKindOfClass:NSString.class]) return nil;
+        if (![dict[@"copyWith"] isKindOfClass:NSNumber.class]) return nil;
+        if ([dict[@"copyWith"] doubleValue] != [dict[@"copyWith"] longLongValue]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTTopLevel.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTTopLevel.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    id dict = [[self dictionaryWithValuesForKeys:QTTopLevel.properties.allValues] mutableCopy];
+
+    for (id jsonName in QTTopLevel.properties) {
+        id propertyName = QTTopLevel.properties[jsonName];
+        if (![jsonName isEqualToString:propertyName]) {
+            dict[jsonName] = dict[propertyName];
+            [dict removeObjectForKey:propertyName];
+        }
+    }
+
+    return dict;
+}
+
+- (NSData *_Nullable)toData:(NSError *_Nullable *)error
+{
+    return QTTopLevelToData(self, error);
+}
+
+- (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error
+{
+    return QTTopLevelToJSON(self, encoding, error);
+}
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/head/objective-c/test/inputs/json/samples/objc-control-characters.json/default/QTTopLevel.h b/head/objective-c/test/inputs/json/samples/objc-control-characters.json/default/QTTopLevel.h
new file mode 100644
index 0000000..9baa595
--- /dev/null
+++ b/head/objective-c/test/inputs/json/samples/objc-control-characters.json/default/QTTopLevel.h
@@ -0,0 +1,41 @@
+// To parse this JSON:
+//
+//   NSError *error;
+//   QTTopLevel *topLevel = [QTTopLevel fromJSON:json encoding:NSUTF8Encoding error:&error];
+
+#import <Foundation/Foundation.h>
+
+@class QTTopLevel;
+@class QTValue;
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark - Boxed enums
+
+@interface QTValue : NSObject
+@property (nonatomic, readonly, copy) NSString *value;
++ (instancetype _Nullable)withValue:(NSString *)value;
++ (QTValue *)c0;
++ (QTValue *)c1;
+@end
+
+#pragma mark - Top-level marshaling functions
+
+QTTopLevel *_Nullable QTTopLevelFromData(NSData *data, NSError **error);
+QTTopLevel *_Nullable QTTopLevelFromJSON(NSString *json, NSStringEncoding encoding, NSError **error);
+NSData     *_Nullable QTTopLevelToData(QTTopLevel *topLevel, NSError **error);
+NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding encoding, NSError **error);
+
+#pragma mark - Object interfaces
+
+@interface QTTopLevel : NSObject
+@property (nonatomic, copy) NSString *literal;
+@property (nonatomic, copy) NSArray<QTValue *> *values;
+
++ (_Nullable instancetype)fromJSON:(NSString *)json encoding:(NSStringEncoding)encoding error:(NSError *_Nullable *)error;
++ (_Nullable instancetype)fromData:(NSData *)data error:(NSError *_Nullable *)error;
+- (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error;
+- (NSData *_Nullable)toData:(NSError *_Nullable *)error;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/head/objective-c/test/inputs/json/samples/objc-control-characters.json/default/QTTopLevel.m b/head/objective-c/test/inputs/json/samples/objc-control-characters.json/default/QTTopLevel.m
new file mode 100644
index 0000000..a90c7f1
--- /dev/null
+++ b/head/objective-c/test/inputs/json/samples/objc-control-characters.json/default/QTTopLevel.m
@@ -0,0 +1,161 @@
+#import "QTTopLevel.h"
+
+#define λ(decl, expr) (^(decl) { return (expr); })
+
+static id NSNullify(id _Nullable x) {
+    return (x == nil || x == NSNull.null) ? NSNull.null : x;
+}
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface QTTopLevel (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
+@implementation QTValue
++ (NSDictionary<NSString *, QTValue *> *)values
+{
+    static NSDictionary<NSString *, QTValue *> *values;
+    return values = values ? values : @{
+        @"c0\001\033\037": [[QTValue alloc] initWithValue:@"c0\001\033\037"],
+        @"c1\177\302\200\302\205\302\237": [[QTValue alloc] initWithValue:@"c1\177\302\200\302\205\302\237"],
+    };
+}
+
++ (QTValue *)c0 { return QTValue.values[@"c0\001\033\037"]; }
++ (QTValue *)c1 { return QTValue.values[@"c1\177\302\200\302\205\302\237"]; }
+
++ (instancetype _Nullable)withValue:(NSString *)value
+{
+    return QTValue.values[value];
+}
+
+- (instancetype)initWithValue:(NSString *)value
+{
+    if (self = [super init]) _value = value;
+    return self;
+}
+
+- (NSUInteger)hash { return _value.hash; }
+@end
+
+static id map(id collection, id (^f)(id value)) {
+    id result = nil;
+    if ([collection isKindOfClass:NSArray.class]) {
+            result = [NSMutableArray arrayWithCapacity:[(NSArray *)collection count]];
+            for (id x in collection) [result addObject:NSNullify(f(x))];
+    } else if ([collection isKindOfClass:NSDictionary.class]) {
+            result = [NSMutableDictionary dictionaryWithCapacity:[(NSDictionary *)collection count]];
+            for (id key in collection) [result setObject:f([collection objectForKey:key]) forKey:key];
+    }
+    return result;
+}
+
+#pragma mark - JSON serialization
+
+QTTopLevel *_Nullable QTTopLevelFromData(NSData *data, NSError **error)
+{
+    @try {
+        id json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:error];
+        return *error ? nil : [QTTopLevel fromJSONDictionary:json];
+    } @catch (NSException *exception) {
+        *error = [NSError errorWithDomain:@"JSONSerialization" code:-1 userInfo:@{ @"exception": exception }];
+        return nil;
+    }
+}
+
+QTTopLevel *_Nullable QTTopLevelFromJSON(NSString *json, NSStringEncoding encoding, NSError **error)
+{
+    return QTTopLevelFromData([json dataUsingEncoding:encoding], error);
+}
+
+NSData *_Nullable QTTopLevelToData(QTTopLevel *topLevel, NSError **error)
+{
+    @try {
+        id json = [topLevel JSONDictionary];
+        NSData *data = [NSJSONSerialization dataWithJSONObject:json options:NSJSONWritingFragmentsAllowed error:error];
+        return *error ? nil : data;
+    } @catch (NSException *exception) {
+        *error = [NSError errorWithDomain:@"JSONSerialization" code:-1 userInfo:@{ @"exception": exception }];
+        return nil;
+    }
+}
+
+NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding encoding, NSError **error)
+{
+    NSData *data = QTTopLevelToData(topLevel, error);
+    return data ? [[NSString alloc] initWithData:data encoding:encoding] : nil;
+}
+
+@implementation QTTopLevel
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"literal": @"literal",
+        @"values": @"values",
+    };
+}
+
++ (_Nullable instancetype)fromData:(NSData *)data error:(NSError *_Nullable *)error
+{
+    return QTTopLevelFromData(data, error);
+}
+
++ (_Nullable instancetype)fromJSON:(NSString *)json encoding:(NSStringEncoding)encoding error:(NSError *_Nullable *)error
+{
+    return QTTopLevelFromJSON(json, encoding, error);
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTTopLevel alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (![dict[@"literal"] isKindOfClass:NSString.class]) return nil;
+        if (![dict[@"values"] isKindOfClass:NSArray.class]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+        _values = map(_values, λ(id x, [QTValue withValue:x]));
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTTopLevel.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTTopLevel.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    id dict = [[self dictionaryWithValuesForKeys:QTTopLevel.properties.allValues] mutableCopy];
+
+    [dict addEntriesFromDictionary:@{
+        @"values": map(_values, λ(id x, [x value])),
+    }];
+
+    return dict;
+}
+
+- (NSData *_Nullable)toData:(NSError *_Nullable *)error
+{
+    return QTTopLevelToData(self, error);
+}
+
+- (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error
+{
+    return QTTopLevelToJSON(self, encoding, error);
+}
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/base/php/test/inputs/json/priority/keywords.json/default/TopLevel.php b/head/php/test/inputs/json/priority/keywords.json/default/TopLevel.php
index 4fbc2b0..2d52bc4 100644
--- a/base/php/test/inputs/json/priority/keywords.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/keywords.json/default/TopLevel.php
@@ -31725,6 +31725,7 @@ class Obj4 {
     private Rethrows $rethrows; // json:rethrows Required
     private ReturnClass $return; // json:return Required
     private Right $right; // json:right Required
+    private S $s; // json:s Required
     private Sbyte $sbyte; // json:sbyte Required
     private Sealed $sealed; // json:sealed Required
     private Sel $sel; // json:SEL Required
@@ -31792,6 +31793,7 @@ class Obj4 {
      * @param Rethrows $rethrows
      * @param ReturnClass $return
      * @param Right $right
+     * @param S $s
      * @param Sbyte $sbyte
      * @param Sealed $sealed
      * @param Sel $sel
@@ -31836,7 +31838,7 @@ class Obj4 {
      * @param Unchecked $unchecked
      * @param Undefined $undefined
      */
-    public function __construct(int $dummy, Obj4Self $obj4Self, This $obj4This, Obj4True $obj4True, TypeClass $obj4Type, PublicClass $public, Quicktype $quicktype, Raise $raise, Range $range, ReadonlyClass $readonly, Ref $ref, Register $register, ReinterpretCast $reinterpretCast, Repeat $repeat, RequireClass $require, Required $required, Requires $requires, Restrict $restrict, Retain $retain, Rethrows $rethrows, ReturnClass $return, Right $right, Sbyte $sbyte, Sealed $sealed, Sel $sel, Select $select, SelfClass $self, Serialize $serialize, Set $set, Short $short, Signed $signed, Sizeof $sizeof, Stackalloc $stackalloc, StaticClass $static, StaticAssert $staticAssert, StaticCast $staticCast, Strictfp $strictfp, StringClass $string, Struct $struct, Subscript $subscript, Super $super, SwitchClass $switch, Symbol $symbol, Synchronized $synchronized, System $system, Template $template, Then $then, ThreadLocal $threadLocal, ThrowClass $throw, Throws $throws, ToJSON $toJSON, TopLevelClass $topLevel, Transient $transient, TrueClass $true, TryClass $try, Type $type, Typealias $typealias, Typedef $typedef, Typeid $typeid, Typename $typename, Typeof $typeof, Uint $uint, Ulong $ulong, Unchecked $unchecked, Undefined $undefined) {
+    public function __construct(int $dummy, Obj4Self $obj4Self, This $obj4This, Obj4True $obj4True, TypeClass $obj4Type, PublicClass $public, Quicktype $quicktype, Raise $raise, Range $range, ReadonlyClass $readonly, Ref $ref, Register $register, ReinterpretCast $reinterpretCast, Repeat $repeat, RequireClass $require, Required $required, Requires $requires, Restrict $restrict, Retain $retain, Rethrows $rethrows, ReturnClass $return, Right $right, S $s, Sbyte $sbyte, Sealed $sealed, Sel $sel, Select $select, SelfClass $self, Serialize $serialize, Set $set, Short $short, Signed $signed, Sizeof $sizeof, Stackalloc $stackalloc, StaticClass $static, StaticAssert $staticAssert, StaticCast $staticCast, Strictfp $strictfp, StringClass $string, Struct $struct, Subscript $subscript, Super $super, SwitchClass $switch, Symbol $symbol, Synchronized $synchronized, System $system, Template $template, Then $then, ThreadLocal $threadLocal, ThrowClass $throw, Throws $throws, ToJSON $toJSON, TopLevelClass $topLevel, Transient $transient, TrueClass $true, TryClass $try, Type $type, Typealias $typealias, Typedef $typedef, Typeid $typeid, Typename $typename, Typeof $typeof, Uint $uint, Ulong $ulong, Unchecked $unchecked, Undefined $undefined) {
         $this->dummy = $dummy;
         $this->obj4Self = $obj4Self;
         $this->obj4This = $obj4This;
@@ -31859,6 +31861,7 @@ class Obj4 {
         $this->rethrows = $rethrows;
         $this->return = $return;
         $this->right = $right;
+        $this->s = $s;
         $this->sbyte = $sbyte;
         $this->sealed = $sealed;
         $this->sel = $sel;
@@ -32959,6 +32962,54 @@ class Obj4 {
         return Right::sample(); /*52:right*/
     }
 
+    /**
+     * @param stdClass $value
+     * @throws Exception
+     * @return S
+     */
+    public static function fromS(stdClass $value): S {
+        return S::from($value); /*class*/
+    }
+
+    /**
+     * @throws Exception
+     * @return stdClass
+     */
+    public function toS(): stdClass {
+        if (Obj4::validateS($this->s))  {
+            return $this->s->to(); /*class*/
+        }
+        throw new Exception('never get to this Obj4::s');
+    }
+
+    /**
+     * @param S
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateS(S $value): bool {
+        $value->validate();
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return S
+     */
+    public function getS(): S {
+        if (Obj4::validateS($this->s))  {
+            return $this->s;
+        }
+        throw new Exception('never get to getS Obj4::s');
+    }
+
+    /**
+     * @return S
+     */
+    public static function sampleS(): S {
+        return S::sample(); /*53:s*/
+    }
+
     /**
      * @param stdClass $value
      * @throws Exception
@@ -33004,7 +33055,7 @@ class Obj4 {
      * @return Sbyte
      */
     public static function sampleSbyte(): Sbyte {
-        return Sbyte::sample(); /*53:sbyte*/
+        return Sbyte::sample(); /*54:sbyte*/
     }
 
     /**
@@ -33052,7 +33103,7 @@ class Obj4 {
      * @return Sealed
      */
     public static function sampleSealed(): Sealed {
-        return Sealed::sample(); /*54:sealed*/
+        return Sealed::sample(); /*55:sealed*/
     }
 
     /**
@@ -33100,7 +33151,7 @@ class Obj4 {
      * @return Sel
      */
     public static function sampleSel(): Sel {
-        return Sel::sample(); /*55:sel*/
+        return Sel::sample(); /*56:sel*/
     }
 
     /**
@@ -33148,7 +33199,7 @@ class Obj4 {
      * @return Select
      */
     public static function sampleSelect(): Select {
-        return Select::sample(); /*56:select*/
+        return Select::sample(); /*57:select*/
     }
 
     /**
@@ -33196,7 +33247,7 @@ class Obj4 {
      * @return SelfClass
      */
     public static function sampleSelf(): SelfClass {
-        return SelfClass::sample(); /*57:self*/
+        return SelfClass::sample(); /*58:self*/
     }
 
     /**
@@ -33244,7 +33295,7 @@ class Obj4 {
      * @return Serialize
      */
     public static function sampleSerialize(): Serialize {
-        return Serialize::sample(); /*58:serialize*/
+        return Serialize::sample(); /*59:serialize*/
     }
 
     /**
@@ -33292,7 +33343,7 @@ class Obj4 {
      * @return Set
      */
     public static function sampleSet(): Set {
-        return Set::sample(); /*59:set*/
+        return Set::sample(); /*60:set*/
     }
 
     /**
@@ -33340,7 +33391,7 @@ class Obj4 {
      * @return Short
      */
     public static function sampleShort(): Short {
-        return Short::sample(); /*60:short*/
+        return Short::sample(); /*61:short*/
     }
 
     /**
@@ -33388,7 +33439,7 @@ class Obj4 {
      * @return Signed
      */
     public static function sampleSigned(): Signed {
-        return Signed::sample(); /*61:signed*/
+        return Signed::sample(); /*62:signed*/
     }
 
     /**
@@ -33436,7 +33487,7 @@ class Obj4 {
      * @return Sizeof
      */
     public static function sampleSizeof(): Sizeof {
-        return Sizeof::sample(); /*62:sizeof*/
+        return Sizeof::sample(); /*63:sizeof*/
     }
 
     /**
@@ -33484,7 +33535,7 @@ class Obj4 {
      * @return Stackalloc
      */
     public static function sampleStackalloc(): Stackalloc {
-        return Stackalloc::sample(); /*63:stackalloc*/
+        return Stackalloc::sample(); /*64:stackalloc*/
     }
 
     /**
@@ -33532,7 +33583,7 @@ class Obj4 {
      * @return StaticClass
      */
     public static function sampleStatic(): StaticClass {
-        return StaticClass::sample(); /*64:static*/
+        return StaticClass::sample(); /*65:static*/
     }
 
     /**
@@ -33580,7 +33631,7 @@ class Obj4 {
      * @return StaticAssert
      */
     public static function sampleStaticAssert(): StaticAssert {
-        return StaticAssert::sample(); /*65:staticAssert*/
+        return StaticAssert::sample(); /*66:staticAssert*/
     }
 
     /**
@@ -33628,7 +33679,7 @@ class Obj4 {
      * @return StaticCast
      */
     public static function sampleStaticCast(): StaticCast {
-        return StaticCast::sample(); /*66:staticCast*/
+        return StaticCast::sample(); /*67:staticCast*/
     }
 
     /**
@@ -33676,7 +33727,7 @@ class Obj4 {
      * @return Strictfp
      */
     public static function sampleStrictfp(): Strictfp {
-        return Strictfp::sample(); /*67:strictfp*/
+        return Strictfp::sample(); /*68:strictfp*/
     }
 
     /**
@@ -33724,7 +33775,7 @@ class Obj4 {
      * @return StringClass
      */
     public static function sampleString(): StringClass {
-        return StringClass::sample(); /*68:string*/
+        return StringClass::sample(); /*69:string*/
     }
 
     /**
@@ -33772,7 +33823,7 @@ class Obj4 {
      * @return Struct
      */
     public static function sampleStruct(): Struct {
-        return Struct::sample(); /*69:struct*/
+        return Struct::sample(); /*70:struct*/
     }
 
     /**
@@ -33820,7 +33871,7 @@ class Obj4 {
      * @return Subscript
      */
     public static function sampleSubscript(): Subscript {
-        return Subscript::sample(); /*70:subscript*/
+        return Subscript::sample(); /*71:subscript*/
     }
 
     /**
@@ -33868,7 +33919,7 @@ class Obj4 {
      * @return Super
      */
     public static function sampleSuper(): Super {
-        return Super::sample(); /*71:super*/
+        return Super::sample(); /*72:super*/
     }
 
     /**
@@ -33916,7 +33967,7 @@ class Obj4 {
      * @return SwitchClass
      */
     public static function sampleSwitch(): SwitchClass {
-        return SwitchClass::sample(); /*72:switch*/
+        return SwitchClass::sample(); /*73:switch*/
     }
 
     /**
@@ -33964,7 +34015,7 @@ class Obj4 {
      * @return Symbol
      */
     public static function sampleSymbol(): Symbol {
-        return Symbol::sample(); /*73:symbol*/
+        return Symbol::sample(); /*74:symbol*/
     }
 
     /**
@@ -34012,7 +34063,7 @@ class Obj4 {
      * @return Synchronized
      */
     public static function sampleSynchronized(): Synchronized {
-        return Synchronized::sample(); /*74:synchronized*/
+        return Synchronized::sample(); /*75:synchronized*/
     }
 
     /**
@@ -34060,7 +34111,7 @@ class Obj4 {
      * @return System
      */
     public static function sampleSystem(): System {
-        return System::sample(); /*75:system*/
+        return System::sample(); /*76:system*/
     }
 
     /**
@@ -34108,7 +34159,7 @@ class Obj4 {
      * @return Template
      */
     public static function sampleTemplate(): Template {
-        return Template::sample(); /*76:template*/
+        return Template::sample(); /*77:template*/
     }
 
     /**
@@ -34156,7 +34207,7 @@ class Obj4 {
      * @return Then
      */
     public static function sampleThen(): Then {
-        return Then::sample(); /*77:then*/
+        return Then::sample(); /*78:then*/
     }
 
     /**
@@ -34204,7 +34255,7 @@ class Obj4 {
      * @return ThreadLocal
      */
     public static function sampleThreadLocal(): ThreadLocal {
-        return ThreadLocal::sample(); /*78:threadLocal*/
+        return ThreadLocal::sample(); /*79:threadLocal*/
     }
 
     /**
@@ -34252,7 +34303,7 @@ class Obj4 {
      * @return ThrowClass
      */
     public static function sampleThrow(): ThrowClass {
-        return ThrowClass::sample(); /*79:throw*/
+        return ThrowClass::sample(); /*80:throw*/
     }
 
     /**
@@ -34300,7 +34351,7 @@ class Obj4 {
      * @return Throws
      */
     public static function sampleThrows(): Throws {
-        return Throws::sample(); /*80:throws*/
+        return Throws::sample(); /*81:throws*/
     }
 
     /**
@@ -34348,7 +34399,7 @@ class Obj4 {
      * @return ToJSON
      */
     public static function sampleToJSON(): ToJSON {
-        return ToJSON::sample(); /*81:toJSON*/
+        return ToJSON::sample(); /*82:toJSON*/
     }
 
     /**
@@ -34396,7 +34447,7 @@ class Obj4 {
      * @return TopLevelClass
      */
     public static function sampleTopLevel(): TopLevelClass {
-        return TopLevelClass::sample(); /*82:topLevel*/
+        return TopLevelClass::sample(); /*83:topLevel*/
     }
 
     /**
@@ -34444,7 +34495,7 @@ class Obj4 {
      * @return Transient
      */
     public static function sampleTransient(): Transient {
-        return Transient::sample(); /*83:transient*/
+        return Transient::sample(); /*84:transient*/
     }
 
     /**
@@ -34492,7 +34543,7 @@ class Obj4 {
      * @return TrueClass
      */
     public static function sampleTrue(): TrueClass {
-        return TrueClass::sample(); /*84:true*/
+        return TrueClass::sample(); /*85:true*/
     }
 
     /**
@@ -34540,7 +34591,7 @@ class Obj4 {
      * @return TryClass
      */
     public static function sampleTry(): TryClass {
-        return TryClass::sample(); /*85:try*/
+        return TryClass::sample(); /*86:try*/
     }
 
     /**
@@ -34588,7 +34639,7 @@ class Obj4 {
      * @return Type
      */
     public static function sampleType(): Type {
-        return Type::sample(); /*86:type*/
+        return Type::sample(); /*87:type*/
     }
 
     /**
@@ -34636,7 +34687,7 @@ class Obj4 {
      * @return Typealias
      */
     public static function sampleTypealias(): Typealias {
-        return Typealias::sample(); /*87:typealias*/
+        return Typealias::sample(); /*88:typealias*/
     }
 
     /**
@@ -34684,7 +34735,7 @@ class Obj4 {
      * @return Typedef
      */
     public static function sampleTypedef(): Typedef {
-        return Typedef::sample(); /*88:typedef*/
+        return Typedef::sample(); /*89:typedef*/
     }
 
     /**
@@ -34732,7 +34783,7 @@ class Obj4 {
      * @return Typeid
      */
     public static function sampleTypeid(): Typeid {
-        return Typeid::sample(); /*89:typeid*/
+        return Typeid::sample(); /*90:typeid*/
     }
 
     /**
@@ -34780,7 +34831,7 @@ class Obj4 {
      * @return Typename
      */
     public static function sampleTypename(): Typename {
-        return Typename::sample(); /*90:typename*/
+        return Typename::sample(); /*91:typename*/
     }
 
     /**
@@ -34828,7 +34879,7 @@ class Obj4 {
      * @return Typeof
      */
     public static function sampleTypeof(): Typeof {
-        return Typeof::sample(); /*91:typeof*/
+        return Typeof::sample(); /*92:typeof*/
     }
 
     /**
@@ -34876,7 +34927,7 @@ class Obj4 {
      * @return Uint
      */
     public static function sampleUint(): Uint {
-        return Uint::sample(); /*92:uint*/
+        return Uint::sample(); /*93:uint*/
     }
 
     /**
@@ -34924,7 +34975,7 @@ class Obj4 {
      * @return Ulong
      */
     public static function sampleUlong(): Ulong {
-        return Ulong::sample(); /*93:ulong*/
+        return Ulong::sample(); /*94:ulong*/
     }
 
     /**
@@ -34972,7 +35023,7 @@ class Obj4 {
      * @return Unchecked
      */
     public static function sampleUnchecked(): Unchecked {
-        return Unchecked::sample(); /*94:unchecked*/
+        return Unchecked::sample(); /*95:unchecked*/
     }
 
     /**
@@ -35020,7 +35071,7 @@ class Obj4 {
      * @return Undefined
      */
     public static function sampleUndefined(): Undefined {
-        return Undefined::sample(); /*95:undefined*/
+        return Undefined::sample(); /*96:undefined*/
     }
 
     /**
@@ -35050,6 +35101,7 @@ class Obj4 {
         || Obj4::validateRethrows($this->rethrows)
         || Obj4::validateReturn($this->return)
         || Obj4::validateRight($this->right)
+        || Obj4::validateS($this->s)
         || Obj4::validateSbyte($this->sbyte)
         || Obj4::validateSealed($this->sealed)
         || Obj4::validateSel($this->sel)
@@ -35123,6 +35175,7 @@ class Obj4 {
         $out->{'rethrows'} = $this->toRethrows();
         $out->{'return'} = $this->toReturn();
         $out->{'right'} = $this->toRight();
+        $out->{'s'} = $this->toS();
         $out->{'sbyte'} = $this->toSbyte();
         $out->{'sealed'} = $this->toSealed();
         $out->{'SEL'} = $this->toSel();
@@ -35241,6 +35294,9 @@ class Obj4 {
         if (!property_exists($obj, 'right')) {
             throw new Exception("Missing required property");
         }
+        if (!property_exists($obj, 's')) {
+            throw new Exception("Missing required property");
+        }
         if (!property_exists($obj, 'sbyte')) {
             throw new Exception("Missing required property");
         }
@@ -35393,6 +35449,7 @@ class Obj4 {
         ,Obj4::fromRethrows($obj->{'rethrows'})
         ,Obj4::fromReturn($obj->{'return'})
         ,Obj4::fromRight($obj->{'right'})
+        ,Obj4::fromS($obj->{'s'})
         ,Obj4::fromSbyte($obj->{'sbyte'})
         ,Obj4::fromSealed($obj->{'sealed'})
         ,Obj4::fromSel($obj->{'SEL'})
@@ -35466,6 +35523,7 @@ class Obj4 {
         ,Obj4::sampleRethrows()
         ,Obj4::sampleReturn()
         ,Obj4::sampleRight()
+        ,Obj4::sampleS()
         ,Obj4::sampleSbyte()
         ,Obj4::sampleSealed()
         ,Obj4::sampleSel()
@@ -37634,6 +37692,107 @@ class Right {
     }
 }
 
+// This is an autogenerated file:S
+
+class S {
+    private int $s; // json:s Required
+
+    /**
+     * @param int $s
+     */
+    public function __construct(int $s) {
+        $this->s = $s;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromS(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toS(): int {
+        if (S::validateS($this->s))  {
+            return $this->s; /*int*/
+        }
+        throw new Exception('never get to this S::s');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateS(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getS(): int {
+        if (S::validateS($this->s))  {
+            return $this->s;
+        }
+        throw new Exception('never get to getS S::s');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleS(): int {
+        return 31; /*31:s*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return S::validateS($this->s);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'s'} = $this->toS();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return S
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): S {
+        if (!property_exists($obj, 's')) {
+            throw new Exception("Missing required property");
+        }
+        return new S(
+         S::fromS($obj->{'s'})
+        );
+    }
+
+    /**
+     * @return S
+     */
+    public static function sample(): S {
+        return new S(
+         S::sampleS()
+        );
+    }
+}
+
 // This is an autogenerated file:Sbyte
 
 class Sbyte {
diff --git a/head/php/test/inputs/json/samples/copy-with-property.json/default/TopLevel.php b/head/php/test/inputs/json/samples/copy-with-property.json/default/TopLevel.php
new file mode 100644
index 0000000..c6d57bf
--- /dev/null
+++ b/head/php/test/inputs/json/samples/copy-with-property.json/default/TopLevel.php
@@ -0,0 +1,160 @@
+<?php
+declare(strict_types=1);
+
+// This is an autogenerated file:TopLevel
+
+class TopLevel {
+    private int $copyWith; // json:copyWith Required
+    private string $name; // json:name Required
+
+    /**
+     * @param int $copyWith
+     * @param string $name
+     */
+    public function __construct(int $copyWith, string $name) {
+        $this->copyWith = $copyWith;
+        $this->name = $name;
+    }
+
+    /**
+     * @param int $value
+     * @throws Exception
+     * @return int
+     */
+    public static function fromCopyWith(int $value): int {
+        return $value; /*int*/
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function toCopyWith(): int {
+        if (TopLevel::validateCopyWith($this->copyWith))  {
+            return $this->copyWith; /*int*/
+        }
+        throw new Exception('never get to this TopLevel::copyWith');
+    }
+
+    /**
+     * @param int
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateCopyWith(int $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return int
+     */
+    public function getCopyWith(): int {
+        if (TopLevel::validateCopyWith($this->copyWith))  {
+            return $this->copyWith;
+        }
+        throw new Exception('never get to getCopyWith TopLevel::copyWith');
+    }
+
+    /**
+     * @return int
+     */
+    public static function sampleCopyWith(): int {
+        return 31; /*31:copyWith*/
+    }
+
+    /**
+     * @param string $value
+     * @throws Exception
+     * @return string
+     */
+    public static function fromName(string $value): string {
+        return $value; /*string*/
+    }
+
+    /**
+     * @throws Exception
+     * @return string
+     */
+    public function toName(): string {
+        if (TopLevel::validateName($this->name))  {
+            return $this->name; /*string*/
+        }
+        throw new Exception('never get to this TopLevel::name');
+    }
+
+    /**
+     * @param string
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateName(string $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return string
+     */
+    public function getName(): string {
+        if (TopLevel::validateName($this->name))  {
+            return $this->name;
+        }
+        throw new Exception('never get to getName TopLevel::name');
+    }
+
+    /**
+     * @return string
+     */
+    public static function sampleName(): string {
+        return 'TopLevel::name::32'; /*32:name*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return TopLevel::validateCopyWith($this->copyWith)
+        || TopLevel::validateName($this->name);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'copyWith'} = $this->toCopyWith();
+        $out->{'name'} = $this->toName();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return TopLevel
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'copyWith')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        return new TopLevel(
+         TopLevel::fromCopyWith($obj->{'copyWith'})
+        ,TopLevel::fromName($obj->{'name'})
+        );
+    }
+
+    /**
+     * @return TopLevel
+     */
+    public static function sample(): TopLevel {
+        return new TopLevel(
+         TopLevel::sampleCopyWith()
+        ,TopLevel::sampleName()
+        );
+    }
+}
diff --git a/head/php/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.php b/head/php/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.php
new file mode 100644
index 0000000..dfa7925
--- /dev/null
+++ b/head/php/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.php
@@ -0,0 +1,221 @@
+<?php
+declare(strict_types=1);
+
+// This is an autogenerated file:TopLevel
+
+class TopLevel {
+    private string $literal; // json:literal Required
+    private array $values; // json:values Required
+
+    /**
+     * @param string $literal
+     * @param array $values
+     */
+    public function __construct(string $literal, array $values) {
+        $this->literal = $literal;
+        $this->values = $values;
+    }
+
+    /**
+     * @param string $value
+     * @throws Exception
+     * @return string
+     */
+    public static function fromLiteral(string $value): string {
+        return $value; /*string*/
+    }
+
+    /**
+     * @throws Exception
+     * @return string
+     */
+    public function toLiteral(): string {
+        if (TopLevel::validateLiteral($this->literal))  {
+            return $this->literal; /*string*/
+        }
+        throw new Exception('never get to this TopLevel::literal');
+    }
+
+    /**
+     * @param string
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateLiteral(string $value): bool {
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return string
+     */
+    public function getLiteral(): string {
+        if (TopLevel::validateLiteral($this->literal))  {
+            return $this->literal;
+        }
+        throw new Exception('never get to getLiteral TopLevel::literal');
+    }
+
+    /**
+     * @return string
+     */
+    public static function sampleLiteral(): string {
+        return 'TopLevel::literal::31'; /*31:literal*/
+    }
+
+    /**
+     * @param array $value
+     * @throws Exception
+     * @return array
+     */
+    public static function fromValues(array $value): array {
+        return  array_map(function ($value) {
+            return Value::from($value); /*enum*/
+        }, $value);
+    }
+
+    /**
+     * @throws Exception
+     * @return array
+     */
+    public function toValues(): array {
+        if (TopLevel::validateValues($this->values))  {
+            return array_map(function ($value) {
+                return Value::to($value); /*enum*/
+            }, $this->values);
+        }
+        throw new Exception('never get to this TopLevel::values');
+    }
+
+    /**
+     * @param array
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateValues(array $value): bool {
+        if (!is_array($value)) {
+            throw new Exception("Attribute Error:TopLevel::values");
+        }
+        array_walk($value, function($value_v) {
+            Value::to($value_v);
+        });
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return array
+     */
+    public function getValues(): array {
+        if (TopLevel::validateValues($this->values))  {
+            return $this->values;
+        }
+        throw new Exception('never get to getValues TopLevel::values');
+    }
+
+    /**
+     * @return array
+     */
+    public static function sampleValues(): array {
+        return  array(
+            Value::sample() /*enum*/
+        ); /* 32:values*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return TopLevel::validateLiteral($this->literal)
+        || TopLevel::validateValues($this->values);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'literal'} = $this->toLiteral();
+        $out->{'values'} = $this->toValues();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return TopLevel
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'literal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'values')) {
+            throw new Exception("Missing required property");
+        }
+        return new TopLevel(
+         TopLevel::fromLiteral($obj->{'literal'})
+        ,TopLevel::fromValues($obj->{'values'})
+        );
+    }
+
+    /**
+     * @return TopLevel
+     */
+    public static function sample(): TopLevel {
+        return new TopLevel(
+         TopLevel::sampleLiteral()
+        ,TopLevel::sampleValues()
+        );
+    }
+}
+
+// This is an autogenerated file:Value
+
+class Value {
+    public static Value $C0;
+    public static Value $C1;
+    public static function init() {
+        Value::$C0 = new Value('c0');
+        Value::$C1 = new Value('c1');
+    }
+    private string $enum;
+    public function __construct(string $enum) {
+        $this->enum = $enum;
+    }
+
+    /**
+     * @param Value
+     * @return string
+     * @throws Exception
+     */
+    public static function to(Value $obj): string {
+        switch ($obj->enum) {
+            case Value::$C0->enum: return 'c0';
+            case Value::$C1->enum: return 'c1';
+        }
+        throw new Exception('the give value is not an enum-value.');
+    }
+
+    /**
+     * @param mixed
+     * @return Value
+     * @throws Exception
+     */
+    public static function from($obj): Value {
+        switch ($obj) {
+            case 'c0': return Value::$C0;
+            case 'c1': return Value::$C1;
+        }
+        throw new Exception("Cannot deserialize Value");
+    }
+
+    /**
+     * @return Value
+     */
+    public static function sample(): Value {
+        return Value::$C0;
+    }
+}
+Value::init();
diff --git a/base/pike/test/inputs/json/priority/keywords.json/default/TopLevel.pmod b/head/pike/test/inputs/json/priority/keywords.json/default/TopLevel.pmod
index be66731..313acdb 100644
--- a/base/pike/test/inputs/json/priority/keywords.json/default/TopLevel.pmod
+++ b/head/pike/test/inputs/json/priority/keywords.json/default/TopLevel.pmod
@@ -4818,6 +4818,7 @@ class Obj4 {
     Retain          retain;           // json: "retain"
     Rethrows        rethrows;         // json: "rethrows"
     Right           right;            // json: "right"
+    S               s;                // json: "s"
     Sbyte           sbyte;            // json: "sbyte"
     Sealed          sealed;           // json: "sealed"
     Sel             sel;              // json: "SEL"
@@ -4886,6 +4887,7 @@ class Obj4 {
             "retain" : retain,
             "rethrows" : rethrows,
             "right" : right,
+            "s" : s,
             "sbyte" : sbyte,
             "sealed" : sealed,
             "SEL" : sel,
@@ -4961,6 +4963,7 @@ Obj4 Obj4_from_JSON(mixed json) {
     retval.retain = json["retain"];
     retval.rethrows = json["rethrows"];
     retval.right = json["right"];
+    retval.s = json["s"];
     retval.sbyte = json["sbyte"];
     retval.sealed = json["sealed"];
     retval.sel = json["SEL"];
@@ -5529,6 +5532,27 @@ Right Right_from_JSON(mixed json) {
     return retval;
 }
 
+class S {
+    int s; // json: "s"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "s" : s,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+S S_from_JSON(mixed json) {
+    S retval = S();
+
+    if (!intp(json["s"])) error("Expected integer");
+    retval.s = json["s"];
+
+    return retval;
+}
+
 class Sbyte {
     int sbyte; // json: "sbyte"
 
diff --git a/head/pike/test/inputs/json/samples/copy-with-property.json/default/TopLevel.pmod b/head/pike/test/inputs/json/samples/copy-with-property.json/default/TopLevel.pmod
new file mode 100644
index 0000000..9f4e79b
--- /dev/null
+++ b/head/pike/test/inputs/json/samples/copy-with-property.json/default/TopLevel.pmod
@@ -0,0 +1,37 @@
+// This source has been automatically generated by quicktype.
+// ( https://github.com/quicktype/quicktype )
+//
+// To use this code, simply import it into your project as a Pike module.
+// To JSON-encode your object, you can pass it to `Standards.JSON.encode`
+// or call `encode_json` on it.
+//
+// To decode a JSON string, first pass it to `Standards.JSON.decode`,
+// and then pass the result to `<YourClass>_from_JSON`.
+// It will return an instance of <YourClass>.
+// Bear in mind that these functions have unexpected behavior,
+// and will likely throw an error, if the JSON string does not
+// match the expected interface, even if the JSON itself is valid.
+
+class TopLevel {
+    int    copy_with; // json: "copyWith"
+    string name;      // json: "name"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "copyWith" : copy_with,
+            "name" : name,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+TopLevel TopLevel_from_JSON(mixed json) {
+    TopLevel retval = TopLevel();
+
+    if (!intp(json["copyWith"])) error("Expected integer");
+    retval.copy_with = json["copyWith"];
+    retval.name = json["name"];
+
+    return retval;
+}
diff --git a/head/pike/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.pmod b/head/pike/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.pmod
new file mode 100644
index 0000000..065c513
--- /dev/null
+++ b/head/pike/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.pmod
@@ -0,0 +1,45 @@
+// This source has been automatically generated by quicktype.
+// ( https://github.com/quicktype/quicktype )
+//
+// To use this code, simply import it into your project as a Pike module.
+// To JSON-encode your object, you can pass it to `Standards.JSON.encode`
+// or call `encode_json` on it.
+//
+// To decode a JSON string, first pass it to `Standards.JSON.decode`,
+// and then pass the result to `<YourClass>_from_JSON`.
+// It will return an instance of <YourClass>.
+// Bear in mind that these functions have unexpected behavior,
+// and will likely throw an error, if the JSON string does not
+// match the expected interface, even if the JSON itself is valid.
+
+class TopLevel {
+    string       literal; // json: "literal"
+    array(Value) values;  // json: "values"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "literal" : literal,
+            "values" : values,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+TopLevel TopLevel_from_JSON(mixed json) {
+    TopLevel retval = TopLevel();
+
+    retval.literal = json["literal"];
+    retval.values = json["values"];
+
+    return retval;
+}
+
+enum Value {
+    C0 = "c0\u0001\u001b\u001f",       // json: "c0\u0001\u001b\u001f"
+    C1 = "c1\u007f\u0080\u0085\u009f", // json: "c1\u007f\u0080\u0085\u009f"
+}
+
+Value Value_from_JSON(mixed json) {
+    if(json&&json != "c0\u0001\u001b\u001f"&&json != "c1\u007f\u0080\u0085\u009f")error("enum");return json;
+}
diff --git a/base/python/test/inputs/json/priority/keywords.json/default/quicktype.py b/head/python/test/inputs/json/priority/keywords.json/default/quicktype.py
index b63d029..f68c212 100644
--- a/base/python/test/inputs/json/priority/keywords.json/default/quicktype.py
+++ b/head/python/test/inputs/json/priority/keywords.json/default/quicktype.py
@@ -4120,6 +4120,22 @@ class Right:
         return result
 
 
+@dataclass
+class S:
+    s: int
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'S':
+        assert isinstance(obj, dict)
+        s = from_int(obj.get("s"))
+        return S(s)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["s"] = from_int(self.s)
+        return result
+
+
 @dataclass
 class Sbyte:
     sbyte: int
@@ -4816,6 +4832,7 @@ class Obj4:
     rethrows: Rethrows
     obj4_return: Return
     right: Right
+    s: S
     sbyte: Sbyte
     sealed: Sealed
     select: Select
@@ -4885,6 +4902,7 @@ class Obj4:
         rethrows = Rethrows.from_dict(obj.get("rethrows"))
         obj4_return = Return.from_dict(obj.get("return"))
         right = Right.from_dict(obj.get("right"))
+        s = S.from_dict(obj.get("s"))
         sbyte = Sbyte.from_dict(obj.get("sbyte"))
         sealed = Sealed.from_dict(obj.get("sealed"))
         select = Select.from_dict(obj.get("select"))
@@ -4928,7 +4946,7 @@ class Obj4:
         ulong = Ulong.from_dict(obj.get("ulong"))
         unchecked = Unchecked.from_dict(obj.get("unchecked"))
         undefined = Undefined.from_dict(obj.get("undefined"))
-        return Obj4(sel, obj4_self, true, type, dummy, public, quicktype, obj4_raise, range, readonly, ref, register, reinterpret_cast, repeat, require, required, requires, restrict, retain, rethrows, obj4_return, right, sbyte, sealed, select, purple_self, serialize, set, short, signed, sizeof, stackalloc, static, static_assert, static_cast, strictfp, string, struct, subscript, super, switch, symbol, synchronized, system, template, then, this, thread_local, throw, throws, to_json, top_level, transient, obj4_true, obj4_try, obj4_type, typealias, typedef, typeid, typename, typeof, uint, ulong, unchecked, undefined)
+        return Obj4(sel, obj4_self, true, type, dummy, public, quicktype, obj4_raise, range, readonly, ref, register, reinterpret_cast, repeat, require, required, requires, restrict, retain, rethrows, obj4_return, right, s, sbyte, sealed, select, purple_self, serialize, set, short, signed, sizeof, stackalloc, static, static_assert, static_cast, strictfp, string, struct, subscript, super, switch, symbol, synchronized, system, template, then, this, thread_local, throw, throws, to_json, top_level, transient, obj4_true, obj4_try, obj4_type, typealias, typedef, typeid, typename, typeof, uint, ulong, unchecked, undefined)
 
     def to_dict(self) -> dict:
         result: dict = {}
@@ -4954,6 +4972,7 @@ class Obj4:
         result["rethrows"] = to_class(Rethrows, self.rethrows)
         result["return"] = to_class(Return, self.obj4_return)
         result["right"] = to_class(Right, self.right)
+        result["s"] = to_class(S, self.s)
         result["sbyte"] = to_class(Sbyte, self.sbyte)
         result["sealed"] = to_class(Sealed, self.sealed)
         result["select"] = to_class(Select, self.select)
diff --git a/head/python/test/inputs/json/samples/copy-with-property.json/default/quicktype.py b/head/python/test/inputs/json/samples/copy-with-property.json/default/quicktype.py
new file mode 100644
index 0000000..bca63bf
--- /dev/null
+++ b/head/python/test/inputs/json/samples/copy-with-property.json/default/quicktype.py
@@ -0,0 +1,47 @@
+from dataclasses import dataclass
+from typing import Any, TypeVar, Type, cast
+
+
+T = TypeVar("T")
+
+
+def from_int(x: Any) -> int:
+    assert isinstance(x, int) and not isinstance(x, bool)
+    return x
+
+
+def from_str(x: Any) -> str:
+    assert isinstance(x, str)
+    return x
+
+
+def to_class(c: Type[T], x: Any) -> dict:
+    assert isinstance(x, c)
+    return cast(Any, x).to_dict()
+
+
+@dataclass
+class TopLevel:
+    copy_with: int
+    name: str
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'TopLevel':
+        assert isinstance(obj, dict)
+        copy_with = from_int(obj.get("copyWith"))
+        name = from_str(obj.get("name"))
+        return TopLevel(copy_with, name)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["copyWith"] = from_int(self.copy_with)
+        result["name"] = from_str(self.name)
+        return result
+
+
+def top_level_from_dict(s: Any) -> TopLevel:
+    return TopLevel.from_dict(s)
+
+
+def top_level_to_dict(x: TopLevel) -> Any:
+    return to_class(TopLevel, x)
diff --git a/head/python/test/inputs/json/samples/objc-control-characters.json/default/quicktype.py b/head/python/test/inputs/json/samples/objc-control-characters.json/default/quicktype.py
new file mode 100644
index 0000000..839eacc
--- /dev/null
+++ b/head/python/test/inputs/json/samples/objc-control-characters.json/default/quicktype.py
@@ -0,0 +1,59 @@
+from enum import Enum
+from dataclasses import dataclass
+from typing import Any, TypeVar, Callable, Type, cast
+
+
+T = TypeVar("T")
+EnumT = TypeVar("EnumT", bound=Enum)
+
+
+def from_str(x: Any) -> str:
+    assert isinstance(x, str)
+    return x
+
+
+def from_list(f: Callable[[Any], T], x: Any) -> list[T]:
+    assert isinstance(x, list)
+    return [f(y) for y in x]
+
+
+def to_enum(c: Type[EnumT], x: Any) -> EnumT:
+    assert isinstance(x, c)
+    return x.value
+
+
+def to_class(c: Type[T], x: Any) -> dict:
+    assert isinstance(x, c)
+    return cast(Any, x).to_dict()
+
+
+class Value(Enum):
+    C0 = "c0\u0001\u001b\u001f"
+    C1 = "c1\u007f\u0080\u0085\u009f"
+
+
+@dataclass
+class TopLevel:
+    literal: str
+    values: list[Value]
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'TopLevel':
+        assert isinstance(obj, dict)
+        literal = from_str(obj.get("literal"))
+        values = from_list(Value, obj.get("values"))
+        return TopLevel(literal, values)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["literal"] = from_str(self.literal)
+        result["values"] = from_list(lambda x: to_enum(Value, x), self.values)
+        return result
+
+
+def top_level_from_dict(s: Any) -> TopLevel:
+    return TopLevel.from_dict(s)
+
+
+def top_level_to_dict(x: TopLevel) -> Any:
+    return to_class(TopLevel, x)
diff --git a/base/ruby/test/inputs/json/priority/keywords.json/default/TopLevel.rb b/head/ruby/test/inputs/json/priority/keywords.json/default/TopLevel.rb
index 80af01e..d376988 100644
--- a/base/ruby/test/inputs/json/priority/keywords.json/default/TopLevel.rb
+++ b/head/ruby/test/inputs/json/priority/keywords.json/default/TopLevel.rb
@@ -6229,6 +6229,31 @@ class Right < Dry::Struct
   end
 end
 
+class S < Dry::Struct
+  attribute :s, Types::Integer
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      s: d.fetch("s"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "s" => s,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
+
 class Sbyte < Dry::Struct
   attribute :sbyte, Types::Integer
 
@@ -7183,6 +7208,7 @@ class Obj4 < Dry::Struct
   attribute :retain,           Retain
   attribute :rethrows,         Rethrows
   attribute :right,            Right
+  attribute :s,                S
   attribute :sbyte,            Sbyte
   attribute :sealed,           Sealed
   attribute :sel,              Sel
@@ -7252,6 +7278,7 @@ class Obj4 < Dry::Struct
       retain:           Retain.from_dynamic!(d.fetch("retain")),
       rethrows:         Rethrows.from_dynamic!(d.fetch("rethrows")),
       right:            Right.from_dynamic!(d.fetch("right")),
+      s:                S.from_dynamic!(d.fetch("s")),
       sbyte:            Sbyte.from_dynamic!(d.fetch("sbyte")),
       sealed:           Sealed.from_dynamic!(d.fetch("sealed")),
       sel:              Sel.from_dynamic!(d.fetch("SEL")),
@@ -7326,6 +7353,7 @@ class Obj4 < Dry::Struct
       "retain"           => retain.to_dynamic,
       "rethrows"         => rethrows.to_dynamic,
       "right"            => right.to_dynamic,
+      "s"                => s.to_dynamic,
       "sbyte"            => sbyte.to_dynamic,
       "sealed"           => sealed.to_dynamic,
       "SEL"              => sel.to_dynamic,
diff --git a/head/ruby/test/inputs/json/samples/copy-with-property.json/default/TopLevel.rb b/head/ruby/test/inputs/json/samples/copy-with-property.json/default/TopLevel.rb
new file mode 100644
index 0000000..216c57a
--- /dev/null
+++ b/head/ruby/test/inputs/json/samples/copy-with-property.json/default/TopLevel.rb
@@ -0,0 +1,49 @@
+# This code may look unusually verbose for Ruby (and it is), but
+# it performs some subtle and complex validation of JSON data.
+#
+# To parse this JSON, add 'dry-struct' and 'dry-types' gems, then do:
+#
+#   top_level = TopLevel.from_json! "{…}"
+#   puts top_level.copy_with.even?
+#
+# If from_json! succeeds, the value returned matches the schema.
+
+require 'json'
+require 'dry-types'
+require 'dry-struct'
+
+module Types
+  include Dry.Types(default: :nominal)
+
+  Integer = Strict::Integer
+  Hash    = Strict::Hash
+  String  = Strict::String
+end
+
+class TopLevel < Dry::Struct
+  attribute :copy_with,      Types::Integer
+  attribute :top_level_name, Types::String
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      copy_with:      d.fetch("copyWith"),
+      top_level_name: d.fetch("name"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "copyWith" => copy_with,
+      "name"     => top_level_name,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
diff --git a/head/ruby/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.rb b/head/ruby/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.rb
new file mode 100644
index 0000000..b384457
--- /dev/null
+++ b/head/ruby/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.rb
@@ -0,0 +1,54 @@
+# This code may look unusually verbose for Ruby (and it is), but
+# it performs some subtle and complex validation of JSON data.
+#
+# To parse this JSON, add 'dry-struct' and 'dry-types' gems, then do:
+#
+#   top_level = TopLevel.from_json! "{…}"
+#   puts top_level.values.first == Value::C0
+#
+# If from_json! succeeds, the value returned matches the schema.
+
+require 'json'
+require 'dry-types'
+require 'dry-struct'
+
+module Types
+  include Dry.Types(default: :nominal)
+
+  Hash   = Strict::Hash
+  String = Strict::String
+  Value  = Strict::String.enum("c0\u{1}\u{1b}\u{1f}", "c1\u{7f}\u{80}\u{85}\u{9f}")
+end
+
+module Value
+  C0 = "c0\u{1}\u{1b}\u{1f}"
+  C1 = "c1\u{7f}\u{80}\u{85}\u{9f}"
+end
+
+class TopLevel < Dry::Struct
+  attribute :literal, Types::String
+  attribute :values,  Types.Array(Types::Value)
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      literal: d.fetch("literal"),
+      values:  d.fetch("values"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "literal" => literal,
+      "values"  => values,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
diff --git a/base/rust/test/inputs/json/priority/keywords.json/default/module_under_test.rs b/head/rust/test/inputs/json/priority/keywords.json/default/module_under_test.rs
index 14aa82f..ce136b7 100644
--- a/base/rust/test/inputs/json/priority/keywords.json/default/module_under_test.rs
+++ b/head/rust/test/inputs/json/priority/keywords.json/default/module_under_test.rs
@@ -1565,6 +1565,8 @@ pub struct Obj4 {
 
     pub right: Right,
 
+    pub s: S,
+
     pub sbyte: Sbyte,
 
     pub sealed: Sealed,
@@ -1795,6 +1797,11 @@ pub struct Right {
     pub right: i64,
 }
 
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct S {
+    pub s: i64,
+}
+
 #[derive(Debug, Clone, Serialize, Deserialize)]
 pub struct Sbyte {
     pub sbyte: i64,
diff --git a/head/rust/test/inputs/json/samples/copy-with-property.json/default/module_under_test.rs b/head/rust/test/inputs/json/samples/copy-with-property.json/default/module_under_test.rs
new file mode 100644
index 0000000..cd97301
--- /dev/null
+++ b/head/rust/test/inputs/json/samples/copy-with-property.json/default/module_under_test.rs
@@ -0,0 +1,22 @@
+// Example code that deserializes and serializes the model.
+// extern crate serde;
+// #[macro_use]
+// extern crate serde_derive;
+// extern crate serde_json;
+//
+// use generated_module::TopLevel;
+//
+// fn main() {
+//     let json = r#"{"answer": 42}"#;
+//     let model: TopLevel = serde_json::from_str(&json).unwrap();
+// }
+
+use serde::{Serialize, Deserialize};
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct TopLevel {
+    pub copy_with: i64,
+
+    pub name: String,
+}
diff --git a/head/rust/test/inputs/json/samples/objc-control-characters.json/default/module_under_test.rs b/head/rust/test/inputs/json/samples/objc-control-characters.json/default/module_under_test.rs
new file mode 100644
index 0000000..0d25e42
--- /dev/null
+++ b/head/rust/test/inputs/json/samples/objc-control-characters.json/default/module_under_test.rs
@@ -0,0 +1,30 @@
+// Example code that deserializes and serializes the model.
+// extern crate serde;
+// #[macro_use]
+// extern crate serde_derive;
+// extern crate serde_json;
+//
+// use generated_module::TopLevel;
+//
+// fn main() {
+//     let json = r#"{"answer": 42}"#;
+//     let model: TopLevel = serde_json::from_str(&json).unwrap();
+// }
+
+use serde::{Serialize, Deserialize};
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct TopLevel {
+    pub literal: String,
+
+    pub values: Vec<Value>,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub enum Value {
+    #[serde(rename = "c0\u{0001}\u{001b}\u{001f}")]
+    C0,
+
+    #[serde(rename = "c1\u{007f}\u{0080}\u{0085}\u{009f}")]
+    C1,
+}
diff --git a/base/scala3/test/inputs/json/priority/keywords.json/default/TopLevel.scala b/head/scala3/test/inputs/json/priority/keywords.json/default/TopLevel.scala
index 5c7aab8..7af7235 100644
--- a/base/scala3/test/inputs/json/priority/keywords.json/default/TopLevel.scala
+++ b/head/scala3/test/inputs/json/priority/keywords.json/default/TopLevel.scala
@@ -1061,6 +1061,7 @@ case class Obj4 (
     val retain : Retain,
     val rethrows : Rethrows,
     val right : Right,
+    val s : S,
     val sbyte : Sbyte,
     val SEL : Sel,
     val select : Select,
@@ -1220,6 +1221,10 @@ case class Right (
     val right : Long
 ) derives Encoder.AsObject, Decoder
 
+case class S (
+    val s : Long
+) derives Encoder.AsObject, Decoder
+
 case class Sbyte (
     val sbyte : Long
 ) derives Encoder.AsObject, Decoder
diff --git a/head/scala3/test/inputs/json/samples/copy-with-property.json/default/TopLevel.scala b/head/scala3/test/inputs/json/samples/copy-with-property.json/default/TopLevel.scala
new file mode 100644
index 0000000..594d674
--- /dev/null
+++ b/head/scala3/test/inputs/json/samples/copy-with-property.json/default/TopLevel.scala
@@ -0,0 +1,13 @@
+package quicktype
+
+import io.circe.syntax._
+import io.circe._
+import cats.syntax.functor._
+
+// If a union has a null in, then we'll need this too... 
+type NullValue = None.type
+
+case class TopLevel (
+    val copyWith : Long,
+    val name : String
+) derives Encoder.AsObject, Decoder
diff --git a/head/scala3/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.scala b/head/scala3/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.scala
new file mode 100644
index 0000000..5f8aaea
--- /dev/null
+++ b/head/scala3/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.scala
@@ -0,0 +1,27 @@
+package quicktype
+
+import io.circe.syntax._
+import io.circe._
+import cats.syntax.functor._
+
+// If a union has a null in, then we'll need this too... 
+type NullValue = None.type
+
+case class TopLevel (
+    val literal : String,
+    val values : Seq[Value]
+) derives Encoder.AsObject, Decoder
+
+enum Value : 
+    case C0
+    case C1
+
+given Decoder[Value] = Decoder.decodeString.emap {
+    case "c0\u0001\u001b\u001f" => scala.Right(Value.C0)
+    case "c1\u007f\u0080\u0085\u009f" => scala.Right(Value.C1)
+    case other => scala.Left("invalid Value: " + other)
+}
+given Encoder[Value] = Encoder.encodeString.contramap {
+    case Value.C0 => "c0\u0001\u001b\u001f"
+    case Value.C1 => "c1\u007f\u0080\u0085\u009f"
+}
diff --git a/base/scala3-upickle/test/inputs/json/priority/keywords.json/default/TopLevel.scala b/head/scala3-upickle/test/inputs/json/priority/keywords.json/default/TopLevel.scala
index e071ec1..044154f 100644
--- a/base/scala3-upickle/test/inputs/json/priority/keywords.json/default/TopLevel.scala
+++ b/head/scala3-upickle/test/inputs/json/priority/keywords.json/default/TopLevel.scala
@@ -1097,6 +1097,7 @@ case class Obj4 (
     val retain : Retain,
     val rethrows : Rethrows,
     val right : Right,
+    val s : S,
     val sbyte : Sbyte,
     val SEL : Sel,
     val select : Select,
@@ -1248,6 +1249,10 @@ case class Right (
     val right : Long
 ) derives OptionPickler.ReadWriter
 
+case class S (
+    val s : Long
+) derives OptionPickler.ReadWriter
+
 case class Sbyte (
     val sbyte : Long
 ) derives OptionPickler.ReadWriter
diff --git a/head/scala3-upickle/test/inputs/json/samples/copy-with-property.json/default/TopLevel.scala b/head/scala3-upickle/test/inputs/json/samples/copy-with-property.json/default/TopLevel.scala
new file mode 100644
index 0000000..af700f3
--- /dev/null
+++ b/head/scala3-upickle/test/inputs/json/samples/copy-with-property.json/default/TopLevel.scala
@@ -0,0 +1,73 @@
+package quicktype
+
+// Custom pickler so that missing keys and JSON nulls both read as None,
+// and None is left out when writing (upickle's default for Option is a
+// JSON array).
+object OptionPickler extends upickle.AttributeTagged:
+    import upickle.default.Writer
+    import upickle.default.Reader
+    override implicit def OptionWriter[T: Writer]: Writer[Option[T]] =
+        implicitly[Writer[T]].comap[Option[T]] {
+            case None => null.asInstanceOf[T]
+            case Some(x) => x
+        }
+
+    override implicit def OptionReader[T: Reader]: Reader[Option[T]] = {
+        new Reader.Delegate[Any, Option[T]](implicitly[Reader[T]].map(Some(_))){
+        override def visitNull(index: Int) = None
+        }
+    }
+end OptionPickler
+
+// If a union has a null in, then we'll need this too...
+type NullValue = None.type
+given OptionPickler.ReadWriter[NullValue] = OptionPickler.readwriter[ujson.Value].bimap[NullValue](
+    _ => ujson.Null,
+    json => if json.isNull then None else throw new upickle.core.Abort("not null")
+)
+given OptionPickler.ReadWriter[java.time.Instant] = OptionPickler.readwriter[String].bimap(_.toString, java.time.Instant.parse)
+
+object JsonExt:
+    val valueReader = OptionPickler.readwriter[ujson.Value]
+
+    // upickle's built-in primitive readers are lenient -- the numeric and
+    // boolean readers accept strings, and the string reader accepts
+    // numbers and booleans -- so untagged unions need strict readers to
+    // pick the right member.
+    val strictString: OptionPickler.Reader[String] = valueReader.map {
+        case ujson.Str(s) => s
+        case json => throw new upickle.core.Abort("expected string, got " + json)
+    }
+    val strictLong: OptionPickler.Reader[Long] = valueReader.map {
+        case ujson.Num(n) if n.isWhole => n.toLong
+        case json => throw new upickle.core.Abort("expected integer, got " + json)
+    }
+    val strictDouble: OptionPickler.Reader[Double] = valueReader.map {
+        case ujson.Num(n) => n
+        case json => throw new upickle.core.Abort("expected number, got " + json)
+    }
+    val strictBoolean: OptionPickler.Reader[Boolean] = valueReader.map {
+        case ujson.Bool(b) => b
+        case json => throw new upickle.core.Abort("expected boolean, got " + json)
+    }
+
+    def badMerge[T](r1: => OptionPickler.Reader[?], rest: OptionPickler.Reader[?]*): OptionPickler.Reader[T] = valueReader.map { json =>
+        var t: T | Null = null
+        val stack       = Vector.newBuilder[Throwable]
+        (r1 +: rest).foreach { reader =>
+            if t == null then
+            try
+                t = OptionPickler.read[T](json, trace = true)(using reader.asInstanceOf[OptionPickler.Reader[T]])
+            catch
+                case exc => stack += exc
+        }
+        if t != null then t.nn else throw new Exception(json.toString(), stack.result().headOption.getOrElse(null))
+    }
+end JsonExt
+given OptionPickler.Reader[Long] = JsonExt.strictLong
+
+
+case class TopLevel (
+    val copyWith : Long,
+    val name : String
+) derives OptionPickler.ReadWriter
diff --git a/head/scala3-upickle/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.scala b/head/scala3-upickle/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.scala
new file mode 100644
index 0000000..b1fd2f1
--- /dev/null
+++ b/head/scala3-upickle/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.scala
@@ -0,0 +1,89 @@
+package quicktype
+
+// Custom pickler so that missing keys and JSON nulls both read as None,
+// and None is left out when writing (upickle's default for Option is a
+// JSON array).
+object OptionPickler extends upickle.AttributeTagged:
+    import upickle.default.Writer
+    import upickle.default.Reader
+    override implicit def OptionWriter[T: Writer]: Writer[Option[T]] =
+        implicitly[Writer[T]].comap[Option[T]] {
+            case None => null.asInstanceOf[T]
+            case Some(x) => x
+        }
+
+    override implicit def OptionReader[T: Reader]: Reader[Option[T]] = {
+        new Reader.Delegate[Any, Option[T]](implicitly[Reader[T]].map(Some(_))){
+        override def visitNull(index: Int) = None
+        }
+    }
+end OptionPickler
+
+// If a union has a null in, then we'll need this too...
+type NullValue = None.type
+given OptionPickler.ReadWriter[NullValue] = OptionPickler.readwriter[ujson.Value].bimap[NullValue](
+    _ => ujson.Null,
+    json => if json.isNull then None else throw new upickle.core.Abort("not null")
+)
+given OptionPickler.ReadWriter[java.time.Instant] = OptionPickler.readwriter[String].bimap(_.toString, java.time.Instant.parse)
+
+object JsonExt:
+    val valueReader = OptionPickler.readwriter[ujson.Value]
+
+    // upickle's built-in primitive readers are lenient -- the numeric and
+    // boolean readers accept strings, and the string reader accepts
+    // numbers and booleans -- so untagged unions need strict readers to
+    // pick the right member.
+    val strictString: OptionPickler.Reader[String] = valueReader.map {
+        case ujson.Str(s) => s
+        case json => throw new upickle.core.Abort("expected string, got " + json)
+    }
+    val strictLong: OptionPickler.Reader[Long] = valueReader.map {
+        case ujson.Num(n) if n.isWhole => n.toLong
+        case json => throw new upickle.core.Abort("expected integer, got " + json)
+    }
+    val strictDouble: OptionPickler.Reader[Double] = valueReader.map {
+        case ujson.Num(n) => n
+        case json => throw new upickle.core.Abort("expected number, got " + json)
+    }
+    val strictBoolean: OptionPickler.Reader[Boolean] = valueReader.map {
+        case ujson.Bool(b) => b
+        case json => throw new upickle.core.Abort("expected boolean, got " + json)
+    }
+
+    def badMerge[T](r1: => OptionPickler.Reader[?], rest: OptionPickler.Reader[?]*): OptionPickler.Reader[T] = valueReader.map { json =>
+        var t: T | Null = null
+        val stack       = Vector.newBuilder[Throwable]
+        (r1 +: rest).foreach { reader =>
+            if t == null then
+            try
+                t = OptionPickler.read[T](json, trace = true)(using reader.asInstanceOf[OptionPickler.Reader[T]])
+            catch
+                case exc => stack += exc
+        }
+        if t != null then t.nn else throw new Exception(json.toString(), stack.result().headOption.getOrElse(null))
+    }
+end JsonExt
+given OptionPickler.Reader[Long] = JsonExt.strictLong
+
+
+case class TopLevel (
+    val literal : String,
+    val values : Seq[Value]
+) derives OptionPickler.ReadWriter
+
+enum Value : 
+    case C0
+    case C1
+
+given OptionPickler.ReadWriter[Value] = OptionPickler.readwriter[String].bimap[Value](
+    {
+        case Value.C0 => "c0\u0001\u001b\u001f"
+        case Value.C1 => "c1\u007f\u0080\u0085\u009f"
+    },
+    {
+        case "c0\u0001\u001b\u001f" => Value.C0
+        case "c1\u007f\u0080\u0085\u009f" => Value.C1
+        case other => throw new upickle.core.Abort("invalid Value: " + other)
+    }
+)
diff --git a/head/schema-cjson/test/inputs/schema/fractional-bounds.schema/default/TopLevel.c b/head/schema-cjson/test/inputs/schema/fractional-bounds.schema/default/TopLevel.c
new file mode 100644
index 0000000..18143eb
--- /dev/null
+++ b/head/schema-cjson/test/inputs/schema/fractional-bounds.schema/default/TopLevel.c
@@ -0,0 +1,63 @@
+/**
+ * TopLevel.c
+ * This file has been autogenerated using quicktype https://github.com/quicktype/quicktype - DO NOT EDIT
+ */
+
+#include "TopLevel.h"
+
+struct TopLevel * cJSON_ParseTopLevel(const char * s) {
+    struct TopLevel * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetTopLevelValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct TopLevel * cJSON_GetTopLevelValue(const cJSON * j) {
+    struct TopLevel * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct TopLevel)))) {
+            memset(x, 0, sizeof(struct TopLevel));
+            if (!cJSON_HasObjectItem(j, "value")) { cJSON_DeleteTopLevel(x); return NULL; }
+            if (cJSON_HasObjectItem(j, "value")) {
+                if (!cJSON_IsNumber(cJSON_GetObjectItemCaseSensitive(j, "value"))) { cJSON_DeleteTopLevel(x); return NULL; }
+                if (cJSON_GetObjectItemCaseSensitive(j, "value")->valuedouble < 0.1) { cJSON_DeleteTopLevel(x); return NULL; }
+                if (cJSON_GetObjectItemCaseSensitive(j, "value")->valuedouble > 0.9) { cJSON_DeleteTopLevel(x); return NULL; }
+                x->value = cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(j, "value"));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateTopLevel(const struct TopLevel * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            cJSON_AddNumberToObject(j, "value", x->value);
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintTopLevel(const struct TopLevel * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateTopLevel(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteTopLevel(struct TopLevel * x) {
+    if (NULL != x) {
+        cJSON_free(x);
+    }
+}
diff --git a/head/schema-cjson/test/inputs/schema/fractional-bounds.schema/default/TopLevel.h b/head/schema-cjson/test/inputs/schema/fractional-bounds.schema/default/TopLevel.h
new file mode 100644
index 0000000..d12f1ad
--- /dev/null
+++ b/head/schema-cjson/test/inputs/schema/fractional-bounds.schema/default/TopLevel.h
@@ -0,0 +1,55 @@
+/**
+ * TopLevel.h
+ * This file has been autogenerated using quicktype https://github.com/quicktype/quicktype - DO NOT EDIT
+ * This file depends of https://github.com/DaveGamble/cJSON, https://github.com/joelguittet/c-list and https://github.com/joelguittet/c-hashtable
+ * To parse json data from json string use the following: struct <type> * data = cJSON_Parse<type>(<string>);
+ * To get json data from cJSON object use the following: struct <type> * data = cJSON_Get<type>Value(<cjson>);
+ * To get cJSON object from json data use the following: cJSON * cjson = cJSON_Create<type>(<data>);
+ * To print json string from json data use the following: char * string = cJSON_Print<type>(<data>);
+ * To delete json data use the following: cJSON_Delete<type>(<data>);
+ */
+
+#ifndef __TOPLEVEL_H__
+#define __TOPLEVEL_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+#include <regex.h>
+#include <cJSON.h>
+#include <hashtable.h>
+#include <list.h>
+
+#define quicktype_cJSON_Duplicate(j) cJSON_Duplicate(j, true)
+#define cJSON_Integer (1 << 18)
+#define quicktype_cJSON_IsInteger(j) (cJSON_IsNumber(j) && (j)->valuedouble == (int64_t)(j)->valuedouble)
+#ifndef cJSON_Bool
+#define cJSON_Bool (cJSON_True | cJSON_False)
+#endif
+#ifndef cJSON_Map
+#define cJSON_Map (1 << 16)
+#endif
+#ifndef cJSON_Enum
+#define cJSON_Enum (1 << 17)
+#endif
+
+struct TopLevel {
+    double value;
+};
+
+struct TopLevel * cJSON_ParseTopLevel(const char * s);
+struct TopLevel * cJSON_GetTopLevelValue(const cJSON * j);
+cJSON * cJSON_CreateTopLevel(const struct TopLevel * x);
+char * cJSON_PrintTopLevel(const struct TopLevel * x);
+void cJSON_DeleteTopLevel(struct TopLevel * x);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TOPLEVEL_H__ */
diff --git a/head/schema-cplusplus/test/inputs/schema/fractional-bounds.schema/default/quicktype.hpp b/head/schema-cplusplus/test/inputs/schema/fractional-bounds.schema/default/quicktype.hpp
new file mode 100644
index 0000000..644532a
--- /dev/null
+++ b/head/schema-cplusplus/test/inputs/schema/fractional-bounds.schema/default/quicktype.hpp
@@ -0,0 +1,196 @@
+//  To parse this JSON data, first install
+//
+//      json.hpp  https://github.com/nlohmann/json
+//
+//  Then include this file, and then do
+//
+//     TopLevel data = nlohmann::json::parse(jsonString);
+
+#pragma once
+
+#include "json.hpp"
+
+#include <optional>
+#include <stdexcept>
+#include <regex>
+
+namespace quicktype {
+    using nlohmann::json;
+
+    class ClassMemberConstraints {
+        private:
+        std::optional<int64_t> min_int_value;
+        std::optional<int64_t> max_int_value;
+        std::optional<double> min_double_value;
+        std::optional<double> max_double_value;
+        std::optional<size_t> min_length;
+        std::optional<size_t> max_length;
+        std::optional<std::string> pattern;
+
+        public:
+        ClassMemberConstraints(
+            std::optional<int64_t> min_int_value,
+            std::optional<int64_t> max_int_value,
+            std::optional<double> min_double_value,
+            std::optional<double> max_double_value,
+            std::optional<size_t> min_length,
+            std::optional<size_t> max_length,
+            std::optional<std::string> pattern
+        ) : min_int_value(min_int_value), max_int_value(max_int_value), min_double_value(min_double_value), max_double_value(max_double_value), min_length(min_length), max_length(max_length), pattern(pattern) {}
+        ClassMemberConstraints() = default;
+        virtual ~ClassMemberConstraints() = default;
+
+        void set_min_int_value(int64_t min_int_value) { this->min_int_value = min_int_value; }
+        auto get_min_int_value() const { return min_int_value; }
+
+        void set_max_int_value(int64_t max_int_value) { this->max_int_value = max_int_value; }
+        auto get_max_int_value() const { return max_int_value; }
+
+        void set_min_double_value(double min_double_value) { this->min_double_value = min_double_value; }
+        auto get_min_double_value() const { return min_double_value; }
+
+        void set_max_double_value(double max_double_value) { this->max_double_value = max_double_value; }
+        auto get_max_double_value() const { return max_double_value; }
+
+        void set_min_length(size_t min_length) { this->min_length = min_length; }
+        auto get_min_length() const { return min_length; }
+
+        void set_max_length(size_t max_length) { this->max_length = max_length; }
+        auto get_max_length() const { return max_length; }
+
+        void set_pattern(const std::string &  pattern) { this->pattern = pattern; }
+        auto get_pattern() const { return pattern; }
+    };
+
+    class ClassMemberConstraintException : public std::runtime_error {
+        public:
+        ClassMemberConstraintException(const std::string &  msg) : std::runtime_error(msg) {}
+    };
+
+    class ValueTooLowException : public ClassMemberConstraintException {
+        public:
+        ValueTooLowException(const std::string &  msg) : ClassMemberConstraintException(msg) {}
+    };
+
+    class ValueTooHighException : public ClassMemberConstraintException {
+        public:
+        ValueTooHighException(const std::string &  msg) : ClassMemberConstraintException(msg) {}
+    };
+
+    class ValueTooShortException : public ClassMemberConstraintException {
+        public:
+        ValueTooShortException(const std::string &  msg) : ClassMemberConstraintException(msg) {}
+    };
+
+    class ValueTooLongException : public ClassMemberConstraintException {
+        public:
+        ValueTooLongException(const std::string &  msg) : ClassMemberConstraintException(msg) {}
+    };
+
+    class InvalidPatternException : public ClassMemberConstraintException {
+        public:
+        InvalidPatternException(const std::string &  msg) : ClassMemberConstraintException(msg) {}
+    };
+
+    inline void CheckConstraint(const std::string &  name, const ClassMemberConstraints & c, int64_t value) {
+        if (c.get_min_int_value() != std::nullopt && value < *c.get_min_int_value()) {
+            throw ValueTooLowException ("Value too low for " + name + " (" + std::to_string(value) + "<" + std::to_string(*c.get_min_int_value()) + ")");
+        }
+
+        if (c.get_max_int_value() != std::nullopt && value > *c.get_max_int_value()) {
+            throw ValueTooHighException ("Value too high for " + name + " (" + std::to_string(value) + ">" + std::to_string(*c.get_max_int_value()) + ")");
+        }
+    }
+
+    inline void CheckConstraint(const std::string &  name, const ClassMemberConstraints & c, const std::optional<int64_t> & value) {
+        if (value) {
+            CheckConstraint(name, c, *value);
+        }
+    }
+
+    inline void CheckConstraint(const std::string &  name, const ClassMemberConstraints & c, double value) {
+        if (c.get_min_double_value() != std::nullopt && value < *c.get_min_double_value()) {
+            throw ValueTooLowException ("Value too low for " + name + " (" + std::to_string(value) + "<" + std::to_string(*c.get_min_double_value()) + ")");
+        }
+
+        if (c.get_max_double_value() != std::nullopt && value > *c.get_max_double_value()) {
+            throw ValueTooHighException ("Value too high for " + name + " (" + std::to_string(value) + ">" + std::to_string(*c.get_max_double_value()) + ")");
+        }
+    }
+
+    inline void CheckConstraint(const std::string &  name, const ClassMemberConstraints & c, const std::optional<double> & value) {
+        if (value) {
+            CheckConstraint(name, c, *value);
+        }
+    }
+
+    inline void CheckConstraint(const std::string &  name, const ClassMemberConstraints & c, const std::string &  value) {
+        if (c.get_min_length() != std::nullopt && value.length() < *c.get_min_length()) {
+            throw ValueTooShortException ("Value too short for " + name + " (" + std::to_string(value.length()) + "<" + std::to_string(*c.get_min_length()) + ")");
+        }
+
+        if (c.get_max_length() != std::nullopt && value.length() > *c.get_max_length()) {
+            throw ValueTooLongException ("Value too long for " + name + " (" + std::to_string(value.length()) + ">" + std::to_string(*c.get_max_length()) + ")");
+        }
+
+        if (c.get_pattern() != std::nullopt) {
+            std::smatch result;
+            std::regex_search(value, result, std::regex( *c.get_pattern() ));
+            if (result.empty()) {
+                throw InvalidPatternException ("Value doesn't match pattern for " + name + " (" + value +" != " + *c.get_pattern() + ")");
+            }
+        }
+    }
+
+    inline void CheckConstraint(const std::string &  name, const ClassMemberConstraints & c, const std::optional<std::string> & value) {
+        if (value) {
+            CheckConstraint(name, c, *value);
+        }
+    }
+
+    #ifndef NLOHMANN_UNTYPED_quicktype_HELPER
+    #define NLOHMANN_UNTYPED_quicktype_HELPER
+    inline json get_untyped(const json & j, const char * property) {
+        if (j.find(property) != j.end()) {
+            return j.at(property).get<json>();
+        }
+        return json();
+    }
+
+    inline json get_untyped(const json & j, std::string property) {
+        return get_untyped(j, property.data());
+    }
+    #endif
+
+    class TopLevel {
+        public:
+        TopLevel() :
+            value_constraint(std::nullopt, std::nullopt, 0.1, 0.9, std::nullopt, std::nullopt, std::nullopt)
+        {}
+        virtual ~TopLevel() = default;
+
+        private:
+        double value;
+        ClassMemberConstraints value_constraint;
+
+        public:
+        const double & get_value() const { return value; }
+        double & get_mutable_value() { return value; }
+        void set_value(const double & value) { CheckConstraint("value", value_constraint, value); this->value = value; }
+    };
+}
+
+namespace quicktype {
+    void from_json(const json & j, TopLevel & x);
+    void to_json(json & j, const TopLevel & x);
+
+    inline void from_json(const json & j, TopLevel& x) {
+        if (!j.is_object()) throw std::runtime_error("Expected object");
+        x.set_value(j.at("value").get<double>());
+    }
+
+    inline void to_json(json & j, const TopLevel & x) {
+        j = json::object();
+        j["value"] = x.get_value();
+    }
+}
diff --git a/head/schema-crystal/test/inputs/schema/fractional-bounds.schema/default/TopLevel.cr b/head/schema-crystal/test/inputs/schema/fractional-bounds.schema/default/TopLevel.cr
new file mode 100644
index 0000000..4c566f0
--- /dev/null
+++ b/head/schema-crystal/test/inputs/schema/fractional-bounds.schema/default/TopLevel.cr
@@ -0,0 +1,7 @@
+require "json"
+
+class TopLevel
+  include JSON::Serializable
+
+  property value : Float64
+end
diff --git a/head/schema-csharp/test/inputs/schema/fractional-bounds.schema/default/QuickType.cs b/head/schema-csharp/test/inputs/schema/fractional-bounds.schema/default/QuickType.cs
new file mode 100644
index 0000000..5902b14
--- /dev/null
+++ b/head/schema-csharp/test/inputs/schema/fractional-bounds.schema/default/QuickType.cs
@@ -0,0 +1,96 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial class TopLevel
+    {
+        [JsonProperty("value", Required = Required.Always)]
+        [JsonConverter(typeof(MinMaxValueCheckConverter))]
+        public double Value { get; set; }
+    }
+
+    public partial class TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class MinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 0.1 && value <= 0.9)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 0.1 && value <= 0.9)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly MinMaxValueCheckConverter Singleton = new MinMaxValueCheckConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp/test/inputs/schema/fractional-bounds.schema/number-type-decimal--20a123601b5a/QuickType.cs b/head/schema-csharp/test/inputs/schema/fractional-bounds.schema/number-type-decimal--20a123601b5a/QuickType.cs
new file mode 100644
index 0000000..dd506c2
--- /dev/null
+++ b/head/schema-csharp/test/inputs/schema/fractional-bounds.schema/number-type-decimal--20a123601b5a/QuickType.cs
@@ -0,0 +1,96 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial class TopLevel
+    {
+        [JsonProperty("value", Required = Required.Always)]
+        [JsonConverter(typeof(MinMaxValueCheckConverter))]
+        public decimal Value { get; set; }
+    }
+
+    public partial class TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class MinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(decimal) || t == typeof(decimal?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<decimal>(reader);
+            if (value >= 0.1m && value <= 0.9m)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type decimal");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (decimal)untypedValue;
+            if (value >= 0.1m && value <= 0.9m)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type decimal");
+        }
+
+        public static readonly MinMaxValueCheckConverter Singleton = new MinMaxValueCheckConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/base/schema-csharp/test/inputs/schema/integer-type.schema/default/QuickType.cs b/head/schema-csharp/test/inputs/schema/integer-type.schema/default/QuickType.cs
index 1a28d77..8fbcdc9 100644
--- a/base/schema-csharp/test/inputs/schema/integer-type.schema/default/QuickType.cs
+++ b/head/schema-csharp/test/inputs/schema/integer-type.schema/default/QuickType.cs
@@ -26,27 +26,35 @@ namespace QuickType
     public partial class TopLevel
     {
         [JsonProperty("above_i32_max", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
         public long AboveI32Max { get; set; }
 
         [JsonProperty("below_i32_min", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
         public long BelowI32Min { get; set; }
 
         [JsonProperty("i32_range", Required = Required.Always)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
         public long I32Range { get; set; }
 
         [JsonProperty("large_bounds", Required = Required.Always)]
+        [JsonConverter(typeof(StickyMinMaxValueCheckConverter))]
         public long LargeBounds { get; set; }
 
         [JsonProperty("only_maximum", Required = Required.Always)]
+        [JsonConverter(typeof(IndigoMinMaxValueCheckConverter))]
         public long OnlyMaximum { get; set; }
 
         [JsonProperty("only_minimum", Required = Required.Always)]
+        [JsonConverter(typeof(IndecentMinMaxValueCheckConverter))]
         public long OnlyMinimum { get; set; }
 
         [JsonProperty("small_negative", Required = Required.Always)]
+        [JsonConverter(typeof(HilariousMinMaxValueCheckConverter))]
         public long SmallNegative { get; set; }
 
         [JsonProperty("small_positive", Required = Required.Always)]
+        [JsonConverter(typeof(AmbitiousMinMaxValueCheckConverter))]
         public long SmallPositive { get; set; }
 
         [JsonProperty("unbounded", Required = Required.Always)]
@@ -75,6 +83,278 @@ namespace QuickType
             },
         };
     }
+
+    internal class PurpleMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 0 && value <= 2147483648)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 0 && value <= 2147483648)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly PurpleMinMaxValueCheckConverter Singleton = new PurpleMinMaxValueCheckConverter();
+    }
+
+    internal class FluffyMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= -2147483649 && value <= 0)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= -2147483649 && value <= 0)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly FluffyMinMaxValueCheckConverter Singleton = new FluffyMinMaxValueCheckConverter();
+    }
+
+    internal class TentacledMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= -2147483648 && value <= 2147483647)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= -2147483648 && value <= 2147483647)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly TentacledMinMaxValueCheckConverter Singleton = new TentacledMinMaxValueCheckConverter();
+    }
+
+    internal class StickyMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= -9007199254740991 && value <= 9007199254740991)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= -9007199254740991 && value <= 9007199254740991)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly StickyMinMaxValueCheckConverter Singleton = new StickyMinMaxValueCheckConverter();
+    }
+
+    internal class IndigoMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value <= 0)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value <= 0)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly IndigoMinMaxValueCheckConverter Singleton = new IndigoMinMaxValueCheckConverter();
+    }
+
+    internal class IndecentMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 0)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 0)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly IndecentMinMaxValueCheckConverter Singleton = new IndecentMinMaxValueCheckConverter();
+    }
+
+    internal class HilariousMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= -100 && value <= 0)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= -100 && value <= 0)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly HilariousMinMaxValueCheckConverter Singleton = new HilariousMinMaxValueCheckConverter();
+    }
+
+    internal class AmbitiousMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 0 && value <= 100)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 0 && value <= 100)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly AmbitiousMinMaxValueCheckConverter Singleton = new AmbitiousMinMaxValueCheckConverter();
+    }
 }
 #pragma warning restore CS8618
 #pragma warning restore CS8601
diff --git a/base/schema-csharp/test/inputs/schema/minmax-integer.schema/default/QuickType.cs b/head/schema-csharp/test/inputs/schema/minmax-integer.schema/default/QuickType.cs
index 6d110ab..90dd7b7 100644
--- a/base/schema-csharp/test/inputs/schema/minmax-integer.schema/default/QuickType.cs
+++ b/head/schema-csharp/test/inputs/schema/minmax-integer.schema/default/QuickType.cs
@@ -29,24 +29,30 @@ namespace QuickType
         public long Free { get; set; }
 
         [JsonProperty("intersection", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
         public long Intersection { get; set; }
 
         [JsonProperty("max", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
         public long Max { get; set; }
 
         [JsonProperty("min", Required = Required.Always)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
         public long Min { get; set; }
 
         [JsonProperty("minmax", Required = Required.Always)]
+        [JsonConverter(typeof(StickyMinMaxValueCheckConverter))]
         public long Minmax { get; set; }
 
         [JsonProperty("minMaxIntersection", Required = Required.Always)]
+        [JsonConverter(typeof(StickyMinMaxValueCheckConverter))]
         public long MinMaxIntersection { get; set; }
 
         [JsonProperty("minMaxUnion", Required = Required.Always)]
         public long MinMaxUnion { get; set; }
 
         [JsonProperty("union", Required = Required.Always)]
+        [JsonConverter(typeof(IndigoMinMaxValueCheckConverter))]
         public long Union { get; set; }
     }
 
@@ -72,6 +78,176 @@ namespace QuickType
             },
         };
     }
+
+    internal class PurpleMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 4 && value <= 5)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 4 && value <= 5)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly PurpleMinMaxValueCheckConverter Singleton = new PurpleMinMaxValueCheckConverter();
+    }
+
+    internal class FluffyMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value <= 5)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value <= 5)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly FluffyMinMaxValueCheckConverter Singleton = new FluffyMinMaxValueCheckConverter();
+    }
+
+    internal class TentacledMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 3)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 3)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly TentacledMinMaxValueCheckConverter Singleton = new TentacledMinMaxValueCheckConverter();
+    }
+
+    internal class StickyMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 3 && value <= 5)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 3 && value <= 5)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly StickyMinMaxValueCheckConverter Singleton = new StickyMinMaxValueCheckConverter();
+    }
+
+    internal class IndigoMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 3 && value <= 6)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 3 && value <= 6)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly IndigoMinMaxValueCheckConverter Singleton = new IndigoMinMaxValueCheckConverter();
+    }
 }
 #pragma warning restore CS8618
 #pragma warning restore CS8601
diff --git a/base/schema-csharp/test/inputs/schema/optional-const-ref.schema/default/QuickType.cs b/head/schema-csharp/test/inputs/schema/optional-const-ref.schema/default/QuickType.cs
index 94dff2e..6157674 100644
--- a/base/schema-csharp/test/inputs/schema/optional-const-ref.schema/default/QuickType.cs
+++ b/head/schema-csharp/test/inputs/schema/optional-const-ref.schema/default/QuickType.cs
@@ -29,6 +29,7 @@ namespace QuickType
         public Coordinate[]? Coordinates { get; set; }
 
         [JsonProperty("count", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
         public long? Count { get; set; }
 
         [JsonProperty("label", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
@@ -39,6 +40,7 @@ namespace QuickType
         public Coordinate[] RequiredCoordinates { get; set; }
 
         [JsonProperty("requiredCount", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
         public long RequiredCount { get; set; }
 
         [JsonProperty("requiredLabel", Required = Required.Always)]
@@ -46,7 +48,7 @@ namespace QuickType
         public string RequiredLabel { get; set; }
 
         [JsonProperty("weight", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
-        [JsonConverter(typeof(MinMaxValueCheckConverter))]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
         public double? Weight { get; set; }
     }
 
@@ -82,6 +84,40 @@ namespace QuickType
         };
     }
 
+    internal class PurpleMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 1 && value <= 100)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 1 && value <= 100)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly PurpleMinMaxValueCheckConverter Singleton = new PurpleMinMaxValueCheckConverter();
+    }
+
     internal class MinMaxLengthCheckConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(string);
@@ -110,7 +146,7 @@ namespace QuickType
         public static readonly MinMaxLengthCheckConverter Singleton = new MinMaxLengthCheckConverter();
     }
 
-    internal class MinMaxValueCheckConverter : JsonConverter
+    internal class FluffyMinMaxValueCheckConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
 
@@ -141,7 +177,7 @@ namespace QuickType
             throw new Exception("Cannot marshal type double");
         }
 
-        public static readonly MinMaxValueCheckConverter Singleton = new MinMaxValueCheckConverter();
+        public static readonly FluffyMinMaxValueCheckConverter Singleton = new FluffyMinMaxValueCheckConverter();
     }
 }
 #pragma warning restore CS8618
diff --git a/base/schema-csharp/test/inputs/schema/optional-constraints.schema/default/QuickType.cs b/head/schema-csharp/test/inputs/schema/optional-constraints.schema/default/QuickType.cs
index e5a334f..5346287 100644
--- a/base/schema-csharp/test/inputs/schema/optional-constraints.schema/default/QuickType.cs
+++ b/head/schema-csharp/test/inputs/schema/optional-constraints.schema/default/QuickType.cs
@@ -26,10 +26,11 @@ namespace QuickType
     public partial class TopLevel
     {
         [JsonProperty("optDouble", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
-        [JsonConverter(typeof(MinMaxValueCheckConverter))]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
         public double? OptDouble { get; set; }
 
         [JsonProperty("optInt", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
         public long? OptInt { get; set; }
 
         [JsonProperty("optPattern", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
@@ -40,6 +41,7 @@ namespace QuickType
         public string? OptString { get; set; }
 
         [JsonProperty("reqZeroMin", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
         public long ReqZeroMin { get; set; }
     }
 
@@ -66,7 +68,7 @@ namespace QuickType
         };
     }
 
-    internal class MinMaxValueCheckConverter : JsonConverter
+    internal class PurpleMinMaxValueCheckConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
 
@@ -97,7 +99,41 @@ namespace QuickType
             throw new Exception("Cannot marshal type double");
         }
 
-        public static readonly MinMaxValueCheckConverter Singleton = new MinMaxValueCheckConverter();
+        public static readonly PurpleMinMaxValueCheckConverter Singleton = new PurpleMinMaxValueCheckConverter();
+    }
+
+    internal class FluffyMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 0 && value <= 100)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 0 && value <= 100)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly FluffyMinMaxValueCheckConverter Singleton = new FluffyMinMaxValueCheckConverter();
     }
 
     internal class MinMaxLengthCheckConverter : JsonConverter
diff --git a/head/schema-csharp-SystemTextJson/test/inputs/schema/fractional-bounds.schema/default/QuickType.cs b/head/schema-csharp-SystemTextJson/test/inputs/schema/fractional-bounds.schema/default/QuickType.cs
new file mode 100644
index 0000000..8826101
--- /dev/null
+++ b/head/schema-csharp-SystemTextJson/test/inputs/schema/fractional-bounds.schema/default/QuickType.cs
@@ -0,0 +1,194 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'System.Text.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Text.Json;
+    using System.Text.Json.Serialization;
+    using System.Globalization;
+
+    public partial class TopLevel
+    {
+        [JsonRequired]
+        [JsonPropertyName("value")]
+        [JsonConverter(typeof(MinMaxValueCheckConverter))]
+        public double Value { get; set; }
+    }
+
+    public partial class TopLevel
+    {
+        public static TopLevel FromJson(string json) => global::System.Text.Json.JsonSerializer.Deserialize<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonSerializer.Serialize(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerOptions Settings = new(JsonSerializerDefaults.General)
+        {
+            Converters =
+            {
+                new DateOnlyConverter(),
+                new TimeOnlyConverter(),
+                IsoDateTimeOffsetConverter.Singleton
+            },
+        };
+    }
+
+    internal class MinMaxValueCheckConverter : JsonConverter<double>
+    {
+        public override bool CanConvert(Type t) => t == typeof(double);
+
+        public override double Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetDouble();
+            if (value >= 0.1 && value <= 0.9)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type double");
+        }
+
+        public override void Write(Utf8JsonWriter writer, double value, JsonSerializerOptions options)
+        {
+            if (value >= 0.1 && value <= 0.9)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type double");
+        }
+
+        public static readonly MinMaxValueCheckConverter Singleton = new MinMaxValueCheckConverter();
+    }
+    
+    public class DateOnlyConverter : JsonConverter<DateOnly>
+    {
+        private readonly string serializationFormat;
+        public DateOnlyConverter() : this(null) { }
+
+        public DateOnlyConverter(string? serializationFormat)
+        {
+                this.serializationFormat = serializationFormat ?? "yyyy-MM-dd";
+        }
+
+        public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                var value = reader.GetString();
+                return DateOnly.Parse(value!);
+        }
+
+        public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options)
+                => writer.WriteStringValue(value.ToString(serializationFormat));
+    }
+
+    public class TimeOnlyConverter : JsonConverter<TimeOnly>
+    {
+        private readonly string serializationFormat;
+
+        public TimeOnlyConverter() : this(null) { }
+
+        public TimeOnlyConverter(string? serializationFormat)
+        {
+                this.serializationFormat = serializationFormat ?? "HH:mm:ss.fff";
+        }
+
+        public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                var value = reader.GetString();
+                return TimeOnly.Parse(value!);
+        }
+
+        public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options)
+                => writer.WriteStringValue(value.ToString(serializationFormat));
+    }
+
+    internal class IsoDateTimeOffsetConverter : JsonConverter<DateTimeOffset>
+    {
+        public override bool CanConvert(Type t) => t == typeof(DateTimeOffset);
+
+        private const string DefaultDateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK";
+
+        private DateTimeStyles _dateTimeStyles = DateTimeStyles.RoundtripKind;
+        private string? _dateTimeFormat;
+        private CultureInfo? _culture;
+
+        public DateTimeStyles DateTimeStyles
+        {
+                get => _dateTimeStyles;
+                set => _dateTimeStyles = value;
+        }
+
+        public string? DateTimeFormat
+        {
+                get => _dateTimeFormat ?? string.Empty;
+                set => _dateTimeFormat = (string.IsNullOrEmpty(value)) ? null : value;
+        }
+
+        public CultureInfo Culture
+        {
+                get => _culture ?? CultureInfo.CurrentCulture;
+                set => _culture = value;
+        }
+
+        public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options)
+        {
+                string text;
+
+
+                if ((_dateTimeStyles & DateTimeStyles.AdjustToUniversal) == DateTimeStyles.AdjustToUniversal
+                        || (_dateTimeStyles & DateTimeStyles.AssumeUniversal) == DateTimeStyles.AssumeUniversal)
+                {
+                        value = value.ToUniversalTime();
+                }
+
+                text = value.ToString(_dateTimeFormat ?? DefaultDateTimeFormat, Culture);
+
+                writer.WriteStringValue(text);
+        }
+
+        public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                string? dateText = reader.GetString();
+
+                if (string.IsNullOrEmpty(dateText) == false)
+                {
+                        if (!string.IsNullOrEmpty(_dateTimeFormat))
+                        {
+                                return DateTimeOffset.ParseExact(dateText, _dateTimeFormat, Culture, _dateTimeStyles);
+                        }
+                        else
+                        {
+                                return DateTimeOffset.Parse(dateText, Culture, _dateTimeStyles);
+                        }
+                }
+                else
+                {
+                        return default(DateTimeOffset);
+                }
+        }
+
+
+        public static readonly IsoDateTimeOffsetConverter Singleton = new IsoDateTimeOffsetConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
diff --git a/head/schema-csharp-SystemTextJson/test/inputs/schema/fractional-bounds.schema/number-type-decimal--20a123601b5a/QuickType.cs b/head/schema-csharp-SystemTextJson/test/inputs/schema/fractional-bounds.schema/number-type-decimal--20a123601b5a/QuickType.cs
new file mode 100644
index 0000000..d06dcaf
--- /dev/null
+++ b/head/schema-csharp-SystemTextJson/test/inputs/schema/fractional-bounds.schema/number-type-decimal--20a123601b5a/QuickType.cs
@@ -0,0 +1,194 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'System.Text.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Text.Json;
+    using System.Text.Json.Serialization;
+    using System.Globalization;
+
+    public partial class TopLevel
+    {
+        [JsonRequired]
+        [JsonPropertyName("value")]
+        [JsonConverter(typeof(MinMaxValueCheckConverter))]
+        public decimal Value { get; set; }
+    }
+
+    public partial class TopLevel
+    {
+        public static TopLevel FromJson(string json) => global::System.Text.Json.JsonSerializer.Deserialize<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonSerializer.Serialize(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerOptions Settings = new(JsonSerializerDefaults.General)
+        {
+            Converters =
+            {
+                new DateOnlyConverter(),
+                new TimeOnlyConverter(),
+                IsoDateTimeOffsetConverter.Singleton
+            },
+        };
+    }
+
+    internal class MinMaxValueCheckConverter : JsonConverter<decimal>
+    {
+        public override bool CanConvert(Type t) => t == typeof(decimal);
+
+        public override decimal Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetDecimal();
+            if (value >= 0.1m && value <= 0.9m)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type decimal");
+        }
+
+        public override void Write(Utf8JsonWriter writer, decimal value, JsonSerializerOptions options)
+        {
+            if (value >= 0.1m && value <= 0.9m)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type decimal");
+        }
+
+        public static readonly MinMaxValueCheckConverter Singleton = new MinMaxValueCheckConverter();
+    }
+    
+    public class DateOnlyConverter : JsonConverter<DateOnly>
+    {
+        private readonly string serializationFormat;
+        public DateOnlyConverter() : this(null) { }
+
+        public DateOnlyConverter(string? serializationFormat)
+        {
+                this.serializationFormat = serializationFormat ?? "yyyy-MM-dd";
+        }
+
+        public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                var value = reader.GetString();
+                return DateOnly.Parse(value!);
+        }
+
+        public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options)
+                => writer.WriteStringValue(value.ToString(serializationFormat));
+    }
+
+    public class TimeOnlyConverter : JsonConverter<TimeOnly>
+    {
+        private readonly string serializationFormat;
+
+        public TimeOnlyConverter() : this(null) { }
+
+        public TimeOnlyConverter(string? serializationFormat)
+        {
+                this.serializationFormat = serializationFormat ?? "HH:mm:ss.fff";
+        }
+
+        public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                var value = reader.GetString();
+                return TimeOnly.Parse(value!);
+        }
+
+        public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options)
+                => writer.WriteStringValue(value.ToString(serializationFormat));
+    }
+
+    internal class IsoDateTimeOffsetConverter : JsonConverter<DateTimeOffset>
+    {
+        public override bool CanConvert(Type t) => t == typeof(DateTimeOffset);
+
+        private const string DefaultDateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK";
+
+        private DateTimeStyles _dateTimeStyles = DateTimeStyles.RoundtripKind;
+        private string? _dateTimeFormat;
+        private CultureInfo? _culture;
+
+        public DateTimeStyles DateTimeStyles
+        {
+                get => _dateTimeStyles;
+                set => _dateTimeStyles = value;
+        }
+
+        public string? DateTimeFormat
+        {
+                get => _dateTimeFormat ?? string.Empty;
+                set => _dateTimeFormat = (string.IsNullOrEmpty(value)) ? null : value;
+        }
+
+        public CultureInfo Culture
+        {
+                get => _culture ?? CultureInfo.CurrentCulture;
+                set => _culture = value;
+        }
+
+        public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options)
+        {
+                string text;
+
+
+                if ((_dateTimeStyles & DateTimeStyles.AdjustToUniversal) == DateTimeStyles.AdjustToUniversal
+                        || (_dateTimeStyles & DateTimeStyles.AssumeUniversal) == DateTimeStyles.AssumeUniversal)
+                {
+                        value = value.ToUniversalTime();
+                }
+
+                text = value.ToString(_dateTimeFormat ?? DefaultDateTimeFormat, Culture);
+
+                writer.WriteStringValue(text);
+        }
+
+        public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+                string? dateText = reader.GetString();
+
+                if (string.IsNullOrEmpty(dateText) == false)
+                {
+                        if (!string.IsNullOrEmpty(_dateTimeFormat))
+                        {
+                                return DateTimeOffset.ParseExact(dateText, _dateTimeFormat, Culture, _dateTimeStyles);
+                        }
+                        else
+                        {
+                                return DateTimeOffset.Parse(dateText, Culture, _dateTimeStyles);
+                        }
+                }
+                else
+                {
+                        return default(DateTimeOffset);
+                }
+        }
+
+
+        public static readonly IsoDateTimeOffsetConverter Singleton = new IsoDateTimeOffsetConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
diff --git a/base/schema-csharp-SystemTextJson/test/inputs/schema/integer-type.schema/default/QuickType.cs b/head/schema-csharp-SystemTextJson/test/inputs/schema/integer-type.schema/default/QuickType.cs
index a52c0dd..30e6c27 100644
--- a/base/schema-csharp-SystemTextJson/test/inputs/schema/integer-type.schema/default/QuickType.cs
+++ b/head/schema-csharp-SystemTextJson/test/inputs/schema/integer-type.schema/default/QuickType.cs
@@ -24,34 +24,42 @@ namespace QuickType
     {
         [JsonRequired]
         [JsonPropertyName("above_i32_max")]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
         public long AboveI32Max { get; set; }
 
         [JsonRequired]
         [JsonPropertyName("below_i32_min")]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
         public long BelowI32Min { get; set; }
 
         [JsonRequired]
         [JsonPropertyName("i32_range")]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
         public long I32Range { get; set; }
 
         [JsonRequired]
         [JsonPropertyName("large_bounds")]
+        [JsonConverter(typeof(StickyMinMaxValueCheckConverter))]
         public long LargeBounds { get; set; }
 
         [JsonRequired]
         [JsonPropertyName("only_maximum")]
+        [JsonConverter(typeof(IndigoMinMaxValueCheckConverter))]
         public long OnlyMaximum { get; set; }
 
         [JsonRequired]
         [JsonPropertyName("only_minimum")]
+        [JsonConverter(typeof(IndecentMinMaxValueCheckConverter))]
         public long OnlyMinimum { get; set; }
 
         [JsonRequired]
         [JsonPropertyName("small_negative")]
+        [JsonConverter(typeof(HilariousMinMaxValueCheckConverter))]
         public long SmallNegative { get; set; }
 
         [JsonRequired]
         [JsonPropertyName("small_positive")]
+        [JsonConverter(typeof(AmbitiousMinMaxValueCheckConverter))]
         public long SmallPositive { get; set; }
 
         [JsonRequired]
@@ -81,6 +89,222 @@ namespace QuickType
             },
         };
     }
+
+    internal class PurpleMinMaxValueCheckConverter : JsonConverter<long>
+    {
+        public override bool CanConvert(Type t) => t == typeof(long);
+
+        public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetInt64();
+            if (value >= 0 && value <= 2147483648)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type long");
+        }
+
+        public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
+        {
+            if (value >= 0 && value <= 2147483648)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type long");
+        }
+
+        public static readonly PurpleMinMaxValueCheckConverter Singleton = new PurpleMinMaxValueCheckConverter();
+    }
+
+    internal class FluffyMinMaxValueCheckConverter : JsonConverter<long>
+    {
+        public override bool CanConvert(Type t) => t == typeof(long);
+
+        public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetInt64();
+            if (value >= -2147483649 && value <= 0)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type long");
+        }
+
+        public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
+        {
+            if (value >= -2147483649 && value <= 0)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type long");
+        }
+
+        public static readonly FluffyMinMaxValueCheckConverter Singleton = new FluffyMinMaxValueCheckConverter();
+    }
+
+    internal class TentacledMinMaxValueCheckConverter : JsonConverter<long>
+    {
+        public override bool CanConvert(Type t) => t == typeof(long);
+
+        public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetInt64();
+            if (value >= -2147483648 && value <= 2147483647)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type long");
+        }
+
+        public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
+        {
+            if (value >= -2147483648 && value <= 2147483647)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type long");
+        }
+
+        public static readonly TentacledMinMaxValueCheckConverter Singleton = new TentacledMinMaxValueCheckConverter();
+    }
+
+    internal class StickyMinMaxValueCheckConverter : JsonConverter<long>
+    {
+        public override bool CanConvert(Type t) => t == typeof(long);
+
+        public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetInt64();
+            if (value >= -9007199254740991 && value <= 9007199254740991)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type long");
+        }
+
+        public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
+        {
+            if (value >= -9007199254740991 && value <= 9007199254740991)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type long");
+        }
+
+        public static readonly StickyMinMaxValueCheckConverter Singleton = new StickyMinMaxValueCheckConverter();
+    }
+
+    internal class IndigoMinMaxValueCheckConverter : JsonConverter<long>
+    {
+        public override bool CanConvert(Type t) => t == typeof(long);
+
+        public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetInt64();
+            if (value <= 0)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type long");
+        }
+
+        public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
+        {
+            if (value <= 0)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type long");
+        }
+
+        public static readonly IndigoMinMaxValueCheckConverter Singleton = new IndigoMinMaxValueCheckConverter();
+    }
+
+    internal class IndecentMinMaxValueCheckConverter : JsonConverter<long>
+    {
+        public override bool CanConvert(Type t) => t == typeof(long);
+
+        public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetInt64();
+            if (value >= 0)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type long");
+        }
+
+        public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
+        {
+            if (value >= 0)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type long");
+        }
+
+        public static readonly IndecentMinMaxValueCheckConverter Singleton = new IndecentMinMaxValueCheckConverter();
+    }
+
+    internal class HilariousMinMaxValueCheckConverter : JsonConverter<long>
+    {
+        public override bool CanConvert(Type t) => t == typeof(long);
+
+        public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetInt64();
+            if (value >= -100 && value <= 0)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type long");
+        }
+
+        public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
+        {
+            if (value >= -100 && value <= 0)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type long");
+        }
+
+        public static readonly HilariousMinMaxValueCheckConverter Singleton = new HilariousMinMaxValueCheckConverter();
+    }
+
+    internal class AmbitiousMinMaxValueCheckConverter : JsonConverter<long>
+    {
+        public override bool CanConvert(Type t) => t == typeof(long);
+
+        public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetInt64();
+            if (value >= 0 && value <= 100)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type long");
+        }
+
+        public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
+        {
+            if (value >= 0 && value <= 100)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type long");
+        }
+
+        public static readonly AmbitiousMinMaxValueCheckConverter Singleton = new AmbitiousMinMaxValueCheckConverter();
+    }
     
     public class DateOnlyConverter : JsonConverter<DateOnly>
     {
diff --git a/base/schema-csharp-SystemTextJson/test/inputs/schema/minmax-integer.schema/default/QuickType.cs b/head/schema-csharp-SystemTextJson/test/inputs/schema/minmax-integer.schema/default/QuickType.cs
index 271b440..4339f35 100644
--- a/base/schema-csharp-SystemTextJson/test/inputs/schema/minmax-integer.schema/default/QuickType.cs
+++ b/head/schema-csharp-SystemTextJson/test/inputs/schema/minmax-integer.schema/default/QuickType.cs
@@ -28,22 +28,27 @@ namespace QuickType
 
         [JsonRequired]
         [JsonPropertyName("intersection")]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
         public long Intersection { get; set; }
 
         [JsonRequired]
         [JsonPropertyName("max")]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
         public long Max { get; set; }
 
         [JsonRequired]
         [JsonPropertyName("min")]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
         public long Min { get; set; }
 
         [JsonRequired]
         [JsonPropertyName("minmax")]
+        [JsonConverter(typeof(StickyMinMaxValueCheckConverter))]
         public long Minmax { get; set; }
 
         [JsonRequired]
         [JsonPropertyName("minMaxIntersection")]
+        [JsonConverter(typeof(StickyMinMaxValueCheckConverter))]
         public long MinMaxIntersection { get; set; }
 
         [JsonRequired]
@@ -52,6 +57,7 @@ namespace QuickType
 
         [JsonRequired]
         [JsonPropertyName("union")]
+        [JsonConverter(typeof(IndigoMinMaxValueCheckConverter))]
         public long Union { get; set; }
     }
 
@@ -77,6 +83,141 @@ namespace QuickType
             },
         };
     }
+
+    internal class PurpleMinMaxValueCheckConverter : JsonConverter<long>
+    {
+        public override bool CanConvert(Type t) => t == typeof(long);
+
+        public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetInt64();
+            if (value >= 4 && value <= 5)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type long");
+        }
+
+        public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
+        {
+            if (value >= 4 && value <= 5)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type long");
+        }
+
+        public static readonly PurpleMinMaxValueCheckConverter Singleton = new PurpleMinMaxValueCheckConverter();
+    }
+
+    internal class FluffyMinMaxValueCheckConverter : JsonConverter<long>
+    {
+        public override bool CanConvert(Type t) => t == typeof(long);
+
+        public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetInt64();
+            if (value <= 5)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type long");
+        }
+
+        public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
+        {
+            if (value <= 5)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type long");
+        }
+
+        public static readonly FluffyMinMaxValueCheckConverter Singleton = new FluffyMinMaxValueCheckConverter();
+    }
+
+    internal class TentacledMinMaxValueCheckConverter : JsonConverter<long>
+    {
+        public override bool CanConvert(Type t) => t == typeof(long);
+
+        public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetInt64();
+            if (value >= 3)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type long");
+        }
+
+        public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
+        {
+            if (value >= 3)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type long");
+        }
+
+        public static readonly TentacledMinMaxValueCheckConverter Singleton = new TentacledMinMaxValueCheckConverter();
+    }
+
+    internal class StickyMinMaxValueCheckConverter : JsonConverter<long>
+    {
+        public override bool CanConvert(Type t) => t == typeof(long);
+
+        public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetInt64();
+            if (value >= 3 && value <= 5)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type long");
+        }
+
+        public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
+        {
+            if (value >= 3 && value <= 5)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type long");
+        }
+
+        public static readonly StickyMinMaxValueCheckConverter Singleton = new StickyMinMaxValueCheckConverter();
+    }
+
+    internal class IndigoMinMaxValueCheckConverter : JsonConverter<long>
+    {
+        public override bool CanConvert(Type t) => t == typeof(long);
+
+        public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetInt64();
+            if (value >= 3 && value <= 6)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type long");
+        }
+
+        public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
+        {
+            if (value >= 3 && value <= 6)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type long");
+        }
+
+        public static readonly IndigoMinMaxValueCheckConverter Singleton = new IndigoMinMaxValueCheckConverter();
+    }
     
     public class DateOnlyConverter : JsonConverter<DateOnly>
     {
diff --git a/base/schema-csharp-SystemTextJson/test/inputs/schema/optional-const-ref.schema/default/QuickType.cs b/head/schema-csharp-SystemTextJson/test/inputs/schema/optional-const-ref.schema/default/QuickType.cs
index f15eb9b..19c6094 100644
--- a/base/schema-csharp-SystemTextJson/test/inputs/schema/optional-const-ref.schema/default/QuickType.cs
+++ b/head/schema-csharp-SystemTextJson/test/inputs/schema/optional-const-ref.schema/default/QuickType.cs
@@ -28,6 +28,7 @@ namespace QuickType
 
         [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
         [JsonPropertyName("count")]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
         public long? Count { get; set; }
 
         [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
@@ -41,6 +42,7 @@ namespace QuickType
 
         [JsonRequired]
         [JsonPropertyName("requiredCount")]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
         public long RequiredCount { get; set; }
 
         [JsonRequired]
@@ -50,7 +52,7 @@ namespace QuickType
 
         [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
         [JsonPropertyName("weight")]
-        [JsonConverter(typeof(MinMaxValueCheckConverter))]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
         public double? Weight { get; set; }
     }
 
@@ -88,6 +90,33 @@ namespace QuickType
         };
     }
 
+    internal class PurpleMinMaxValueCheckConverter : JsonConverter<long>
+    {
+        public override bool CanConvert(Type t) => t == typeof(long);
+
+        public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetInt64();
+            if (value >= 1 && value <= 100)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type long");
+        }
+
+        public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
+        {
+            if (value >= 1 && value <= 100)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type long");
+        }
+
+        public static readonly PurpleMinMaxValueCheckConverter Singleton = new PurpleMinMaxValueCheckConverter();
+    }
+
     internal class MinMaxLengthCheckConverter : JsonConverter<string>
     {
         public override bool CanConvert(Type t) => t == typeof(string);
@@ -115,7 +144,7 @@ namespace QuickType
         public static readonly MinMaxLengthCheckConverter Singleton = new MinMaxLengthCheckConverter();
     }
 
-    internal class MinMaxValueCheckConverter : JsonConverter<double>
+    internal class FluffyMinMaxValueCheckConverter : JsonConverter<double>
     {
         public override bool CanConvert(Type t) => t == typeof(double);
 
@@ -139,7 +168,7 @@ namespace QuickType
             throw new NotSupportedException("Cannot marshal type double");
         }
 
-        public static readonly MinMaxValueCheckConverter Singleton = new MinMaxValueCheckConverter();
+        public static readonly FluffyMinMaxValueCheckConverter Singleton = new FluffyMinMaxValueCheckConverter();
     }
     
     public class DateOnlyConverter : JsonConverter<DateOnly>
diff --git a/base/schema-csharp-SystemTextJson/test/inputs/schema/optional-constraints.schema/default/QuickType.cs b/head/schema-csharp-SystemTextJson/test/inputs/schema/optional-constraints.schema/default/QuickType.cs
index f834abf..a701f79 100644
--- a/base/schema-csharp-SystemTextJson/test/inputs/schema/optional-constraints.schema/default/QuickType.cs
+++ b/head/schema-csharp-SystemTextJson/test/inputs/schema/optional-constraints.schema/default/QuickType.cs
@@ -24,11 +24,12 @@ namespace QuickType
     {
         [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
         [JsonPropertyName("optDouble")]
-        [JsonConverter(typeof(MinMaxValueCheckConverter))]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
         public double? OptDouble { get; set; }
 
         [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
         [JsonPropertyName("optInt")]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
         public long? OptInt { get; set; }
 
         [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
@@ -42,6 +43,7 @@ namespace QuickType
 
         [JsonRequired]
         [JsonPropertyName("reqZeroMin")]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
         public long ReqZeroMin { get; set; }
     }
 
@@ -68,7 +70,7 @@ namespace QuickType
         };
     }
 
-    internal class MinMaxValueCheckConverter : JsonConverter<double>
+    internal class PurpleMinMaxValueCheckConverter : JsonConverter<double>
     {
         public override bool CanConvert(Type t) => t == typeof(double);
 
@@ -92,7 +94,34 @@ namespace QuickType
             throw new NotSupportedException("Cannot marshal type double");
         }
 
-        public static readonly MinMaxValueCheckConverter Singleton = new MinMaxValueCheckConverter();
+        public static readonly PurpleMinMaxValueCheckConverter Singleton = new PurpleMinMaxValueCheckConverter();
+    }
+
+    internal class FluffyMinMaxValueCheckConverter : JsonConverter<long>
+    {
+        public override bool CanConvert(Type t) => t == typeof(long);
+
+        public override long Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+        {
+            var value = reader.GetInt64();
+            if (value >= 0 && value <= 100)
+            {
+                return value;
+            }
+            throw new JsonException("Cannot unmarshal type long");
+        }
+
+        public override void Write(Utf8JsonWriter writer, long value, JsonSerializerOptions options)
+        {
+            if (value >= 0 && value <= 100)
+            {
+                JsonSerializer.Serialize(writer, value, options);
+                return;
+            }
+            throw new NotSupportedException("Cannot marshal type long");
+        }
+
+        public static readonly FluffyMinMaxValueCheckConverter Singleton = new FluffyMinMaxValueCheckConverter();
     }
 
     internal class MinMaxLengthCheckConverter : JsonConverter<string>
diff --git a/head/schema-csharp-records/test/inputs/schema/fractional-bounds.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/fractional-bounds.schema/default/QuickType.cs
new file mode 100644
index 0000000..68f4078
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/fractional-bounds.schema/default/QuickType.cs
@@ -0,0 +1,96 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("value", Required = Required.Always)]
+        [JsonConverter(typeof(MinMaxValueCheckConverter))]
+        public double Value { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class MinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<double>(reader);
+            if (value >= 0.1 && value <= 0.9)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type double");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (double)untypedValue;
+            if (value >= 0.1 && value <= 0.9)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type double");
+        }
+
+        public static readonly MinMaxValueCheckConverter Singleton = new MinMaxValueCheckConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/fractional-bounds.schema/number-type-decimal--20a123601b5a/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/fractional-bounds.schema/number-type-decimal--20a123601b5a/QuickType.cs
new file mode 100644
index 0000000..8c33892
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/fractional-bounds.schema/number-type-decimal--20a123601b5a/QuickType.cs
@@ -0,0 +1,96 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("value", Required = Required.Always)]
+        [JsonConverter(typeof(MinMaxValueCheckConverter))]
+        public decimal Value { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+
+    internal class MinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(decimal) || t == typeof(decimal?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<decimal>(reader);
+            if (value >= 0.1m && value <= 0.9m)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type decimal");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (decimal)untypedValue;
+            if (value >= 0.1m && value <= 0.9m)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type decimal");
+        }
+
+        public static readonly MinMaxValueCheckConverter Singleton = new MinMaxValueCheckConverter();
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/base/schema-csharp-records/test/inputs/schema/integer-type.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/integer-type.schema/default/QuickType.cs
index 368dd60..a955f14 100644
--- a/base/schema-csharp-records/test/inputs/schema/integer-type.schema/default/QuickType.cs
+++ b/head/schema-csharp-records/test/inputs/schema/integer-type.schema/default/QuickType.cs
@@ -26,27 +26,35 @@ namespace QuickType
     public partial record TopLevel
     {
         [JsonProperty("above_i32_max", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
         public long AboveI32Max { get; set; }
 
         [JsonProperty("below_i32_min", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
         public long BelowI32Min { get; set; }
 
         [JsonProperty("i32_range", Required = Required.Always)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
         public long I32Range { get; set; }
 
         [JsonProperty("large_bounds", Required = Required.Always)]
+        [JsonConverter(typeof(StickyMinMaxValueCheckConverter))]
         public long LargeBounds { get; set; }
 
         [JsonProperty("only_maximum", Required = Required.Always)]
+        [JsonConverter(typeof(IndigoMinMaxValueCheckConverter))]
         public long OnlyMaximum { get; set; }
 
         [JsonProperty("only_minimum", Required = Required.Always)]
+        [JsonConverter(typeof(IndecentMinMaxValueCheckConverter))]
         public long OnlyMinimum { get; set; }
 
         [JsonProperty("small_negative", Required = Required.Always)]
+        [JsonConverter(typeof(HilariousMinMaxValueCheckConverter))]
         public long SmallNegative { get; set; }
 
         [JsonProperty("small_positive", Required = Required.Always)]
+        [JsonConverter(typeof(AmbitiousMinMaxValueCheckConverter))]
         public long SmallPositive { get; set; }
 
         [JsonProperty("unbounded", Required = Required.Always)]
@@ -75,6 +83,278 @@ namespace QuickType
             },
         };
     }
+
+    internal class PurpleMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 0 && value <= 2147483648)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 0 && value <= 2147483648)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly PurpleMinMaxValueCheckConverter Singleton = new PurpleMinMaxValueCheckConverter();
+    }
+
+    internal class FluffyMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= -2147483649 && value <= 0)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= -2147483649 && value <= 0)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly FluffyMinMaxValueCheckConverter Singleton = new FluffyMinMaxValueCheckConverter();
+    }
+
+    internal class TentacledMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= -2147483648 && value <= 2147483647)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= -2147483648 && value <= 2147483647)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly TentacledMinMaxValueCheckConverter Singleton = new TentacledMinMaxValueCheckConverter();
+    }
+
+    internal class StickyMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= -9007199254740991 && value <= 9007199254740991)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= -9007199254740991 && value <= 9007199254740991)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly StickyMinMaxValueCheckConverter Singleton = new StickyMinMaxValueCheckConverter();
+    }
+
+    internal class IndigoMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value <= 0)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value <= 0)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly IndigoMinMaxValueCheckConverter Singleton = new IndigoMinMaxValueCheckConverter();
+    }
+
+    internal class IndecentMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 0)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 0)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly IndecentMinMaxValueCheckConverter Singleton = new IndecentMinMaxValueCheckConverter();
+    }
+
+    internal class HilariousMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= -100 && value <= 0)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= -100 && value <= 0)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly HilariousMinMaxValueCheckConverter Singleton = new HilariousMinMaxValueCheckConverter();
+    }
+
+    internal class AmbitiousMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 0 && value <= 100)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 0 && value <= 100)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly AmbitiousMinMaxValueCheckConverter Singleton = new AmbitiousMinMaxValueCheckConverter();
+    }
 }
 #pragma warning restore CS8618
 #pragma warning restore CS8601
diff --git a/base/schema-csharp-records/test/inputs/schema/minmax-integer.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/minmax-integer.schema/default/QuickType.cs
index ca81abc..15d23d9 100644
--- a/base/schema-csharp-records/test/inputs/schema/minmax-integer.schema/default/QuickType.cs
+++ b/head/schema-csharp-records/test/inputs/schema/minmax-integer.schema/default/QuickType.cs
@@ -29,24 +29,30 @@ namespace QuickType
         public long Free { get; set; }
 
         [JsonProperty("intersection", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
         public long Intersection { get; set; }
 
         [JsonProperty("max", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
         public long Max { get; set; }
 
         [JsonProperty("min", Required = Required.Always)]
+        [JsonConverter(typeof(TentacledMinMaxValueCheckConverter))]
         public long Min { get; set; }
 
         [JsonProperty("minmax", Required = Required.Always)]
+        [JsonConverter(typeof(StickyMinMaxValueCheckConverter))]
         public long Minmax { get; set; }
 
         [JsonProperty("minMaxIntersection", Required = Required.Always)]
+        [JsonConverter(typeof(StickyMinMaxValueCheckConverter))]
         public long MinMaxIntersection { get; set; }
 
         [JsonProperty("minMaxUnion", Required = Required.Always)]
         public long MinMaxUnion { get; set; }
 
         [JsonProperty("union", Required = Required.Always)]
+        [JsonConverter(typeof(IndigoMinMaxValueCheckConverter))]
         public long Union { get; set; }
     }
 
@@ -72,6 +78,176 @@ namespace QuickType
             },
         };
     }
+
+    internal class PurpleMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 4 && value <= 5)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 4 && value <= 5)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly PurpleMinMaxValueCheckConverter Singleton = new PurpleMinMaxValueCheckConverter();
+    }
+
+    internal class FluffyMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value <= 5)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value <= 5)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly FluffyMinMaxValueCheckConverter Singleton = new FluffyMinMaxValueCheckConverter();
+    }
+
+    internal class TentacledMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 3)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 3)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly TentacledMinMaxValueCheckConverter Singleton = new TentacledMinMaxValueCheckConverter();
+    }
+
+    internal class StickyMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 3 && value <= 5)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 3 && value <= 5)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly StickyMinMaxValueCheckConverter Singleton = new StickyMinMaxValueCheckConverter();
+    }
+
+    internal class IndigoMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 3 && value <= 6)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 3 && value <= 6)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly IndigoMinMaxValueCheckConverter Singleton = new IndigoMinMaxValueCheckConverter();
+    }
 }
 #pragma warning restore CS8618
 #pragma warning restore CS8601
diff --git a/base/schema-csharp-records/test/inputs/schema/optional-const-ref.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/optional-const-ref.schema/default/QuickType.cs
index 4e6ea38..5313012 100644
--- a/base/schema-csharp-records/test/inputs/schema/optional-const-ref.schema/default/QuickType.cs
+++ b/head/schema-csharp-records/test/inputs/schema/optional-const-ref.schema/default/QuickType.cs
@@ -29,6 +29,7 @@ namespace QuickType
         public Coordinate[]? Coordinates { get; set; }
 
         [JsonProperty("count", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
         public long? Count { get; set; }
 
         [JsonProperty("label", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
@@ -39,6 +40,7 @@ namespace QuickType
         public Coordinate[] RequiredCoordinates { get; set; }
 
         [JsonProperty("requiredCount", Required = Required.Always)]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
         public long RequiredCount { get; set; }
 
         [JsonProperty("requiredLabel", Required = Required.Always)]
@@ -46,7 +48,7 @@ namespace QuickType
         public string RequiredLabel { get; set; }
 
         [JsonProperty("weight", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
-        [JsonConverter(typeof(MinMaxValueCheckConverter))]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
         public double? Weight { get; set; }
     }
 
@@ -82,6 +84,40 @@ namespace QuickType
         };
     }
 
+    internal class PurpleMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 1 && value <= 100)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 1 && value <= 100)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly PurpleMinMaxValueCheckConverter Singleton = new PurpleMinMaxValueCheckConverter();
+    }
+
     internal class MinMaxLengthCheckConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(string);
@@ -110,7 +146,7 @@ namespace QuickType
         public static readonly MinMaxLengthCheckConverter Singleton = new MinMaxLengthCheckConverter();
     }
 
-    internal class MinMaxValueCheckConverter : JsonConverter
+    internal class FluffyMinMaxValueCheckConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
 
@@ -141,7 +177,7 @@ namespace QuickType
             throw new Exception("Cannot marshal type double");
         }
 
-        public static readonly MinMaxValueCheckConverter Singleton = new MinMaxValueCheckConverter();
+        public static readonly FluffyMinMaxValueCheckConverter Singleton = new FluffyMinMaxValueCheckConverter();
     }
 }
 #pragma warning restore CS8618
diff --git a/base/schema-csharp-records/test/inputs/schema/optional-constraints.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/optional-constraints.schema/default/QuickType.cs
index 7a92f3f..48d1974 100644
--- a/base/schema-csharp-records/test/inputs/schema/optional-constraints.schema/default/QuickType.cs
+++ b/head/schema-csharp-records/test/inputs/schema/optional-constraints.schema/default/QuickType.cs
@@ -26,10 +26,11 @@ namespace QuickType
     public partial record TopLevel
     {
         [JsonProperty("optDouble", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
-        [JsonConverter(typeof(MinMaxValueCheckConverter))]
+        [JsonConverter(typeof(PurpleMinMaxValueCheckConverter))]
         public double? OptDouble { get; set; }
 
         [JsonProperty("optInt", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
         public long? OptInt { get; set; }
 
         [JsonProperty("optPattern", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
@@ -40,6 +41,7 @@ namespace QuickType
         public string? OptString { get; set; }
 
         [JsonProperty("reqZeroMin", Required = Required.Always)]
+        [JsonConverter(typeof(FluffyMinMaxValueCheckConverter))]
         public long ReqZeroMin { get; set; }
     }
 
@@ -66,7 +68,7 @@ namespace QuickType
         };
     }
 
-    internal class MinMaxValueCheckConverter : JsonConverter
+    internal class PurpleMinMaxValueCheckConverter : JsonConverter
     {
         public override bool CanConvert(Type t) => t == typeof(double) || t == typeof(double?);
 
@@ -97,7 +99,41 @@ namespace QuickType
             throw new Exception("Cannot marshal type double");
         }
 
-        public static readonly MinMaxValueCheckConverter Singleton = new MinMaxValueCheckConverter();
+        public static readonly PurpleMinMaxValueCheckConverter Singleton = new PurpleMinMaxValueCheckConverter();
+    }
+
+    internal class FluffyMinMaxValueCheckConverter : JsonConverter
+    {
+        public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?);
+
+        public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.Null) return null;
+            var value = serializer.Deserialize<long>(reader);
+            if (value >= 0 && value <= 100)
+            {
+                return value;
+            }
+            throw new Exception("Cannot unmarshal type long");
+        }
+
+        public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
+        {
+            if (untypedValue == null)
+            {
+                serializer.Serialize(writer, null);
+                return;
+            }
+            var value = (long)untypedValue;
+            if (value >= 0 && value <= 100)
+            {
+                serializer.Serialize(writer, value);
+                return;
+            }
+            throw new Exception("Cannot marshal type long");
+        }
+
+        public static readonly FluffyMinMaxValueCheckConverter Singleton = new FluffyMinMaxValueCheckConverter();
     }
 
     internal class MinMaxLengthCheckConverter : JsonConverter
diff --git a/head/schema-dart/test/inputs/regressions/unicode-codepoint-length.schema/default/TopLevel.dart b/head/schema-dart/test/inputs/regressions/unicode-codepoint-length.schema/default/TopLevel.dart
new file mode 100644
index 0000000..8e891ab
--- /dev/null
+++ b/head/schema-dart/test/inputs/regressions/unicode-codepoint-length.schema/default/TopLevel.dart
@@ -0,0 +1,33 @@
+// To parse this JSON data, do
+//
+//     final topLevel = topLevelFromJson(jsonString);
+
+import 'dart:convert';
+
+TopLevel topLevelFromJson(String str) => TopLevel.fromJson(json.decode(str));
+
+String topLevelToJson(TopLevel data) => json.encode(data.toJson());
+
+class TopLevel {
+    final String exact;
+    final String maximum;
+    final String minimum;
+
+    TopLevel({
+        required this.exact,
+        required this.maximum,
+        required this.minimum,
+    });
+
+    factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
+        exact: ((x) => RegExp("^[^!]+\u0024").hasMatch(x) ? x : throw FormatException("Expected matching string"))(((x) => x.runes.length >= 2 && x.runes.length <= 2 ? x : throw FormatException("Expected bounded string"))(json["exact"])),
+        maximum: ((x) => true && x.runes.length <= 1 ? x : throw FormatException("Expected bounded string"))(json["maximum"]),
+        minimum: ((x) => x.runes.length >= 2 && true ? x : throw FormatException("Expected bounded string"))(json["minimum"]),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "exact": exact,
+        "maximum": maximum,
+        "minimum": minimum,
+    };
+}
diff --git a/head/schema-dart/test/inputs/schema/fractional-bounds.schema/default/TopLevel.dart b/head/schema-dart/test/inputs/schema/fractional-bounds.schema/default/TopLevel.dart
new file mode 100644
index 0000000..632b640
--- /dev/null
+++ b/head/schema-dart/test/inputs/schema/fractional-bounds.schema/default/TopLevel.dart
@@ -0,0 +1,25 @@
+// To parse this JSON data, do
+//
+//     final topLevel = topLevelFromJson(jsonString);
+
+import 'dart:convert';
+
+TopLevel topLevelFromJson(String str) => TopLevel.fromJson(json.decode(str));
+
+String topLevelToJson(TopLevel data) => json.encode(data.toJson());
+
+class TopLevel {
+    final double value;
+
+    TopLevel({
+        required this.value,
+    });
+
+    factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
+        value: ((x) => x >= 0.1 && x <= 0.9 ? x : throw FormatException("Expected bounded number"))(json["value"]?.toDouble()),
+    );
+
+    Map<String, dynamic> toJson() => {
+        "value": value,
+    };
+}
diff --git a/base/schema-dart/test/inputs/schema/minmaxlength.schema/default/TopLevel.dart b/head/schema-dart/test/inputs/schema/minmaxlength.schema/default/TopLevel.dart
index f1634f2..aaf220c 100644
--- a/base/schema-dart/test/inputs/schema/minmaxlength.schema/default/TopLevel.dart
+++ b/head/schema-dart/test/inputs/schema/minmaxlength.schema/default/TopLevel.dart
@@ -30,14 +30,14 @@ class TopLevel {
     });
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
-        intersection: ((x) => x.length >= 4 && x.length <= 5 ? x : throw FormatException("Expected bounded string"))(json["intersection"]),
+        intersection: ((x) => x.runes.length >= 4 && x.runes.length <= 5 ? x : throw FormatException("Expected bounded string"))(json["intersection"]),
         inUnion: json["inUnion"],
-        maxlength: ((x) => true && x.length <= 5 ? x : throw FormatException("Expected bounded string"))(json["maxlength"]),
-        minlength: ((x) => x.length >= 3 && true ? x : throw FormatException("Expected bounded string"))(json["minlength"]),
-        minMaxIntersection: ((x) => x.length >= 3 && x.length <= 5 ? x : throw FormatException("Expected bounded string"))(json["minMaxIntersection"]),
-        minmaxlength: ((x) => x.length >= 3 && x.length <= 5 ? x : throw FormatException("Expected bounded string"))(json["minmaxlength"]),
+        maxlength: ((x) => true && x.runes.length <= 5 ? x : throw FormatException("Expected bounded string"))(json["maxlength"]),
+        minlength: ((x) => x.runes.length >= 3 && true ? x : throw FormatException("Expected bounded string"))(json["minlength"]),
+        minMaxIntersection: ((x) => x.runes.length >= 3 && x.runes.length <= 5 ? x : throw FormatException("Expected bounded string"))(json["minMaxIntersection"]),
+        minmaxlength: ((x) => x.runes.length >= 3 && x.runes.length <= 5 ? x : throw FormatException("Expected bounded string"))(json["minmaxlength"]),
         minMaxUnion: json["minMaxUnion"],
-        union: ((x) => x.length >= 3 && x.length <= 6 ? x : throw FormatException("Expected bounded string"))(json["union"]),
+        union: ((x) => x.runes.length >= 3 && x.runes.length <= 6 ? x : throw FormatException("Expected bounded string"))(json["union"]),
     );
 
     Map<String, dynamic> toJson() => {
diff --git a/base/schema-dart/test/inputs/schema/optional-const-ref.schema/default/TopLevel.dart b/head/schema-dart/test/inputs/schema/optional-const-ref.schema/default/TopLevel.dart
index 47f7b1d..ca79572 100644
--- a/base/schema-dart/test/inputs/schema/optional-const-ref.schema/default/TopLevel.dart
+++ b/head/schema-dart/test/inputs/schema/optional-const-ref.schema/default/TopLevel.dart
@@ -30,10 +30,10 @@ class TopLevel {
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
         coordinates: json["coordinates"] == null ? null : List<Coordinate>.from(json["coordinates"]!.map((x) => Coordinate.fromJson(x))),
         count: json["count"] == null ? null : ((x) => x >= 1 && x <= 100 ? x : throw FormatException("Expected bounded number"))(json["count"]),
-        label: json["label"] == null ? null : ((x) => x.length >= 2 && x.length <= 16 ? x : throw FormatException("Expected bounded string"))(json["label"]),
+        label: json["label"] == null ? null : ((x) => x.runes.length >= 2 && x.runes.length <= 16 ? x : throw FormatException("Expected bounded string"))(json["label"]),
         requiredCoordinates: List<Coordinate>.from(json["requiredCoordinates"].map((x) => Coordinate.fromJson(x))),
         requiredCount: ((x) => x >= 1 && x <= 100 ? x : throw FormatException("Expected bounded number"))(json["requiredCount"]),
-        requiredLabel: ((x) => x.length >= 2 && x.length <= 16 ? x : throw FormatException("Expected bounded string"))(json["requiredLabel"]),
+        requiredLabel: ((x) => x.runes.length >= 2 && x.runes.length <= 16 ? x : throw FormatException("Expected bounded string"))(json["requiredLabel"]),
         weight: json["weight"]?.toDouble() == null ? null : ((x) => x >= 0.5 && x <= 99.5 ? x : throw FormatException("Expected bounded number"))(json["weight"]?.toDouble()),
     );
 
diff --git a/base/schema-dart/test/inputs/schema/optional-constraints.schema/default/TopLevel.dart b/head/schema-dart/test/inputs/schema/optional-constraints.schema/default/TopLevel.dart
index 3163740..1111bcb 100644
--- a/base/schema-dart/test/inputs/schema/optional-constraints.schema/default/TopLevel.dart
+++ b/head/schema-dart/test/inputs/schema/optional-constraints.schema/default/TopLevel.dart
@@ -27,7 +27,7 @@ class TopLevel {
         optDouble: json["optDouble"]?.toDouble() == null ? null : ((x) => x >= 0.5 && x <= 99.5 ? x : throw FormatException("Expected bounded number"))(json["optDouble"]?.toDouble()),
         optInt: json["optInt"] == null ? null : ((x) => x >= 0 && x <= 100 ? x : throw FormatException("Expected bounded number"))(json["optInt"]),
         optPattern: json["optPattern"] == null ? null : ((x) => RegExp("^[a-z]+\u0024").hasMatch(x) ? x : throw FormatException("Expected matching string"))(json["optPattern"]),
-        optString: json["optString"] == null ? null : ((x) => x.length >= 3 && x.length <= 10 ? x : throw FormatException("Expected bounded string"))(json["optString"]),
+        optString: json["optString"] == null ? null : ((x) => x.runes.length >= 3 && x.runes.length <= 10 ? x : throw FormatException("Expected bounded string"))(json["optString"]),
         reqZeroMin: ((x) => x >= 0 && x <= 100 ? x : throw FormatException("Expected bounded number"))(json["reqZeroMin"]),
     );
 
diff --git a/base/schema-dart/test/inputs/schema/renaming-bug.schema/default/TopLevel.dart b/head/schema-dart/test/inputs/schema/renaming-bug.schema/default/TopLevel.dart
index 08e123e..660c8ca 100644
--- a/base/schema-dart/test/inputs/schema/renaming-bug.schema/default/TopLevel.dart
+++ b/head/schema-dart/test/inputs/schema/renaming-bug.schema/default/TopLevel.dart
@@ -69,7 +69,7 @@ class Berry {
 
     factory Berry.fromJson(Map<String, dynamic> json) => Berry(
         color: json["color"] == null ? null : Color.fromJson(json["color"]),
-        name: json["name"] == null ? null : ((x) => x.length >= 1 && true ? x : throw FormatException("Expected bounded string"))(json["name"]),
+        name: json["name"] == null ? null : ((x) => x.runes.length >= 1 && true ? x : throw FormatException("Expected bounded string"))(json["name"]),
         shapes: json["shapes"] == null ? null : List<Shape>.from(json["shapes"]!.map((x) => Shape.fromJson(x))),
     );
 
@@ -227,7 +227,7 @@ class Vehicle {
 
     factory Vehicle.fromJson(Map<String, dynamic> json) => Vehicle(
         brand: json["brand"],
-        id: json["id"] == null ? null : ((x) => x.length >= 1 && true ? x : throw FormatException("Expected bounded string"))(json["id"]),
+        id: json["id"] == null ? null : ((x) => x.runes.length >= 1 && true ? x : throw FormatException("Expected bounded string"))(json["id"]),
         speed: json["speed"] == null ? null : Speed.fromJson(json["speed"]),
         subModule: json["subModule"],
         type: json["type"] == null ? null : VehicleType.fromJson(json["type"]),
diff --git a/base/schema-dart/test/inputs/schema/schema-constraints.schema/default/TopLevel.dart b/head/schema-dart/test/inputs/schema/schema-constraints.schema/default/TopLevel.dart
index 01d92d0..3efdf2e 100644
--- a/base/schema-dart/test/inputs/schema/schema-constraints.schema/default/TopLevel.dart
+++ b/head/schema-dart/test/inputs/schema/schema-constraints.schema/default/TopLevel.dart
@@ -18,7 +18,7 @@ class TopLevel {
     });
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
-        minMaxLength: ((x) => x.length >= 5 && x.length <= 5 ? x : throw FormatException("Expected bounded string"))(json["minMaxLength"]),
+        minMaxLength: ((x) => x.runes.length >= 5 && x.runes.length <= 5 ? x : throw FormatException("Expected bounded string"))(json["minMaxLength"]),
         percent: ((x) => x >= 0 && x <= 1 ? x : throw FormatException("Expected bounded number"))(json["percent"]?.toDouble()),
     );
 
diff --git a/base/schema-dart/test/inputs/schema/uuid.schema/default/TopLevel.dart b/head/schema-dart/test/inputs/schema/uuid.schema/default/TopLevel.dart
index 7c5533f..85ad6be 100644
--- a/base/schema-dart/test/inputs/schema/uuid.schema/default/TopLevel.dart
+++ b/head/schema-dart/test/inputs/schema/uuid.schema/default/TopLevel.dart
@@ -14,7 +14,7 @@ class TopLevel {
     final String? nullable;
     final String one;
     final String? optional;
-    final String unionWithEnum;
+    final dynamic unionWithEnum;
 
     TopLevel({
         this.arrNullable,
@@ -26,11 +26,11 @@ class TopLevel {
     });
 
     factory TopLevel.fromJson(Map<String, dynamic> json) => TopLevel(
-        arrNullable: json["arrNullable"] == null ? null : List<String?>.from(json["arrNullable"]!.map((x) => x)),
-        arrOne: json["arrOne"] == null ? null : List<String>.from(json["arrOne"]!.map((x) => x)),
-        nullable: (json.containsKey("nullable") ? json["nullable"] : throw FormatException('Missing required property')),
-        one: json["one"],
-        optional: json["optional"],
+        arrNullable: json["arrNullable"] == null ? null : List<String?>.from(json["arrNullable"]!.map((x) => x == null ? null : ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(x))),
+        arrOne: json["arrOne"] == null ? null : List<String>.from(json["arrOne"]!.map((x) => ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(x))),
+        nullable: (json.containsKey("nullable") ? json["nullable"] : throw FormatException('Missing required property')) == null ? null : ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))((json.containsKey("nullable") ? json["nullable"] : throw FormatException('Missing required property'))),
+        one: ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(json["one"]),
+        optional: json["optional"] == null ? null : ((String x) => RegExp(r'^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$').hasMatch(x) ? x : throw FormatException('Invalid UUID'))(json["optional"]),
         unionWithEnum: json["unionWithEnum"],
     );
 
@@ -43,3 +43,23 @@ class TopLevel {
         "unionWithEnum": unionWithEnum,
     };
 }
+
+enum UnionWithEnumEnum {
+    FOO
+}
+
+final unionWithEnumEnumValues = EnumValues({
+    "foo": UnionWithEnumEnum.FOO
+});
+
+class EnumValues<T> {
+    Map<String, T> map;
+    late Map<T, String> reverseMap;
+
+    EnumValues(this.map);
+
+    Map<T, String> get reverse {
+            reverseMap = map.map((k, v) => MapEntry(v, k));
+            return reverseMap;
+    }
+}
diff --git a/base/schema-elixir/test/inputs/schema/class-map-union.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/class-map-union.schema/default/QuickType.ex
index fd71797..fda14ff 100644
--- a/base/schema-elixir/test/inputs/schema/class-map-union.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/class-map-union.schema/default/QuickType.ex
@@ -12,9 +12,15 @@ defmodule UnionClass do
           quux: integer() | nil
         }
 
+  def decode_quux(value) when is_integer(value), do: value
+  def decode_quux(_), do: {:error, "Unexpected type when decoding UnionClass.quux"}
+
+  def encode_quux(value) when is_integer(value), do: value
+  def encode_quux(_), do: {:error, "Unexpected type when encoding UnionClass.quux"}
+
   def from_map(m) do
     %UnionClass{
-      quux: m["quux"],
+      quux: m["quux"] && decode_quux(m["quux"]),
     }
   end
 
diff --git a/base/schema-elixir/test/inputs/schema/description.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/description.schema/default/QuickType.ex
index 9f4fd44..7c0ed78 100644
--- a/base/schema-elixir/test/inputs/schema/description.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/description.schema/default/QuickType.ex
@@ -119,6 +119,14 @@ defmodule TopLevel do
           union: float() | String.t()
         }
 
+  def decode_foo(value) when is_float(value), do: value
+  def decode_foo(value) when is_integer(value), do: value
+  def decode_foo(_), do: {:error, "Unexpected type when decoding TopLevel.foo"}
+
+  def encode_foo(value) when is_float(value), do: value
+  def encode_foo(value) when is_integer(value), do: value
+  def encode_foo(_), do: {:error, "Unexpected type when encoding TopLevel.foo"}
+
   def decode_object_or_string(%{"prop" => _,} = value), do: ObjectOrStringClass.from_map(value)
   def decode_object_or_string(value) when is_binary(value), do: value
   def decode_object_or_string(_), do: {:error, "Unexpected type when decoding TopLevel.object_or_string"}
@@ -131,7 +139,7 @@ defmodule TopLevel do
     %TopLevel{
       bar: m["bar"],
       enum: EnumEnum.decode(m["enum"]),
-      foo: m["foo"],
+      foo: m["foo"] && decode_foo(m["foo"]),
       object_or_string: decode_object_or_string(m["object-or-string"]),
       union: Map.fetch!(m, "union"),
     }
diff --git a/head/schema-elixir/test/inputs/schema/fractional-bounds.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/fractional-bounds.schema/default/QuickType.ex
new file mode 100644
index 0000000..0e7603f
--- /dev/null
+++ b/head/schema-elixir/test/inputs/schema/fractional-bounds.schema/default/QuickType.ex
@@ -0,0 +1,47 @@
+# This file was autogenerated using quicktype https://github.com/quicktype/quicktype
+#
+# Add Jason to your mix.exs
+#
+# Decode a JSON string: TopLevel.from_json(data)
+# Encode into a JSON string: TopLevel.to_json(struct)
+
+defmodule TopLevel do
+  @enforce_keys [:value]
+  defstruct [:value]
+
+  @type t :: %__MODULE__{
+          value: float()
+        }
+
+  def decode_value(value) when is_float(value) and value >= 0.1 and value <= 0.9, do: value
+  def decode_value(value) when is_integer(value) and value >= 0.1 and value <= 0.9, do: value
+  def decode_value(_), do: {:error, "Unexpected type when decoding TopLevel.value"}
+
+  def encode_value(value) when is_float(value), do: value
+  def encode_value(value) when is_integer(value), do: value
+  def encode_value(_), do: {:error, "Unexpected type when encoding TopLevel.value"}
+
+  def from_map(m) do
+    %TopLevel{
+      value: decode_value(m["value"]),
+    }
+  end
+
+  def from_json(json) do
+    json
+          |> Jason.decode!()
+          |> from_map()
+  end
+
+  def to_map(struct) do
+    %{
+      "value" => struct.value,
+    }
+  end
+
+  def to_json(struct) do
+    struct
+          |> to_map()
+          |> Jason.encode!()
+  end
+end
diff --git a/base/schema-elixir/test/inputs/schema/integer-type.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/integer-type.schema/default/QuickType.ex
index 257b3a8..51cd70c 100644
--- a/base/schema-elixir/test/inputs/schema/integer-type.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/integer-type.schema/default/QuickType.ex
@@ -21,49 +21,49 @@ defmodule TopLevel do
           unbounded: integer()
         }
 
-  def decode_above_i32_max(value) when is_integer(value), do: value
+  def decode_above_i32_max(value) when is_integer(value) and value >= 0 and value <= 2147483648, do: value
   def decode_above_i32_max(_), do: {:error, "Unexpected type when decoding TopLevel.above_i32_max"}
 
   def encode_above_i32_max(value) when is_integer(value), do: value
   def encode_above_i32_max(_), do: {:error, "Unexpected type when encoding TopLevel.above_i32_max"}
 
-  def decode_below_i32_min(value) when is_integer(value), do: value
+  def decode_below_i32_min(value) when is_integer(value) and value >= -2147483649 and value <= 0, do: value
   def decode_below_i32_min(_), do: {:error, "Unexpected type when decoding TopLevel.below_i32_min"}
 
   def encode_below_i32_min(value) when is_integer(value), do: value
   def encode_below_i32_min(_), do: {:error, "Unexpected type when encoding TopLevel.below_i32_min"}
 
-  def decode_i32_range(value) when is_integer(value), do: value
+  def decode_i32_range(value) when is_integer(value) and value >= -2147483648 and value <= 2147483647, do: value
   def decode_i32_range(_), do: {:error, "Unexpected type when decoding TopLevel.i32_range"}
 
   def encode_i32_range(value) when is_integer(value), do: value
   def encode_i32_range(_), do: {:error, "Unexpected type when encoding TopLevel.i32_range"}
 
-  def decode_large_bounds(value) when is_integer(value), do: value
+  def decode_large_bounds(value) when is_integer(value) and value >= -9007199254740991 and value <= 9007199254740991, do: value
   def decode_large_bounds(_), do: {:error, "Unexpected type when decoding TopLevel.large_bounds"}
 
   def encode_large_bounds(value) when is_integer(value), do: value
   def encode_large_bounds(_), do: {:error, "Unexpected type when encoding TopLevel.large_bounds"}
 
-  def decode_only_maximum(value) when is_integer(value), do: value
+  def decode_only_maximum(value) when is_integer(value) and value <= 0, do: value
   def decode_only_maximum(_), do: {:error, "Unexpected type when decoding TopLevel.only_maximum"}
 
   def encode_only_maximum(value) when is_integer(value), do: value
   def encode_only_maximum(_), do: {:error, "Unexpected type when encoding TopLevel.only_maximum"}
 
-  def decode_only_minimum(value) when is_integer(value), do: value
+  def decode_only_minimum(value) when is_integer(value) and value >= 0, do: value
   def decode_only_minimum(_), do: {:error, "Unexpected type when decoding TopLevel.only_minimum"}
 
   def encode_only_minimum(value) when is_integer(value), do: value
   def encode_only_minimum(_), do: {:error, "Unexpected type when encoding TopLevel.only_minimum"}
 
-  def decode_small_negative(value) when is_integer(value), do: value
+  def decode_small_negative(value) when is_integer(value) and value >= -100 and value <= 0, do: value
   def decode_small_negative(_), do: {:error, "Unexpected type when decoding TopLevel.small_negative"}
 
   def encode_small_negative(value) when is_integer(value), do: value
   def encode_small_negative(_), do: {:error, "Unexpected type when encoding TopLevel.small_negative"}
 
-  def decode_small_positive(value) when is_integer(value), do: value
+  def decode_small_positive(value) when is_integer(value) and value >= 0 and value <= 100, do: value
   def decode_small_positive(_), do: {:error, "Unexpected type when decoding TopLevel.small_positive"}
 
   def encode_small_positive(value) when is_integer(value), do: value
diff --git a/base/schema-elixir/test/inputs/schema/intersection-nested.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/intersection-nested.schema/default/QuickType.ex
index b63f615..94910eb 100644
--- a/base/schema-elixir/test/inputs/schema/intersection-nested.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/intersection-nested.schema/default/QuickType.ex
@@ -12,9 +12,17 @@ defmodule TopLevel do
           intersection: float() | nil
         }
 
+  def decode_intersection(value) when is_float(value), do: value
+  def decode_intersection(value) when is_integer(value), do: value
+  def decode_intersection(_), do: {:error, "Unexpected type when decoding TopLevel.intersection"}
+
+  def encode_intersection(value) when is_float(value), do: value
+  def encode_intersection(value) when is_integer(value), do: value
+  def encode_intersection(_), do: {:error, "Unexpected type when encoding TopLevel.intersection"}
+
   def from_map(m) do
     %TopLevel{
-      intersection: m["intersection"],
+      intersection: m["intersection"] && decode_intersection(m["intersection"]),
     }
   end
 
diff --git a/base/schema-elixir/test/inputs/schema/keyword-unions.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/keyword-unions.schema/default/QuickType.ex
index 4d138dd..596140d 100644
--- a/base/schema-elixir/test/inputs/schema/keyword-unions.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/keyword-unions.schema/default/QuickType.ex
@@ -9204,6 +9204,14 @@ defmodule TopLevel do
   def encode_double(value) when is_nil(value), do: value
   def encode_double(_), do: {:error, "Unexpected type when encoding TopLevel.double"}
 
+  def decode_dummy(value) when is_float(value), do: value
+  def decode_dummy(value) when is_integer(value), do: value
+  def decode_dummy(_), do: {:error, "Unexpected type when decoding TopLevel.dummy"}
+
+  def encode_dummy(value) when is_float(value), do: value
+  def encode_dummy(value) when is_integer(value), do: value
+  def encode_dummy(_), do: {:error, "Unexpected type when encoding TopLevel.dummy"}
+
   def decode_dynamic(%{} = value), do: Dynamic.from_map(value)
   def decode_dynamic(value) when is_float(value), do: value
   def decode_dynamic(value) when is_integer(value), do: value
@@ -11682,7 +11690,7 @@ defmodule TopLevel do
       did_set: decode_did_set(m["didSet"]),
       top_level_do: decode_top_level_do(m["do"]),
       double: decode_double(m["double"]),
-      dummy: m["dummy"],
+      dummy: m["dummy"] && decode_dummy(m["dummy"]),
       dynamic: decode_dynamic(m["dynamic"]),
       dynamic_cast: decode_dynamic_cast(m["dynamic_cast"]),
       elif: decode_elif(m["elif"]),
diff --git a/base/schema-elixir/test/inputs/schema/minmax-integer.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/minmax-integer.schema/default/QuickType.ex
index 9129fbd..26774ba 100644
--- a/base/schema-elixir/test/inputs/schema/minmax-integer.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/minmax-integer.schema/default/QuickType.ex
@@ -26,31 +26,31 @@ defmodule TopLevel do
   def encode_free(value) when is_integer(value), do: value
   def encode_free(_), do: {:error, "Unexpected type when encoding TopLevel.free"}
 
-  def decode_intersection(value) when is_integer(value), do: value
+  def decode_intersection(value) when is_integer(value) and value >= 4 and value <= 5, do: value
   def decode_intersection(_), do: {:error, "Unexpected type when decoding TopLevel.intersection"}
 
   def encode_intersection(value) when is_integer(value), do: value
   def encode_intersection(_), do: {:error, "Unexpected type when encoding TopLevel.intersection"}
 
-  def decode_max(value) when is_integer(value), do: value
+  def decode_max(value) when is_integer(value) and value <= 5, do: value
   def decode_max(_), do: {:error, "Unexpected type when decoding TopLevel.max"}
 
   def encode_max(value) when is_integer(value), do: value
   def encode_max(_), do: {:error, "Unexpected type when encoding TopLevel.max"}
 
-  def decode_min(value) when is_integer(value), do: value
+  def decode_min(value) when is_integer(value) and value >= 3, do: value
   def decode_min(_), do: {:error, "Unexpected type when decoding TopLevel.min"}
 
   def encode_min(value) when is_integer(value), do: value
   def encode_min(_), do: {:error, "Unexpected type when encoding TopLevel.min"}
 
-  def decode_minmax(value) when is_integer(value), do: value
+  def decode_minmax(value) when is_integer(value) and value >= 3 and value <= 5, do: value
   def decode_minmax(_), do: {:error, "Unexpected type when decoding TopLevel.minmax"}
 
   def encode_minmax(value) when is_integer(value), do: value
   def encode_minmax(_), do: {:error, "Unexpected type when encoding TopLevel.minmax"}
 
-  def decode_min_max_intersection(value) when is_integer(value), do: value
+  def decode_min_max_intersection(value) when is_integer(value) and value >= 3 and value <= 5, do: value
   def decode_min_max_intersection(_), do: {:error, "Unexpected type when decoding TopLevel.min_max_intersection"}
 
   def encode_min_max_intersection(value) when is_integer(value), do: value
@@ -62,7 +62,7 @@ defmodule TopLevel do
   def encode_min_max_union(value) when is_integer(value), do: value
   def encode_min_max_union(_), do: {:error, "Unexpected type when encoding TopLevel.min_max_union"}
 
-  def decode_union(value) when is_integer(value), do: value
+  def decode_union(value) when is_integer(value) and value >= 3 and value <= 6, do: value
   def decode_union(_), do: {:error, "Unexpected type when decoding TopLevel.union"}
 
   def encode_union(value) when is_integer(value), do: value
diff --git a/base/schema-elixir/test/inputs/schema/minmax.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/minmax.schema/default/QuickType.ex
index 3ffe159..2efb8a7 100644
--- a/base/schema-elixir/test/inputs/schema/minmax.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/minmax.schema/default/QuickType.ex
@@ -28,40 +28,40 @@ defmodule TopLevel do
   def encode_free(value) when is_integer(value), do: value
   def encode_free(_), do: {:error, "Unexpected type when encoding TopLevel.free"}
 
-  def decode_intersection(value) when is_float(value), do: value
-  def decode_intersection(value) when is_integer(value), do: value
+  def decode_intersection(value) when is_float(value) and value >= 4 and value <= 5, do: value
+  def decode_intersection(value) when is_integer(value) and value >= 4 and value <= 5, do: value
   def decode_intersection(_), do: {:error, "Unexpected type when decoding TopLevel.intersection"}
 
   def encode_intersection(value) when is_float(value), do: value
   def encode_intersection(value) when is_integer(value), do: value
   def encode_intersection(_), do: {:error, "Unexpected type when encoding TopLevel.intersection"}
 
-  def decode_max(value) when is_float(value), do: value
-  def decode_max(value) when is_integer(value), do: value
+  def decode_max(value) when is_float(value) and value <= 5, do: value
+  def decode_max(value) when is_integer(value) and value <= 5, do: value
   def decode_max(_), do: {:error, "Unexpected type when decoding TopLevel.max"}
 
   def encode_max(value) when is_float(value), do: value
   def encode_max(value) when is_integer(value), do: value
   def encode_max(_), do: {:error, "Unexpected type when encoding TopLevel.max"}
 
-  def decode_min(value) when is_float(value), do: value
-  def decode_min(value) when is_integer(value), do: value
+  def decode_min(value) when is_float(value) and value >= 3, do: value
+  def decode_min(value) when is_integer(value) and value >= 3, do: value
   def decode_min(_), do: {:error, "Unexpected type when decoding TopLevel.min"}
 
   def encode_min(value) when is_float(value), do: value
   def encode_min(value) when is_integer(value), do: value
   def encode_min(_), do: {:error, "Unexpected type when encoding TopLevel.min"}
 
-  def decode_minmax(value) when is_float(value), do: value
-  def decode_minmax(value) when is_integer(value), do: value
+  def decode_minmax(value) when is_float(value) and value >= 3 and value <= 5, do: value
+  def decode_minmax(value) when is_integer(value) and value >= 3 and value <= 5, do: value
   def decode_minmax(_), do: {:error, "Unexpected type when decoding TopLevel.minmax"}
 
   def encode_minmax(value) when is_float(value), do: value
   def encode_minmax(value) when is_integer(value), do: value
   def encode_minmax(_), do: {:error, "Unexpected type when encoding TopLevel.minmax"}
 
-  def decode_min_max_intersection(value) when is_float(value), do: value
-  def decode_min_max_intersection(value) when is_integer(value), do: value
+  def decode_min_max_intersection(value) when is_float(value) and value >= 3 and value <= 5, do: value
+  def decode_min_max_intersection(value) when is_integer(value) and value >= 3 and value <= 5, do: value
   def decode_min_max_intersection(_), do: {:error, "Unexpected type when decoding TopLevel.min_max_intersection"}
 
   def encode_min_max_intersection(value) when is_float(value), do: value
@@ -76,8 +76,8 @@ defmodule TopLevel do
   def encode_min_max_union(value) when is_integer(value), do: value
   def encode_min_max_union(_), do: {:error, "Unexpected type when encoding TopLevel.min_max_union"}
 
-  def decode_union(value) when is_float(value), do: value
-  def decode_union(value) when is_integer(value), do: value
+  def decode_union(value) when is_float(value) and value >= 3 and value <= 6, do: value
+  def decode_union(value) when is_integer(value) and value >= 3 and value <= 6, do: value
   def decode_union(_), do: {:error, "Unexpected type when decoding TopLevel.union"}
 
   def encode_union(value) when is_float(value), do: value
diff --git a/base/schema-elixir/test/inputs/schema/optional-const-ref.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/optional-const-ref.schema/default/QuickType.ex
index 145fa38..a3fb21b 100644
--- a/base/schema-elixir/test/inputs/schema/optional-const-ref.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/optional-const-ref.schema/default/QuickType.ex
@@ -71,6 +71,12 @@ defmodule TopLevel do
           weight: float() | nil
         }
 
+  def decode_count(value) when is_integer(value) and value >= 1 and value <= 100, do: value
+  def decode_count(_), do: {:error, "Unexpected type when decoding TopLevel.count"}
+
+  def encode_count(value) when is_integer(value), do: value
+  def encode_count(_), do: {:error, "Unexpected type when encoding TopLevel.count"}
+
   def decode_label(value) when is_binary(value) do
     if String.length(value) >= 2 and String.length(value) <= 16, do: value, else: raise(ArgumentError)
   end
@@ -85,7 +91,7 @@ defmodule TopLevel do
   def encode_required_coordinates(value) when is_list(value), do: value
   def encode_required_coordinates(_), do: {:error, "Unexpected type when encoding TopLevel.required_coordinates"}
 
-  def decode_required_count(value) when is_integer(value), do: value
+  def decode_required_count(value) when is_integer(value) and value >= 1 and value <= 100, do: value
   def decode_required_count(_), do: {:error, "Unexpected type when decoding TopLevel.required_count"}
 
   def encode_required_count(value) when is_integer(value), do: value
@@ -99,15 +105,23 @@ defmodule TopLevel do
   def encode_required_label(value) when is_binary(value), do: value
   def encode_required_label(_), do: {:error, "Unexpected type when encoding TopLevel.required_label"}
 
+  def decode_weight(value) when is_float(value) and value >= 0.5 and value <= 99.5, do: value
+  def decode_weight(value) when is_integer(value) and value >= 0.5 and value <= 99.5, do: value
+  def decode_weight(_), do: {:error, "Unexpected type when decoding TopLevel.weight"}
+
+  def encode_weight(value) when is_float(value), do: value
+  def encode_weight(value) when is_integer(value), do: value
+  def encode_weight(_), do: {:error, "Unexpected type when encoding TopLevel.weight"}
+
   def from_map(m) do
     %TopLevel{
       coordinates: m["coordinates"] && Enum.map(m["coordinates"], &Coordinate.from_map/1),
-      count: m["count"],
+      count: m["count"] && decode_count(m["count"]),
       label: m["label"] && decode_label(m["label"]),
       required_coordinates: Enum.map(m["requiredCoordinates"], &Coordinate.from_map/1),
       required_count: decode_required_count(m["requiredCount"]),
       required_label: decode_required_label(m["requiredLabel"]),
-      weight: m["weight"],
+      weight: m["weight"] && decode_weight(m["weight"]),
     }
   end
 
diff --git a/base/schema-elixir/test/inputs/schema/optional-constraints.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/optional-constraints.schema/default/QuickType.ex
index 18cefc2..81f9584 100644
--- a/base/schema-elixir/test/inputs/schema/optional-constraints.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/optional-constraints.schema/default/QuickType.ex
@@ -17,6 +17,20 @@ defmodule TopLevel do
           req_zero_min: integer()
         }
 
+  def decode_opt_double(value) when is_float(value) and value >= 0.5 and value <= 99.5, do: value
+  def decode_opt_double(value) when is_integer(value) and value >= 0.5 and value <= 99.5, do: value
+  def decode_opt_double(_), do: {:error, "Unexpected type when decoding TopLevel.opt_double"}
+
+  def encode_opt_double(value) when is_float(value), do: value
+  def encode_opt_double(value) when is_integer(value), do: value
+  def encode_opt_double(_), do: {:error, "Unexpected type when encoding TopLevel.opt_double"}
+
+  def decode_opt_int(value) when is_integer(value) and value >= 0 and value <= 100, do: value
+  def decode_opt_int(_), do: {:error, "Unexpected type when decoding TopLevel.opt_int"}
+
+  def encode_opt_int(value) when is_integer(value), do: value
+  def encode_opt_int(_), do: {:error, "Unexpected type when encoding TopLevel.opt_int"}
+
   def decode_opt_pattern(value) when is_binary(value) do
     if Regex.match?(Regex.compile!("^[a-z]+$"), value), do: value, else: raise(ArgumentError)
   end
@@ -33,7 +47,7 @@ defmodule TopLevel do
   def encode_opt_string(value) when is_binary(value), do: value
   def encode_opt_string(_), do: {:error, "Unexpected type when encoding TopLevel.opt_string"}
 
-  def decode_req_zero_min(value) when is_integer(value), do: value
+  def decode_req_zero_min(value) when is_integer(value) and value >= 0 and value <= 100, do: value
   def decode_req_zero_min(_), do: {:error, "Unexpected type when decoding TopLevel.req_zero_min"}
 
   def encode_req_zero_min(value) when is_integer(value), do: value
@@ -41,8 +55,8 @@ defmodule TopLevel do
 
   def from_map(m) do
     %TopLevel{
-      opt_double: m["optDouble"],
-      opt_int: m["optInt"],
+      opt_double: m["optDouble"] && decode_opt_double(m["optDouble"]),
+      opt_int: m["optInt"] && decode_opt_int(m["optInt"]),
       opt_pattern: m["optPattern"] && decode_opt_pattern(m["optPattern"]),
       opt_string: m["optString"] && decode_opt_string(m["optString"]),
       req_zero_min: decode_req_zero_min(m["reqZeroMin"]),
diff --git a/base/schema-elixir/test/inputs/schema/renaming-bug.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/renaming-bug.schema/default/QuickType.ex
index a1db657..8084788 100644
--- a/base/schema-elixir/test/inputs/schema/renaming-bug.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/renaming-bug.schema/default/QuickType.ex
@@ -12,9 +12,17 @@ defmodule Color do
           rgb: float() | nil
         }
 
+  def decode_rgb(value) when is_float(value), do: value
+  def decode_rgb(value) when is_integer(value), do: value
+  def decode_rgb(_), do: {:error, "Unexpected type when decoding Color.rgb"}
+
+  def encode_rgb(value) when is_float(value), do: value
+  def encode_rgb(value) when is_integer(value), do: value
+  def encode_rgb(_), do: {:error, "Unexpected type when encoding Color.rgb"}
+
   def from_map(m) do
     %Color{
-      rgb: m["rgb"],
+      rgb: m["rgb"] && decode_rgb(m["rgb"]),
     }
   end
 
@@ -363,10 +371,26 @@ defmodule Limit do
           minimum: float() | nil
         }
 
+  def decode_maximum(value) when is_float(value), do: value
+  def decode_maximum(value) when is_integer(value), do: value
+  def decode_maximum(_), do: {:error, "Unexpected type when decoding Limit.maximum"}
+
+  def encode_maximum(value) when is_float(value), do: value
+  def encode_maximum(value) when is_integer(value), do: value
+  def encode_maximum(_), do: {:error, "Unexpected type when encoding Limit.maximum"}
+
+  def decode_minimum(value) when is_float(value), do: value
+  def decode_minimum(value) when is_integer(value), do: value
+  def decode_minimum(_), do: {:error, "Unexpected type when decoding Limit.minimum"}
+
+  def encode_minimum(value) when is_float(value), do: value
+  def encode_minimum(value) when is_integer(value), do: value
+  def encode_minimum(_), do: {:error, "Unexpected type when encoding Limit.minimum"}
+
   def from_map(m) do
     %Limit{
-      maximum: m["maximum"],
-      minimum: m["minimum"],
+      maximum: m["maximum"] && decode_maximum(m["maximum"]),
+      minimum: m["minimum"] && decode_minimum(m["minimum"]),
     }
   end
 
diff --git a/base/schema-elixir/test/inputs/schema/schema-constraints.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/schema-constraints.schema/default/QuickType.ex
index 154049c..e8b9e64 100644
--- a/base/schema-elixir/test/inputs/schema/schema-constraints.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/schema-constraints.schema/default/QuickType.ex
@@ -22,8 +22,8 @@ defmodule TopLevel do
   def encode_min_max_length(value) when is_binary(value), do: value
   def encode_min_max_length(_), do: {:error, "Unexpected type when encoding TopLevel.min_max_length"}
 
-  def decode_percent(value) when is_float(value), do: value
-  def decode_percent(value) when is_integer(value), do: value
+  def decode_percent(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_percent(value) when is_integer(value) and value >= 0 and value <= 1, do: value
   def decode_percent(_), do: {:error, "Unexpected type when decoding TopLevel.percent"}
 
   def encode_percent(value) when is_float(value), do: value
diff --git a/base/schema-elixir/test/inputs/schema/union.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/union.schema/default/QuickType.ex
index 3ab5043..0eb30c4 100644
--- a/base/schema-elixir/test/inputs/schema/union.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/union.schema/default/QuickType.ex
@@ -15,17 +15,31 @@ defmodule TopLevelElement do
           three: float() | nil
         }
 
+  def decode_one(value) when is_integer(value), do: value
+  def decode_one(_), do: {:error, "Unexpected type when decoding TopLevelElement.one"}
+
+  def encode_one(value) when is_integer(value), do: value
+  def encode_one(_), do: {:error, "Unexpected type when encoding TopLevelElement.one"}
+
   def decode_two(value) when is_boolean(value), do: value
   def decode_two(_), do: {:error, "Unexpected type when decoding TopLevelElement.two"}
 
   def encode_two(value) when is_boolean(value), do: value
   def encode_two(_), do: {:error, "Unexpected type when encoding TopLevelElement.two"}
 
+  def decode_three(value) when is_float(value), do: value
+  def decode_three(value) when is_integer(value), do: value
+  def decode_three(_), do: {:error, "Unexpected type when decoding TopLevelElement.three"}
+
+  def encode_three(value) when is_float(value), do: value
+  def encode_three(value) when is_integer(value), do: value
+  def encode_three(_), do: {:error, "Unexpected type when encoding TopLevelElement.three"}
+
   def from_map(m) do
     %TopLevelElement{
-      one: m["one"],
+      one: m["one"] && decode_one(m["one"]),
       two: decode_two(m["two"]),
-      three: m["three"],
+      three: m["three"] && decode_three(m["three"]),
     }
   end
 
diff --git a/base/schema-elixir/test/inputs/schema/vega-lite.schema/default/QuickType.ex b/head/schema-elixir/test/inputs/schema/vega-lite.schema/default/QuickType.ex
index 3785892..b2b0c35 100644
--- a/base/schema-elixir/test/inputs/schema/vega-lite.schema/default/QuickType.ex
+++ b/head/schema-elixir/test/inputs/schema/vega-lite.schema/default/QuickType.ex
@@ -661,27 +661,67 @@ defmodule MarkConfig do
           theta: float() | nil
         }
 
+  def decode_angle(value) when is_float(value) and value >= 0 and value <= 360, do: value
+  def decode_angle(value) when is_integer(value) and value >= 0 and value <= 360, do: value
+  def decode_angle(_), do: {:error, "Unexpected type when decoding MarkConfig.angle"}
+
+  def encode_angle(value) when is_float(value), do: value
+  def encode_angle(value) when is_integer(value), do: value
+  def encode_angle(_), do: {:error, "Unexpected type when encoding MarkConfig.angle"}
+
   def decode_color(value) when is_binary(value), do: value
   def decode_color(_), do: {:error, "Unexpected type when decoding MarkConfig.color"}
 
   def encode_color(value) when is_binary(value), do: value
   def encode_color(_), do: {:error, "Unexpected type when encoding MarkConfig.color"}
 
+  def decode_dx(value) when is_float(value), do: value
+  def decode_dx(value) when is_integer(value), do: value
+  def decode_dx(_), do: {:error, "Unexpected type when decoding MarkConfig.dx"}
+
+  def encode_dx(value) when is_float(value), do: value
+  def encode_dx(value) when is_integer(value), do: value
+  def encode_dx(_), do: {:error, "Unexpected type when encoding MarkConfig.dx"}
+
+  def decode_dy(value) when is_float(value), do: value
+  def decode_dy(value) when is_integer(value), do: value
+  def decode_dy(_), do: {:error, "Unexpected type when decoding MarkConfig.dy"}
+
+  def encode_dy(value) when is_float(value), do: value
+  def encode_dy(value) when is_integer(value), do: value
+  def encode_dy(_), do: {:error, "Unexpected type when encoding MarkConfig.dy"}
+
   def decode_fill(value) when is_binary(value), do: value
   def decode_fill(_), do: {:error, "Unexpected type when decoding MarkConfig.fill"}
 
   def encode_fill(value) when is_binary(value), do: value
   def encode_fill(_), do: {:error, "Unexpected type when encoding MarkConfig.fill"}
 
+  def decode_fill_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_fill_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_fill_opacity(_), do: {:error, "Unexpected type when decoding MarkConfig.fill_opacity"}
+
+  def encode_fill_opacity(value) when is_float(value), do: value
+  def encode_fill_opacity(value) when is_integer(value), do: value
+  def encode_fill_opacity(_), do: {:error, "Unexpected type when encoding MarkConfig.fill_opacity"}
+
   def decode_font(value) when is_binary(value), do: value
   def decode_font(_), do: {:error, "Unexpected type when decoding MarkConfig.font"}
 
   def encode_font(value) when is_binary(value), do: value
   def encode_font(_), do: {:error, "Unexpected type when encoding MarkConfig.font"}
 
+  def decode_font_size(value) when is_float(value) and value >= 0, do: value
+  def decode_font_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_font_size(_), do: {:error, "Unexpected type when decoding MarkConfig.font_size"}
+
+  def encode_font_size(value) when is_float(value), do: value
+  def encode_font_size(value) when is_integer(value), do: value
+  def encode_font_size(_), do: {:error, "Unexpected type when encoding MarkConfig.font_size"}
+
   def decode_font_weight(value) when is_binary(value), do: FontWeight.decode(value)
-  def decode_font_weight(value) when is_float(value), do: value
-  def decode_font_weight(value) when is_integer(value), do: value
+  def decode_font_weight(value) when is_float(value) and value >= 100 and value <= 900, do: value
+  def decode_font_weight(value) when is_integer(value) and value >= 100 and value <= 900, do: value
   def decode_font_weight(value) when is_nil(value), do: value
   def decode_font_weight(_), do: {:error, "Unexpected type when decoding MarkConfig.font_weight"}
 
@@ -697,56 +737,128 @@ defmodule MarkConfig do
   def encode_href(value) when is_binary(value), do: value
   def encode_href(_), do: {:error, "Unexpected type when encoding MarkConfig.href"}
 
+  def decode_limit(value) when is_float(value), do: value
+  def decode_limit(value) when is_integer(value), do: value
+  def decode_limit(_), do: {:error, "Unexpected type when decoding MarkConfig.limit"}
+
+  def encode_limit(value) when is_float(value), do: value
+  def encode_limit(value) when is_integer(value), do: value
+  def encode_limit(_), do: {:error, "Unexpected type when encoding MarkConfig.limit"}
+
+  def decode_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_opacity(_), do: {:error, "Unexpected type when decoding MarkConfig.opacity"}
+
+  def encode_opacity(value) when is_float(value), do: value
+  def encode_opacity(value) when is_integer(value), do: value
+  def encode_opacity(_), do: {:error, "Unexpected type when encoding MarkConfig.opacity"}
+
+  def decode_radius(value) when is_float(value) and value >= 0, do: value
+  def decode_radius(value) when is_integer(value) and value >= 0, do: value
+  def decode_radius(_), do: {:error, "Unexpected type when decoding MarkConfig.radius"}
+
+  def encode_radius(value) when is_float(value), do: value
+  def encode_radius(value) when is_integer(value), do: value
+  def encode_radius(_), do: {:error, "Unexpected type when encoding MarkConfig.radius"}
+
   def decode_shape(value) when is_binary(value), do: value
   def decode_shape(_), do: {:error, "Unexpected type when decoding MarkConfig.shape"}
 
   def encode_shape(value) when is_binary(value), do: value
   def encode_shape(_), do: {:error, "Unexpected type when encoding MarkConfig.shape"}
 
+  def decode_size(value) when is_float(value) and value >= 0, do: value
+  def decode_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_size(_), do: {:error, "Unexpected type when decoding MarkConfig.size"}
+
+  def encode_size(value) when is_float(value), do: value
+  def encode_size(value) when is_integer(value), do: value
+  def encode_size(_), do: {:error, "Unexpected type when encoding MarkConfig.size"}
+
   def decode_stroke(value) when is_binary(value), do: value
   def decode_stroke(_), do: {:error, "Unexpected type when decoding MarkConfig.stroke"}
 
   def encode_stroke(value) when is_binary(value), do: value
   def encode_stroke(_), do: {:error, "Unexpected type when encoding MarkConfig.stroke"}
 
+  def decode_stroke_dash_offset(value) when is_float(value), do: value
+  def decode_stroke_dash_offset(value) when is_integer(value), do: value
+  def decode_stroke_dash_offset(_), do: {:error, "Unexpected type when decoding MarkConfig.stroke_dash_offset"}
+
+  def encode_stroke_dash_offset(value) when is_float(value), do: value
+  def encode_stroke_dash_offset(value) when is_integer(value), do: value
+  def encode_stroke_dash_offset(_), do: {:error, "Unexpected type when encoding MarkConfig.stroke_dash_offset"}
+
+  def decode_stroke_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_stroke_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_stroke_opacity(_), do: {:error, "Unexpected type when decoding MarkConfig.stroke_opacity"}
+
+  def encode_stroke_opacity(value) when is_float(value), do: value
+  def encode_stroke_opacity(value) when is_integer(value), do: value
+  def encode_stroke_opacity(_), do: {:error, "Unexpected type when encoding MarkConfig.stroke_opacity"}
+
+  def decode_stroke_width(value) when is_float(value) and value >= 0, do: value
+  def decode_stroke_width(value) when is_integer(value) and value >= 0, do: value
+  def decode_stroke_width(_), do: {:error, "Unexpected type when decoding MarkConfig.stroke_width"}
+
+  def encode_stroke_width(value) when is_float(value), do: value
+  def encode_stroke_width(value) when is_integer(value), do: value
+  def encode_stroke_width(_), do: {:error, "Unexpected type when encoding MarkConfig.stroke_width"}
+
+  def decode_tension(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_tension(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_tension(_), do: {:error, "Unexpected type when decoding MarkConfig.tension"}
+
+  def encode_tension(value) when is_float(value), do: value
+  def encode_tension(value) when is_integer(value), do: value
+  def encode_tension(_), do: {:error, "Unexpected type when encoding MarkConfig.tension"}
+
   def decode_text(value) when is_binary(value), do: value
   def decode_text(_), do: {:error, "Unexpected type when decoding MarkConfig.text"}
 
   def encode_text(value) when is_binary(value), do: value
   def encode_text(_), do: {:error, "Unexpected type when encoding MarkConfig.text"}
 
+  def decode_theta(value) when is_float(value), do: value
+  def decode_theta(value) when is_integer(value), do: value
+  def decode_theta(_), do: {:error, "Unexpected type when decoding MarkConfig.theta"}
+
+  def encode_theta(value) when is_float(value), do: value
+  def encode_theta(value) when is_integer(value), do: value
+  def encode_theta(_), do: {:error, "Unexpected type when encoding MarkConfig.theta"}
+
   def from_map(m) do
     %MarkConfig{
       align: m["align"] && HorizontalAlign.decode(m["align"]),
-      angle: m["angle"],
+      angle: m["angle"] && decode_angle(m["angle"]),
       baseline: m["baseline"] && VerticalAlign.decode(m["baseline"]),
       color: m["color"] && decode_color(m["color"]),
       cursor: m["cursor"] && Cursor.decode(m["cursor"]),
-      dx: m["dx"],
-      dy: m["dy"],
+      dx: m["dx"] && decode_dx(m["dx"]),
+      dy: m["dy"] && decode_dy(m["dy"]),
       fill: m["fill"] && decode_fill(m["fill"]),
       filled: m["filled"],
-      fill_opacity: m["fillOpacity"],
+      fill_opacity: m["fillOpacity"] && decode_fill_opacity(m["fillOpacity"]),
       font: m["font"] && decode_font(m["font"]),
-      font_size: m["fontSize"],
+      font_size: m["fontSize"] && decode_font_size(m["fontSize"]),
       font_style: m["fontStyle"] && FontStyle.decode(m["fontStyle"]),
       font_weight: decode_font_weight(m["fontWeight"]),
       href: m["href"] && decode_href(m["href"]),
       interpolate: m["interpolate"] && Interpolate.decode(m["interpolate"]),
-      limit: m["limit"],
-      opacity: m["opacity"],
+      limit: m["limit"] && decode_limit(m["limit"]),
+      opacity: m["opacity"] && decode_opacity(m["opacity"]),
       orient: m["orient"] && Orient.decode(m["orient"]),
-      radius: m["radius"],
+      radius: m["radius"] && decode_radius(m["radius"]),
       shape: m["shape"] && decode_shape(m["shape"]),
-      size: m["size"],
+      size: m["size"] && decode_size(m["size"]),
       stroke: m["stroke"] && decode_stroke(m["stroke"]),
       stroke_dash: m["strokeDash"],
-      stroke_dash_offset: m["strokeDashOffset"],
-      stroke_opacity: m["strokeOpacity"],
-      stroke_width: m["strokeWidth"],
-      tension: m["tension"],
+      stroke_dash_offset: m["strokeDashOffset"] && decode_stroke_dash_offset(m["strokeDashOffset"]),
+      stroke_opacity: m["strokeOpacity"] && decode_stroke_opacity(m["strokeOpacity"]),
+      stroke_width: m["strokeWidth"] && decode_stroke_width(m["strokeWidth"]),
+      tension: m["tension"] && decode_tension(m["tension"]),
       text: m["text"] && decode_text(m["text"]),
-      theta: m["theta"],
+      theta: m["theta"] && decode_theta(m["theta"]),
     }
   end
 
@@ -934,18 +1046,58 @@ defmodule AxisConfig do
           title_y: float() | nil
         }
 
+  def decode_band_position(value) when is_float(value), do: value
+  def decode_band_position(value) when is_integer(value), do: value
+  def decode_band_position(_), do: {:error, "Unexpected type when decoding AxisConfig.band_position"}
+
+  def encode_band_position(value) when is_float(value), do: value
+  def encode_band_position(value) when is_integer(value), do: value
+  def encode_band_position(_), do: {:error, "Unexpected type when encoding AxisConfig.band_position"}
+
   def decode_domain_color(value) when is_binary(value), do: value
   def decode_domain_color(_), do: {:error, "Unexpected type when decoding AxisConfig.domain_color"}
 
   def encode_domain_color(value) when is_binary(value), do: value
   def encode_domain_color(_), do: {:error, "Unexpected type when encoding AxisConfig.domain_color"}
 
+  def decode_domain_width(value) when is_float(value), do: value
+  def decode_domain_width(value) when is_integer(value), do: value
+  def decode_domain_width(_), do: {:error, "Unexpected type when decoding AxisConfig.domain_width"}
+
+  def encode_domain_width(value) when is_float(value), do: value
+  def encode_domain_width(value) when is_integer(value), do: value
+  def encode_domain_width(_), do: {:error, "Unexpected type when encoding AxisConfig.domain_width"}
+
   def decode_grid_color(value) when is_binary(value), do: value
   def decode_grid_color(_), do: {:error, "Unexpected type when decoding AxisConfig.grid_color"}
 
   def encode_grid_color(value) when is_binary(value), do: value
   def encode_grid_color(_), do: {:error, "Unexpected type when encoding AxisConfig.grid_color"}
 
+  def decode_grid_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_grid_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_grid_opacity(_), do: {:error, "Unexpected type when decoding AxisConfig.grid_opacity"}
+
+  def encode_grid_opacity(value) when is_float(value), do: value
+  def encode_grid_opacity(value) when is_integer(value), do: value
+  def encode_grid_opacity(_), do: {:error, "Unexpected type when encoding AxisConfig.grid_opacity"}
+
+  def decode_grid_width(value) when is_float(value) and value >= 0, do: value
+  def decode_grid_width(value) when is_integer(value) and value >= 0, do: value
+  def decode_grid_width(_), do: {:error, "Unexpected type when decoding AxisConfig.grid_width"}
+
+  def encode_grid_width(value) when is_float(value), do: value
+  def encode_grid_width(value) when is_integer(value), do: value
+  def encode_grid_width(_), do: {:error, "Unexpected type when encoding AxisConfig.grid_width"}
+
+  def decode_label_angle(value) when is_float(value) and value >= -360 and value <= 360, do: value
+  def decode_label_angle(value) when is_integer(value) and value >= -360 and value <= 360, do: value
+  def decode_label_angle(_), do: {:error, "Unexpected type when decoding AxisConfig.label_angle"}
+
+  def encode_label_angle(value) when is_float(value), do: value
+  def encode_label_angle(value) when is_integer(value), do: value
+  def encode_label_angle(_), do: {:error, "Unexpected type when encoding AxisConfig.label_angle"}
+
   def decode_label_color(value) when is_binary(value), do: value
   def decode_label_color(_), do: {:error, "Unexpected type when decoding AxisConfig.label_color"}
 
@@ -958,6 +1110,22 @@ defmodule AxisConfig do
   def encode_label_font(value) when is_binary(value), do: value
   def encode_label_font(_), do: {:error, "Unexpected type when encoding AxisConfig.label_font"}
 
+  def decode_label_font_size(value) when is_float(value) and value >= 0, do: value
+  def decode_label_font_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_label_font_size(_), do: {:error, "Unexpected type when decoding AxisConfig.label_font_size"}
+
+  def encode_label_font_size(value) when is_float(value), do: value
+  def encode_label_font_size(value) when is_integer(value), do: value
+  def encode_label_font_size(_), do: {:error, "Unexpected type when encoding AxisConfig.label_font_size"}
+
+  def decode_label_limit(value) when is_float(value), do: value
+  def decode_label_limit(value) when is_integer(value), do: value
+  def decode_label_limit(_), do: {:error, "Unexpected type when decoding AxisConfig.label_limit"}
+
+  def encode_label_limit(value) when is_float(value), do: value
+  def encode_label_limit(value) when is_integer(value), do: value
+  def encode_label_limit(_), do: {:error, "Unexpected type when encoding AxisConfig.label_limit"}
+
   def decode_label_overlap(value) when is_boolean(value), do: value
   def decode_label_overlap(value) when is_binary(value), do: LabelOverlapEnum.decode(value)
   def decode_label_overlap(value) when is_nil(value), do: value
@@ -968,18 +1136,66 @@ defmodule AxisConfig do
   def encode_label_overlap(value) when is_nil(value), do: value
   def encode_label_overlap(_), do: {:error, "Unexpected type when encoding AxisConfig.label_overlap"}
 
+  def decode_label_padding(value) when is_float(value), do: value
+  def decode_label_padding(value) when is_integer(value), do: value
+  def decode_label_padding(_), do: {:error, "Unexpected type when decoding AxisConfig.label_padding"}
+
+  def encode_label_padding(value) when is_float(value), do: value
+  def encode_label_padding(value) when is_integer(value), do: value
+  def encode_label_padding(_), do: {:error, "Unexpected type when encoding AxisConfig.label_padding"}
+
+  def decode_max_extent(value) when is_float(value), do: value
+  def decode_max_extent(value) when is_integer(value), do: value
+  def decode_max_extent(_), do: {:error, "Unexpected type when decoding AxisConfig.max_extent"}
+
+  def encode_max_extent(value) when is_float(value), do: value
+  def encode_max_extent(value) when is_integer(value), do: value
+  def encode_max_extent(_), do: {:error, "Unexpected type when encoding AxisConfig.max_extent"}
+
+  def decode_min_extent(value) when is_float(value), do: value
+  def decode_min_extent(value) when is_integer(value), do: value
+  def decode_min_extent(_), do: {:error, "Unexpected type when decoding AxisConfig.min_extent"}
+
+  def encode_min_extent(value) when is_float(value), do: value
+  def encode_min_extent(value) when is_integer(value), do: value
+  def encode_min_extent(_), do: {:error, "Unexpected type when encoding AxisConfig.min_extent"}
+
   def decode_tick_color(value) when is_binary(value), do: value
   def decode_tick_color(_), do: {:error, "Unexpected type when decoding AxisConfig.tick_color"}
 
   def encode_tick_color(value) when is_binary(value), do: value
   def encode_tick_color(_), do: {:error, "Unexpected type when encoding AxisConfig.tick_color"}
 
+  def decode_tick_size(value) when is_float(value) and value >= 0, do: value
+  def decode_tick_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_tick_size(_), do: {:error, "Unexpected type when decoding AxisConfig.tick_size"}
+
+  def encode_tick_size(value) when is_float(value), do: value
+  def encode_tick_size(value) when is_integer(value), do: value
+  def encode_tick_size(_), do: {:error, "Unexpected type when encoding AxisConfig.tick_size"}
+
+  def decode_tick_width(value) when is_float(value) and value >= 0, do: value
+  def decode_tick_width(value) when is_integer(value) and value >= 0, do: value
+  def decode_tick_width(_), do: {:error, "Unexpected type when decoding AxisConfig.tick_width"}
+
+  def encode_tick_width(value) when is_float(value), do: value
+  def encode_tick_width(value) when is_integer(value), do: value
+  def encode_tick_width(_), do: {:error, "Unexpected type when encoding AxisConfig.tick_width"}
+
   def decode_title_align(value) when is_binary(value), do: value
   def decode_title_align(_), do: {:error, "Unexpected type when decoding AxisConfig.title_align"}
 
   def encode_title_align(value) when is_binary(value), do: value
   def encode_title_align(_), do: {:error, "Unexpected type when encoding AxisConfig.title_align"}
 
+  def decode_title_angle(value) when is_float(value), do: value
+  def decode_title_angle(value) when is_integer(value), do: value
+  def decode_title_angle(_), do: {:error, "Unexpected type when decoding AxisConfig.title_angle"}
+
+  def encode_title_angle(value) when is_float(value), do: value
+  def encode_title_angle(value) when is_integer(value), do: value
+  def encode_title_angle(_), do: {:error, "Unexpected type when encoding AxisConfig.title_angle"}
+
   def decode_title_baseline(value) when is_binary(value), do: value
   def decode_title_baseline(_), do: {:error, "Unexpected type when decoding AxisConfig.title_baseline"}
 
@@ -998,47 +1214,95 @@ defmodule AxisConfig do
   def encode_title_font(value) when is_binary(value), do: value
   def encode_title_font(_), do: {:error, "Unexpected type when encoding AxisConfig.title_font"}
 
+  def decode_title_font_size(value) when is_float(value) and value >= 0, do: value
+  def decode_title_font_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_title_font_size(_), do: {:error, "Unexpected type when decoding AxisConfig.title_font_size"}
+
+  def encode_title_font_size(value) when is_float(value), do: value
+  def encode_title_font_size(value) when is_integer(value), do: value
+  def encode_title_font_size(_), do: {:error, "Unexpected type when encoding AxisConfig.title_font_size"}
+
+  def decode_title_limit(value) when is_float(value), do: value
+  def decode_title_limit(value) when is_integer(value), do: value
+  def decode_title_limit(_), do: {:error, "Unexpected type when decoding AxisConfig.title_limit"}
+
+  def encode_title_limit(value) when is_float(value), do: value
+  def encode_title_limit(value) when is_integer(value), do: value
+  def encode_title_limit(_), do: {:error, "Unexpected type when encoding AxisConfig.title_limit"}
+
+  def decode_title_max_length(value) when is_float(value), do: value
+  def decode_title_max_length(value) when is_integer(value), do: value
+  def decode_title_max_length(_), do: {:error, "Unexpected type when decoding AxisConfig.title_max_length"}
+
+  def encode_title_max_length(value) when is_float(value), do: value
+  def encode_title_max_length(value) when is_integer(value), do: value
+  def encode_title_max_length(_), do: {:error, "Unexpected type when encoding AxisConfig.title_max_length"}
+
+  def decode_title_padding(value) when is_float(value), do: value
+  def decode_title_padding(value) when is_integer(value), do: value
+  def decode_title_padding(_), do: {:error, "Unexpected type when decoding AxisConfig.title_padding"}
+
+  def encode_title_padding(value) when is_float(value), do: value
+  def encode_title_padding(value) when is_integer(value), do: value
+  def encode_title_padding(_), do: {:error, "Unexpected type when encoding AxisConfig.title_padding"}
+
+  def decode_title_x(value) when is_float(value), do: value
+  def decode_title_x(value) when is_integer(value), do: value
+  def decode_title_x(_), do: {:error, "Unexpected type when decoding AxisConfig.title_x"}
+
+  def encode_title_x(value) when is_float(value), do: value
+  def encode_title_x(value) when is_integer(value), do: value
+  def encode_title_x(_), do: {:error, "Unexpected type when encoding AxisConfig.title_x"}
+
+  def decode_title_y(value) when is_float(value), do: value
+  def decode_title_y(value) when is_integer(value), do: value
+  def decode_title_y(_), do: {:error, "Unexpected type when decoding AxisConfig.title_y"}
+
+  def encode_title_y(value) when is_float(value), do: value
+  def encode_title_y(value) when is_integer(value), do: value
+  def encode_title_y(_), do: {:error, "Unexpected type when encoding AxisConfig.title_y"}
+
   def from_map(m) do
     %AxisConfig{
-      band_position: m["bandPosition"],
+      band_position: m["bandPosition"] && decode_band_position(m["bandPosition"]),
       domain: m["domain"],
       domain_color: m["domainColor"] && decode_domain_color(m["domainColor"]),
-      domain_width: m["domainWidth"],
+      domain_width: m["domainWidth"] && decode_domain_width(m["domainWidth"]),
       grid: m["grid"],
       grid_color: m["gridColor"] && decode_grid_color(m["gridColor"]),
       grid_dash: m["gridDash"],
-      grid_opacity: m["gridOpacity"],
-      grid_width: m["gridWidth"],
-      label_angle: m["labelAngle"],
+      grid_opacity: m["gridOpacity"] && decode_grid_opacity(m["gridOpacity"]),
+      grid_width: m["gridWidth"] && decode_grid_width(m["gridWidth"]),
+      label_angle: m["labelAngle"] && decode_label_angle(m["labelAngle"]),
       label_bound: m["labelBound"],
       label_color: m["labelColor"] && decode_label_color(m["labelColor"]),
       label_flush: m["labelFlush"],
       label_font: m["labelFont"] && decode_label_font(m["labelFont"]),
-      label_font_size: m["labelFontSize"],
-      label_limit: m["labelLimit"],
+      label_font_size: m["labelFontSize"] && decode_label_font_size(m["labelFontSize"]),
+      label_limit: m["labelLimit"] && decode_label_limit(m["labelLimit"]),
       label_overlap: decode_label_overlap(m["labelOverlap"]),
-      label_padding: m["labelPadding"],
+      label_padding: m["labelPadding"] && decode_label_padding(m["labelPadding"]),
       labels: m["labels"],
-      max_extent: m["maxExtent"],
-      min_extent: m["minExtent"],
+      max_extent: m["maxExtent"] && decode_max_extent(m["maxExtent"]),
+      min_extent: m["minExtent"] && decode_min_extent(m["minExtent"]),
       short_time_labels: m["shortTimeLabels"],
       tick_color: m["tickColor"] && decode_tick_color(m["tickColor"]),
       tick_round: m["tickRound"],
       ticks: m["ticks"],
-      tick_size: m["tickSize"],
-      tick_width: m["tickWidth"],
+      tick_size: m["tickSize"] && decode_tick_size(m["tickSize"]),
+      tick_width: m["tickWidth"] && decode_tick_width(m["tickWidth"]),
       title_align: m["titleAlign"] && decode_title_align(m["titleAlign"]),
-      title_angle: m["titleAngle"],
+      title_angle: m["titleAngle"] && decode_title_angle(m["titleAngle"]),
       title_baseline: m["titleBaseline"] && decode_title_baseline(m["titleBaseline"]),
       title_color: m["titleColor"] && decode_title_color(m["titleColor"]),
       title_font: m["titleFont"] && decode_title_font(m["titleFont"]),
-      title_font_size: m["titleFontSize"],
+      title_font_size: m["titleFontSize"] && decode_title_font_size(m["titleFontSize"]),
       title_font_weight: m["titleFontWeight"],
-      title_limit: m["titleLimit"],
-      title_max_length: m["titleMaxLength"],
-      title_padding: m["titlePadding"],
-      title_x: m["titleX"],
-      title_y: m["titleY"],
+      title_limit: m["titleLimit"] && decode_title_limit(m["titleLimit"]),
+      title_max_length: m["titleMaxLength"] && decode_title_max_length(m["titleMaxLength"]),
+      title_padding: m["titlePadding"] && decode_title_padding(m["titlePadding"]),
+      title_x: m["titleX"] && decode_title_x(m["titleX"]),
+      title_y: m["titleY"] && decode_title_y(m["titleY"]),
     }
   end
 
@@ -1197,18 +1461,58 @@ defmodule VGAxisConfig do
           title_y: float() | nil
         }
 
+  def decode_band_position(value) when is_float(value), do: value
+  def decode_band_position(value) when is_integer(value), do: value
+  def decode_band_position(_), do: {:error, "Unexpected type when decoding VGAxisConfig.band_position"}
+
+  def encode_band_position(value) when is_float(value), do: value
+  def encode_band_position(value) when is_integer(value), do: value
+  def encode_band_position(_), do: {:error, "Unexpected type when encoding VGAxisConfig.band_position"}
+
   def decode_domain_color(value) when is_binary(value), do: value
   def decode_domain_color(_), do: {:error, "Unexpected type when decoding VGAxisConfig.domain_color"}
 
   def encode_domain_color(value) when is_binary(value), do: value
   def encode_domain_color(_), do: {:error, "Unexpected type when encoding VGAxisConfig.domain_color"}
 
+  def decode_domain_width(value) when is_float(value), do: value
+  def decode_domain_width(value) when is_integer(value), do: value
+  def decode_domain_width(_), do: {:error, "Unexpected type when decoding VGAxisConfig.domain_width"}
+
+  def encode_domain_width(value) when is_float(value), do: value
+  def encode_domain_width(value) when is_integer(value), do: value
+  def encode_domain_width(_), do: {:error, "Unexpected type when encoding VGAxisConfig.domain_width"}
+
   def decode_grid_color(value) when is_binary(value), do: value
   def decode_grid_color(_), do: {:error, "Unexpected type when decoding VGAxisConfig.grid_color"}
 
   def encode_grid_color(value) when is_binary(value), do: value
   def encode_grid_color(_), do: {:error, "Unexpected type when encoding VGAxisConfig.grid_color"}
 
+  def decode_grid_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_grid_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_grid_opacity(_), do: {:error, "Unexpected type when decoding VGAxisConfig.grid_opacity"}
+
+  def encode_grid_opacity(value) when is_float(value), do: value
+  def encode_grid_opacity(value) when is_integer(value), do: value
+  def encode_grid_opacity(_), do: {:error, "Unexpected type when encoding VGAxisConfig.grid_opacity"}
+
+  def decode_grid_width(value) when is_float(value) and value >= 0, do: value
+  def decode_grid_width(value) when is_integer(value) and value >= 0, do: value
+  def decode_grid_width(_), do: {:error, "Unexpected type when decoding VGAxisConfig.grid_width"}
+
+  def encode_grid_width(value) when is_float(value), do: value
+  def encode_grid_width(value) when is_integer(value), do: value
+  def encode_grid_width(_), do: {:error, "Unexpected type when encoding VGAxisConfig.grid_width"}
+
+  def decode_label_angle(value) when is_float(value) and value >= -360 and value <= 360, do: value
+  def decode_label_angle(value) when is_integer(value) and value >= -360 and value <= 360, do: value
+  def decode_label_angle(_), do: {:error, "Unexpected type when decoding VGAxisConfig.label_angle"}
+
+  def encode_label_angle(value) when is_float(value), do: value
+  def encode_label_angle(value) when is_integer(value), do: value
+  def encode_label_angle(_), do: {:error, "Unexpected type when encoding VGAxisConfig.label_angle"}
+
   def decode_label_color(value) when is_binary(value), do: value
   def decode_label_color(_), do: {:error, "Unexpected type when decoding VGAxisConfig.label_color"}
 
@@ -1221,6 +1525,22 @@ defmodule VGAxisConfig do
   def encode_label_font(value) when is_binary(value), do: value
   def encode_label_font(_), do: {:error, "Unexpected type when encoding VGAxisConfig.label_font"}
 
+  def decode_label_font_size(value) when is_float(value) and value >= 0, do: value
+  def decode_label_font_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_label_font_size(_), do: {:error, "Unexpected type when decoding VGAxisConfig.label_font_size"}
+
+  def encode_label_font_size(value) when is_float(value), do: value
+  def encode_label_font_size(value) when is_integer(value), do: value
+  def encode_label_font_size(_), do: {:error, "Unexpected type when encoding VGAxisConfig.label_font_size"}
+
+  def decode_label_limit(value) when is_float(value), do: value
+  def decode_label_limit(value) when is_integer(value), do: value
+  def decode_label_limit(_), do: {:error, "Unexpected type when decoding VGAxisConfig.label_limit"}
+
+  def encode_label_limit(value) when is_float(value), do: value
+  def encode_label_limit(value) when is_integer(value), do: value
+  def encode_label_limit(_), do: {:error, "Unexpected type when encoding VGAxisConfig.label_limit"}
+
   def decode_label_overlap(value) when is_boolean(value), do: value
   def decode_label_overlap(value) when is_binary(value), do: LabelOverlapEnum.decode(value)
   def decode_label_overlap(value) when is_nil(value), do: value
@@ -1231,18 +1551,66 @@ defmodule VGAxisConfig do
   def encode_label_overlap(value) when is_nil(value), do: value
   def encode_label_overlap(_), do: {:error, "Unexpected type when encoding VGAxisConfig.label_overlap"}
 
+  def decode_label_padding(value) when is_float(value), do: value
+  def decode_label_padding(value) when is_integer(value), do: value
+  def decode_label_padding(_), do: {:error, "Unexpected type when decoding VGAxisConfig.label_padding"}
+
+  def encode_label_padding(value) when is_float(value), do: value
+  def encode_label_padding(value) when is_integer(value), do: value
+  def encode_label_padding(_), do: {:error, "Unexpected type when encoding VGAxisConfig.label_padding"}
+
+  def decode_max_extent(value) when is_float(value), do: value
+  def decode_max_extent(value) when is_integer(value), do: value
+  def decode_max_extent(_), do: {:error, "Unexpected type when decoding VGAxisConfig.max_extent"}
+
+  def encode_max_extent(value) when is_float(value), do: value
+  def encode_max_extent(value) when is_integer(value), do: value
+  def encode_max_extent(_), do: {:error, "Unexpected type when encoding VGAxisConfig.max_extent"}
+
+  def decode_min_extent(value) when is_float(value), do: value
+  def decode_min_extent(value) when is_integer(value), do: value
+  def decode_min_extent(_), do: {:error, "Unexpected type when decoding VGAxisConfig.min_extent"}
+
+  def encode_min_extent(value) when is_float(value), do: value
+  def encode_min_extent(value) when is_integer(value), do: value
+  def encode_min_extent(_), do: {:error, "Unexpected type when encoding VGAxisConfig.min_extent"}
+
   def decode_tick_color(value) when is_binary(value), do: value
   def decode_tick_color(_), do: {:error, "Unexpected type when decoding VGAxisConfig.tick_color"}
 
   def encode_tick_color(value) when is_binary(value), do: value
   def encode_tick_color(_), do: {:error, "Unexpected type when encoding VGAxisConfig.tick_color"}
 
+  def decode_tick_size(value) when is_float(value) and value >= 0, do: value
+  def decode_tick_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_tick_size(_), do: {:error, "Unexpected type when decoding VGAxisConfig.tick_size"}
+
+  def encode_tick_size(value) when is_float(value), do: value
+  def encode_tick_size(value) when is_integer(value), do: value
+  def encode_tick_size(_), do: {:error, "Unexpected type when encoding VGAxisConfig.tick_size"}
+
+  def decode_tick_width(value) when is_float(value) and value >= 0, do: value
+  def decode_tick_width(value) when is_integer(value) and value >= 0, do: value
+  def decode_tick_width(_), do: {:error, "Unexpected type when decoding VGAxisConfig.tick_width"}
+
+  def encode_tick_width(value) when is_float(value), do: value
+  def encode_tick_width(value) when is_integer(value), do: value
+  def encode_tick_width(_), do: {:error, "Unexpected type when encoding VGAxisConfig.tick_width"}
+
   def decode_title_align(value) when is_binary(value), do: value
   def decode_title_align(_), do: {:error, "Unexpected type when decoding VGAxisConfig.title_align"}
 
   def encode_title_align(value) when is_binary(value), do: value
   def encode_title_align(_), do: {:error, "Unexpected type when encoding VGAxisConfig.title_align"}
 
+  def decode_title_angle(value) when is_float(value), do: value
+  def decode_title_angle(value) when is_integer(value), do: value
+  def decode_title_angle(_), do: {:error, "Unexpected type when decoding VGAxisConfig.title_angle"}
+
+  def encode_title_angle(value) when is_float(value), do: value
+  def encode_title_angle(value) when is_integer(value), do: value
+  def encode_title_angle(_), do: {:error, "Unexpected type when encoding VGAxisConfig.title_angle"}
+
   def decode_title_baseline(value) when is_binary(value), do: value
   def decode_title_baseline(_), do: {:error, "Unexpected type when decoding VGAxisConfig.title_baseline"}
 
@@ -1261,46 +1629,94 @@ defmodule VGAxisConfig do
   def encode_title_font(value) when is_binary(value), do: value
   def encode_title_font(_), do: {:error, "Unexpected type when encoding VGAxisConfig.title_font"}
 
+  def decode_title_font_size(value) when is_float(value) and value >= 0, do: value
+  def decode_title_font_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_title_font_size(_), do: {:error, "Unexpected type when decoding VGAxisConfig.title_font_size"}
+
+  def encode_title_font_size(value) when is_float(value), do: value
+  def encode_title_font_size(value) when is_integer(value), do: value
+  def encode_title_font_size(_), do: {:error, "Unexpected type when encoding VGAxisConfig.title_font_size"}
+
+  def decode_title_limit(value) when is_float(value), do: value
+  def decode_title_limit(value) when is_integer(value), do: value
+  def decode_title_limit(_), do: {:error, "Unexpected type when decoding VGAxisConfig.title_limit"}
+
+  def encode_title_limit(value) when is_float(value), do: value
+  def encode_title_limit(value) when is_integer(value), do: value
+  def encode_title_limit(_), do: {:error, "Unexpected type when encoding VGAxisConfig.title_limit"}
+
+  def decode_title_max_length(value) when is_float(value), do: value
+  def decode_title_max_length(value) when is_integer(value), do: value
+  def decode_title_max_length(_), do: {:error, "Unexpected type when decoding VGAxisConfig.title_max_length"}
+
+  def encode_title_max_length(value) when is_float(value), do: value
+  def encode_title_max_length(value) when is_integer(value), do: value
+  def encode_title_max_length(_), do: {:error, "Unexpected type when encoding VGAxisConfig.title_max_length"}
+
+  def decode_title_padding(value) when is_float(value), do: value
+  def decode_title_padding(value) when is_integer(value), do: value
+  def decode_title_padding(_), do: {:error, "Unexpected type when decoding VGAxisConfig.title_padding"}
+
+  def encode_title_padding(value) when is_float(value), do: value
+  def encode_title_padding(value) when is_integer(value), do: value
+  def encode_title_padding(_), do: {:error, "Unexpected type when encoding VGAxisConfig.title_padding"}
+
+  def decode_title_x(value) when is_float(value), do: value
+  def decode_title_x(value) when is_integer(value), do: value
+  def decode_title_x(_), do: {:error, "Unexpected type when decoding VGAxisConfig.title_x"}
+
+  def encode_title_x(value) when is_float(value), do: value
+  def encode_title_x(value) when is_integer(value), do: value
+  def encode_title_x(_), do: {:error, "Unexpected type when encoding VGAxisConfig.title_x"}
+
+  def decode_title_y(value) when is_float(value), do: value
+  def decode_title_y(value) when is_integer(value), do: value
+  def decode_title_y(_), do: {:error, "Unexpected type when decoding VGAxisConfig.title_y"}
+
+  def encode_title_y(value) when is_float(value), do: value
+  def encode_title_y(value) when is_integer(value), do: value
+  def encode_title_y(_), do: {:error, "Unexpected type when encoding VGAxisConfig.title_y"}
+
   def from_map(m) do
     %VGAxisConfig{
-      band_position: m["bandPosition"],
+      band_position: m["bandPosition"] && decode_band_position(m["bandPosition"]),
       domain: m["domain"],
       domain_color: m["domainColor"] && decode_domain_color(m["domainColor"]),
-      domain_width: m["domainWidth"],
+      domain_width: m["domainWidth"] && decode_domain_width(m["domainWidth"]),
       grid: m["grid"],
       grid_color: m["gridColor"] && decode_grid_color(m["gridColor"]),
       grid_dash: m["gridDash"],
-      grid_opacity: m["gridOpacity"],
-      grid_width: m["gridWidth"],
-      label_angle: m["labelAngle"],
+      grid_opacity: m["gridOpacity"] && decode_grid_opacity(m["gridOpacity"]),
+      grid_width: m["gridWidth"] && decode_grid_width(m["gridWidth"]),
+      label_angle: m["labelAngle"] && decode_label_angle(m["labelAngle"]),
       label_bound: m["labelBound"],
       label_color: m["labelColor"] && decode_label_color(m["labelColor"]),
       label_flush: m["labelFlush"],
       label_font: m["labelFont"] && decode_label_font(m["labelFont"]),
-      label_font_size: m["labelFontSize"],
-      label_limit: m["labelLimit"],
+      label_font_size: m["labelFontSize"] && decode_label_font_size(m["labelFontSize"]),
+      label_limit: m["labelLimit"] && decode_label_limit(m["labelLimit"]),
       label_overlap: decode_label_overlap(m["labelOverlap"]),
-      label_padding: m["labelPadding"],
+      label_padding: m["labelPadding"] && decode_label_padding(m["labelPadding"]),
       labels: m["labels"],
-      max_extent: m["maxExtent"],
-      min_extent: m["minExtent"],
+      max_extent: m["maxExtent"] && decode_max_extent(m["maxExtent"]),
+      min_extent: m["minExtent"] && decode_min_extent(m["minExtent"]),
       tick_color: m["tickColor"] && decode_tick_color(m["tickColor"]),
       tick_round: m["tickRound"],
       ticks: m["ticks"],
-      tick_size: m["tickSize"],
-      tick_width: m["tickWidth"],
+      tick_size: m["tickSize"] && decode_tick_size(m["tickSize"]),
+      tick_width: m["tickWidth"] && decode_tick_width(m["tickWidth"]),
       title_align: m["titleAlign"] && decode_title_align(m["titleAlign"]),
-      title_angle: m["titleAngle"],
+      title_angle: m["titleAngle"] && decode_title_angle(m["titleAngle"]),
       title_baseline: m["titleBaseline"] && decode_title_baseline(m["titleBaseline"]),
       title_color: m["titleColor"] && decode_title_color(m["titleColor"]),
       title_font: m["titleFont"] && decode_title_font(m["titleFont"]),
-      title_font_size: m["titleFontSize"],
+      title_font_size: m["titleFontSize"] && decode_title_font_size(m["titleFontSize"]),
       title_font_weight: m["titleFontWeight"],
-      title_limit: m["titleLimit"],
-      title_max_length: m["titleMaxLength"],
-      title_padding: m["titlePadding"],
-      title_x: m["titleX"],
-      title_y: m["titleY"],
+      title_limit: m["titleLimit"] && decode_title_limit(m["titleLimit"]),
+      title_max_length: m["titleMaxLength"] && decode_title_max_length(m["titleMaxLength"]),
+      title_padding: m["titlePadding"] && decode_title_padding(m["titlePadding"]),
+      title_x: m["titleX"] && decode_title_x(m["titleX"]),
+      title_y: m["titleY"] && decode_title_y(m["titleY"]),
     }
   end
 
@@ -1436,27 +1852,91 @@ defmodule BarConfig do
           theta: float() | nil
         }
 
+  def decode_angle(value) when is_float(value) and value >= 0 and value <= 360, do: value
+  def decode_angle(value) when is_integer(value) and value >= 0 and value <= 360, do: value
+  def decode_angle(_), do: {:error, "Unexpected type when decoding BarConfig.angle"}
+
+  def encode_angle(value) when is_float(value), do: value
+  def encode_angle(value) when is_integer(value), do: value
+  def encode_angle(_), do: {:error, "Unexpected type when encoding BarConfig.angle"}
+
+  def decode_bin_spacing(value) when is_float(value) and value >= 0, do: value
+  def decode_bin_spacing(value) when is_integer(value) and value >= 0, do: value
+  def decode_bin_spacing(_), do: {:error, "Unexpected type when decoding BarConfig.bin_spacing"}
+
+  def encode_bin_spacing(value) when is_float(value), do: value
+  def encode_bin_spacing(value) when is_integer(value), do: value
+  def encode_bin_spacing(_), do: {:error, "Unexpected type when encoding BarConfig.bin_spacing"}
+
   def decode_color(value) when is_binary(value), do: value
   def decode_color(_), do: {:error, "Unexpected type when decoding BarConfig.color"}
 
   def encode_color(value) when is_binary(value), do: value
   def encode_color(_), do: {:error, "Unexpected type when encoding BarConfig.color"}
 
+  def decode_continuous_band_size(value) when is_float(value) and value >= 0, do: value
+  def decode_continuous_band_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_continuous_band_size(_), do: {:error, "Unexpected type when decoding BarConfig.continuous_band_size"}
+
+  def encode_continuous_band_size(value) when is_float(value), do: value
+  def encode_continuous_band_size(value) when is_integer(value), do: value
+  def encode_continuous_band_size(_), do: {:error, "Unexpected type when encoding BarConfig.continuous_band_size"}
+
+  def decode_discrete_band_size(value) when is_float(value) and value >= 0, do: value
+  def decode_discrete_band_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_discrete_band_size(_), do: {:error, "Unexpected type when decoding BarConfig.discrete_band_size"}
+
+  def encode_discrete_band_size(value) when is_float(value), do: value
+  def encode_discrete_band_size(value) when is_integer(value), do: value
+  def encode_discrete_band_size(_), do: {:error, "Unexpected type when encoding BarConfig.discrete_band_size"}
+
+  def decode_dx(value) when is_float(value), do: value
+  def decode_dx(value) when is_integer(value), do: value
+  def decode_dx(_), do: {:error, "Unexpected type when decoding BarConfig.dx"}
+
+  def encode_dx(value) when is_float(value), do: value
+  def encode_dx(value) when is_integer(value), do: value
+  def encode_dx(_), do: {:error, "Unexpected type when encoding BarConfig.dx"}
+
+  def decode_dy(value) when is_float(value), do: value
+  def decode_dy(value) when is_integer(value), do: value
+  def decode_dy(_), do: {:error, "Unexpected type when decoding BarConfig.dy"}
+
+  def encode_dy(value) when is_float(value), do: value
+  def encode_dy(value) when is_integer(value), do: value
+  def encode_dy(_), do: {:error, "Unexpected type when encoding BarConfig.dy"}
+
   def decode_fill(value) when is_binary(value), do: value
   def decode_fill(_), do: {:error, "Unexpected type when decoding BarConfig.fill"}
 
   def encode_fill(value) when is_binary(value), do: value
   def encode_fill(_), do: {:error, "Unexpected type when encoding BarConfig.fill"}
 
+  def decode_fill_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_fill_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_fill_opacity(_), do: {:error, "Unexpected type when decoding BarConfig.fill_opacity"}
+
+  def encode_fill_opacity(value) when is_float(value), do: value
+  def encode_fill_opacity(value) when is_integer(value), do: value
+  def encode_fill_opacity(_), do: {:error, "Unexpected type when encoding BarConfig.fill_opacity"}
+
   def decode_font(value) when is_binary(value), do: value
   def decode_font(_), do: {:error, "Unexpected type when decoding BarConfig.font"}
 
   def encode_font(value) when is_binary(value), do: value
   def encode_font(_), do: {:error, "Unexpected type when encoding BarConfig.font"}
 
+  def decode_font_size(value) when is_float(value) and value >= 0, do: value
+  def decode_font_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_font_size(_), do: {:error, "Unexpected type when decoding BarConfig.font_size"}
+
+  def encode_font_size(value) when is_float(value), do: value
+  def encode_font_size(value) when is_integer(value), do: value
+  def encode_font_size(_), do: {:error, "Unexpected type when encoding BarConfig.font_size"}
+
   def decode_font_weight(value) when is_binary(value), do: FontWeight.decode(value)
-  def decode_font_weight(value) when is_float(value), do: value
-  def decode_font_weight(value) when is_integer(value), do: value
+  def decode_font_weight(value) when is_float(value) and value >= 100 and value <= 900, do: value
+  def decode_font_weight(value) when is_integer(value) and value >= 100 and value <= 900, do: value
   def decode_font_weight(value) when is_nil(value), do: value
   def decode_font_weight(_), do: {:error, "Unexpected type when decoding BarConfig.font_weight"}
 
@@ -1472,59 +1952,131 @@ defmodule BarConfig do
   def encode_href(value) when is_binary(value), do: value
   def encode_href(_), do: {:error, "Unexpected type when encoding BarConfig.href"}
 
+  def decode_limit(value) when is_float(value), do: value
+  def decode_limit(value) when is_integer(value), do: value
+  def decode_limit(_), do: {:error, "Unexpected type when decoding BarConfig.limit"}
+
+  def encode_limit(value) when is_float(value), do: value
+  def encode_limit(value) when is_integer(value), do: value
+  def encode_limit(_), do: {:error, "Unexpected type when encoding BarConfig.limit"}
+
+  def decode_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_opacity(_), do: {:error, "Unexpected type when decoding BarConfig.opacity"}
+
+  def encode_opacity(value) when is_float(value), do: value
+  def encode_opacity(value) when is_integer(value), do: value
+  def encode_opacity(_), do: {:error, "Unexpected type when encoding BarConfig.opacity"}
+
+  def decode_radius(value) when is_float(value) and value >= 0, do: value
+  def decode_radius(value) when is_integer(value) and value >= 0, do: value
+  def decode_radius(_), do: {:error, "Unexpected type when decoding BarConfig.radius"}
+
+  def encode_radius(value) when is_float(value), do: value
+  def encode_radius(value) when is_integer(value), do: value
+  def encode_radius(_), do: {:error, "Unexpected type when encoding BarConfig.radius"}
+
   def decode_shape(value) when is_binary(value), do: value
   def decode_shape(_), do: {:error, "Unexpected type when decoding BarConfig.shape"}
 
   def encode_shape(value) when is_binary(value), do: value
   def encode_shape(_), do: {:error, "Unexpected type when encoding BarConfig.shape"}
 
+  def decode_size(value) when is_float(value) and value >= 0, do: value
+  def decode_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_size(_), do: {:error, "Unexpected type when decoding BarConfig.size"}
+
+  def encode_size(value) when is_float(value), do: value
+  def encode_size(value) when is_integer(value), do: value
+  def encode_size(_), do: {:error, "Unexpected type when encoding BarConfig.size"}
+
   def decode_stroke(value) when is_binary(value), do: value
   def decode_stroke(_), do: {:error, "Unexpected type when decoding BarConfig.stroke"}
 
   def encode_stroke(value) when is_binary(value), do: value
   def encode_stroke(_), do: {:error, "Unexpected type when encoding BarConfig.stroke"}
 
+  def decode_stroke_dash_offset(value) when is_float(value), do: value
+  def decode_stroke_dash_offset(value) when is_integer(value), do: value
+  def decode_stroke_dash_offset(_), do: {:error, "Unexpected type when decoding BarConfig.stroke_dash_offset"}
+
+  def encode_stroke_dash_offset(value) when is_float(value), do: value
+  def encode_stroke_dash_offset(value) when is_integer(value), do: value
+  def encode_stroke_dash_offset(_), do: {:error, "Unexpected type when encoding BarConfig.stroke_dash_offset"}
+
+  def decode_stroke_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_stroke_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_stroke_opacity(_), do: {:error, "Unexpected type when decoding BarConfig.stroke_opacity"}
+
+  def encode_stroke_opacity(value) when is_float(value), do: value
+  def encode_stroke_opacity(value) when is_integer(value), do: value
+  def encode_stroke_opacity(_), do: {:error, "Unexpected type when encoding BarConfig.stroke_opacity"}
+
+  def decode_stroke_width(value) when is_float(value) and value >= 0, do: value
+  def decode_stroke_width(value) when is_integer(value) and value >= 0, do: value
+  def decode_stroke_width(_), do: {:error, "Unexpected type when decoding BarConfig.stroke_width"}
+
+  def encode_stroke_width(value) when is_float(value), do: value
+  def encode_stroke_width(value) when is_integer(value), do: value
+  def encode_stroke_width(_), do: {:error, "Unexpected type when encoding BarConfig.stroke_width"}
+
+  def decode_tension(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_tension(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_tension(_), do: {:error, "Unexpected type when decoding BarConfig.tension"}
+
+  def encode_tension(value) when is_float(value), do: value
+  def encode_tension(value) when is_integer(value), do: value
+  def encode_tension(_), do: {:error, "Unexpected type when encoding BarConfig.tension"}
+
   def decode_text(value) when is_binary(value), do: value
   def decode_text(_), do: {:error, "Unexpected type when decoding BarConfig.text"}
 
   def encode_text(value) when is_binary(value), do: value
   def encode_text(_), do: {:error, "Unexpected type when encoding BarConfig.text"}
 
+  def decode_theta(value) when is_float(value), do: value
+  def decode_theta(value) when is_integer(value), do: value
+  def decode_theta(_), do: {:error, "Unexpected type when decoding BarConfig.theta"}
+
+  def encode_theta(value) when is_float(value), do: value
+  def encode_theta(value) when is_integer(value), do: value
+  def encode_theta(_), do: {:error, "Unexpected type when encoding BarConfig.theta"}
+
   def from_map(m) do
     %BarConfig{
       align: m["align"] && HorizontalAlign.decode(m["align"]),
-      angle: m["angle"],
+      angle: m["angle"] && decode_angle(m["angle"]),
       baseline: m["baseline"] && VerticalAlign.decode(m["baseline"]),
-      bin_spacing: m["binSpacing"],
+      bin_spacing: m["binSpacing"] && decode_bin_spacing(m["binSpacing"]),
       color: m["color"] && decode_color(m["color"]),
-      continuous_band_size: m["continuousBandSize"],
+      continuous_band_size: m["continuousBandSize"] && decode_continuous_band_size(m["continuousBandSize"]),
       cursor: m["cursor"] && Cursor.decode(m["cursor"]),
-      discrete_band_size: m["discreteBandSize"],
-      dx: m["dx"],
-      dy: m["dy"],
+      discrete_band_size: m["discreteBandSize"] && decode_discrete_band_size(m["discreteBandSize"]),
+      dx: m["dx"] && decode_dx(m["dx"]),
+      dy: m["dy"] && decode_dy(m["dy"]),
       fill: m["fill"] && decode_fill(m["fill"]),
       filled: m["filled"],
-      fill_opacity: m["fillOpacity"],
+      fill_opacity: m["fillOpacity"] && decode_fill_opacity(m["fillOpacity"]),
       font: m["font"] && decode_font(m["font"]),
-      font_size: m["fontSize"],
+      font_size: m["fontSize"] && decode_font_size(m["fontSize"]),
       font_style: m["fontStyle"] && FontStyle.decode(m["fontStyle"]),
       font_weight: decode_font_weight(m["fontWeight"]),
       href: m["href"] && decode_href(m["href"]),
       interpolate: m["interpolate"] && Interpolate.decode(m["interpolate"]),
-      limit: m["limit"],
-      opacity: m["opacity"],
+      limit: m["limit"] && decode_limit(m["limit"]),
+      opacity: m["opacity"] && decode_opacity(m["opacity"]),
       orient: m["orient"] && Orient.decode(m["orient"]),
-      radius: m["radius"],
+      radius: m["radius"] && decode_radius(m["radius"]),
       shape: m["shape"] && decode_shape(m["shape"]),
-      size: m["size"],
+      size: m["size"] && decode_size(m["size"]),
       stroke: m["stroke"] && decode_stroke(m["stroke"]),
       stroke_dash: m["strokeDash"],
-      stroke_dash_offset: m["strokeDashOffset"],
-      stroke_opacity: m["strokeOpacity"],
-      stroke_width: m["strokeWidth"],
-      tension: m["tension"],
+      stroke_dash_offset: m["strokeDashOffset"] && decode_stroke_dash_offset(m["strokeDashOffset"]),
+      stroke_opacity: m["strokeOpacity"] && decode_stroke_opacity(m["strokeOpacity"]),
+      stroke_width: m["strokeWidth"] && decode_stroke_width(m["strokeWidth"]),
+      tension: m["tension"] && decode_tension(m["tension"]),
       text: m["text"] && decode_text(m["text"]),
-      theta: m["theta"],
+      theta: m["theta"] && decode_theta(m["theta"]),
     }
   end
 
@@ -1829,24 +2381,80 @@ defmodule LegendConfig do
           title_padding: float() | nil
         }
 
+  def decode_corner_radius(value) when is_float(value), do: value
+  def decode_corner_radius(value) when is_integer(value), do: value
+  def decode_corner_radius(_), do: {:error, "Unexpected type when decoding LegendConfig.corner_radius"}
+
+  def encode_corner_radius(value) when is_float(value), do: value
+  def encode_corner_radius(value) when is_integer(value), do: value
+  def encode_corner_radius(_), do: {:error, "Unexpected type when encoding LegendConfig.corner_radius"}
+
+  def decode_entry_padding(value) when is_float(value), do: value
+  def decode_entry_padding(value) when is_integer(value), do: value
+  def decode_entry_padding(_), do: {:error, "Unexpected type when decoding LegendConfig.entry_padding"}
+
+  def encode_entry_padding(value) when is_float(value), do: value
+  def encode_entry_padding(value) when is_integer(value), do: value
+  def encode_entry_padding(_), do: {:error, "Unexpected type when encoding LegendConfig.entry_padding"}
+
   def decode_fill_color(value) when is_binary(value), do: value
   def decode_fill_color(_), do: {:error, "Unexpected type when decoding LegendConfig.fill_color"}
 
   def encode_fill_color(value) when is_binary(value), do: value
   def encode_fill_color(_), do: {:error, "Unexpected type when encoding LegendConfig.fill_color"}
 
+  def decode_gradient_height(value) when is_float(value) and value >= 0, do: value
+  def decode_gradient_height(value) when is_integer(value) and value >= 0, do: value
+  def decode_gradient_height(_), do: {:error, "Unexpected type when decoding LegendConfig.gradient_height"}
+
+  def encode_gradient_height(value) when is_float(value), do: value
+  def encode_gradient_height(value) when is_integer(value), do: value
+  def encode_gradient_height(_), do: {:error, "Unexpected type when encoding LegendConfig.gradient_height"}
+
   def decode_gradient_label_baseline(value) when is_binary(value), do: value
   def decode_gradient_label_baseline(_), do: {:error, "Unexpected type when decoding LegendConfig.gradient_label_baseline"}
 
   def encode_gradient_label_baseline(value) when is_binary(value), do: value
   def encode_gradient_label_baseline(_), do: {:error, "Unexpected type when encoding LegendConfig.gradient_label_baseline"}
 
+  def decode_gradient_label_limit(value) when is_float(value), do: value
+  def decode_gradient_label_limit(value) when is_integer(value), do: value
+  def decode_gradient_label_limit(_), do: {:error, "Unexpected type when decoding LegendConfig.gradient_label_limit"}
+
+  def encode_gradient_label_limit(value) when is_float(value), do: value
+  def encode_gradient_label_limit(value) when is_integer(value), do: value
+  def encode_gradient_label_limit(_), do: {:error, "Unexpected type when encoding LegendConfig.gradient_label_limit"}
+
+  def decode_gradient_label_offset(value) when is_float(value), do: value
+  def decode_gradient_label_offset(value) when is_integer(value), do: value
+  def decode_gradient_label_offset(_), do: {:error, "Unexpected type when decoding LegendConfig.gradient_label_offset"}
+
+  def encode_gradient_label_offset(value) when is_float(value), do: value
+  def encode_gradient_label_offset(value) when is_integer(value), do: value
+  def encode_gradient_label_offset(_), do: {:error, "Unexpected type when encoding LegendConfig.gradient_label_offset"}
+
   def decode_gradient_stroke_color(value) when is_binary(value), do: value
   def decode_gradient_stroke_color(_), do: {:error, "Unexpected type when decoding LegendConfig.gradient_stroke_color"}
 
   def encode_gradient_stroke_color(value) when is_binary(value), do: value
   def encode_gradient_stroke_color(_), do: {:error, "Unexpected type when encoding LegendConfig.gradient_stroke_color"}
 
+  def decode_gradient_stroke_width(value) when is_float(value) and value >= 0, do: value
+  def decode_gradient_stroke_width(value) when is_integer(value) and value >= 0, do: value
+  def decode_gradient_stroke_width(_), do: {:error, "Unexpected type when decoding LegendConfig.gradient_stroke_width"}
+
+  def encode_gradient_stroke_width(value) when is_float(value), do: value
+  def encode_gradient_stroke_width(value) when is_integer(value), do: value
+  def encode_gradient_stroke_width(_), do: {:error, "Unexpected type when encoding LegendConfig.gradient_stroke_width"}
+
+  def decode_gradient_width(value) when is_float(value) and value >= 0, do: value
+  def decode_gradient_width(value) when is_integer(value) and value >= 0, do: value
+  def decode_gradient_width(_), do: {:error, "Unexpected type when decoding LegendConfig.gradient_width"}
+
+  def encode_gradient_width(value) when is_float(value), do: value
+  def encode_gradient_width(value) when is_integer(value), do: value
+  def encode_gradient_width(_), do: {:error, "Unexpected type when encoding LegendConfig.gradient_width"}
+
   def decode_label_align(value) when is_binary(value), do: value
   def decode_label_align(_), do: {:error, "Unexpected type when decoding LegendConfig.label_align"}
 
@@ -1871,18 +2479,82 @@ defmodule LegendConfig do
   def encode_label_font(value) when is_binary(value), do: value
   def encode_label_font(_), do: {:error, "Unexpected type when encoding LegendConfig.label_font"}
 
+  def decode_label_font_size(value) when is_float(value) and value >= 0, do: value
+  def decode_label_font_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_label_font_size(_), do: {:error, "Unexpected type when decoding LegendConfig.label_font_size"}
+
+  def encode_label_font_size(value) when is_float(value), do: value
+  def encode_label_font_size(value) when is_integer(value), do: value
+  def encode_label_font_size(_), do: {:error, "Unexpected type when encoding LegendConfig.label_font_size"}
+
+  def decode_label_limit(value) when is_float(value), do: value
+  def decode_label_limit(value) when is_integer(value), do: value
+  def decode_label_limit(_), do: {:error, "Unexpected type when decoding LegendConfig.label_limit"}
+
+  def encode_label_limit(value) when is_float(value), do: value
+  def encode_label_limit(value) when is_integer(value), do: value
+  def encode_label_limit(_), do: {:error, "Unexpected type when encoding LegendConfig.label_limit"}
+
+  def decode_label_offset(value) when is_float(value) and value >= 0, do: value
+  def decode_label_offset(value) when is_integer(value) and value >= 0, do: value
+  def decode_label_offset(_), do: {:error, "Unexpected type when decoding LegendConfig.label_offset"}
+
+  def encode_label_offset(value) when is_float(value), do: value
+  def encode_label_offset(value) when is_integer(value), do: value
+  def encode_label_offset(_), do: {:error, "Unexpected type when encoding LegendConfig.label_offset"}
+
+  def decode_offset(value) when is_float(value), do: value
+  def decode_offset(value) when is_integer(value), do: value
+  def decode_offset(_), do: {:error, "Unexpected type when decoding LegendConfig.offset"}
+
+  def encode_offset(value) when is_float(value), do: value
+  def encode_offset(value) when is_integer(value), do: value
+  def encode_offset(_), do: {:error, "Unexpected type when encoding LegendConfig.offset"}
+
+  def decode_padding(value) when is_float(value), do: value
+  def decode_padding(value) when is_integer(value), do: value
+  def decode_padding(_), do: {:error, "Unexpected type when decoding LegendConfig.padding"}
+
+  def encode_padding(value) when is_float(value), do: value
+  def encode_padding(value) when is_integer(value), do: value
+  def encode_padding(_), do: {:error, "Unexpected type when encoding LegendConfig.padding"}
+
   def decode_stroke_color(value) when is_binary(value), do: value
   def decode_stroke_color(_), do: {:error, "Unexpected type when decoding LegendConfig.stroke_color"}
 
   def encode_stroke_color(value) when is_binary(value), do: value
   def encode_stroke_color(_), do: {:error, "Unexpected type when encoding LegendConfig.stroke_color"}
 
+  def decode_stroke_width(value) when is_float(value), do: value
+  def decode_stroke_width(value) when is_integer(value), do: value
+  def decode_stroke_width(_), do: {:error, "Unexpected type when decoding LegendConfig.stroke_width"}
+
+  def encode_stroke_width(value) when is_float(value), do: value
+  def encode_stroke_width(value) when is_integer(value), do: value
+  def encode_stroke_width(_), do: {:error, "Unexpected type when encoding LegendConfig.stroke_width"}
+
   def decode_symbol_color(value) when is_binary(value), do: value
   def decode_symbol_color(_), do: {:error, "Unexpected type when decoding LegendConfig.symbol_color"}
 
   def encode_symbol_color(value) when is_binary(value), do: value
   def encode_symbol_color(_), do: {:error, "Unexpected type when encoding LegendConfig.symbol_color"}
 
+  def decode_symbol_size(value) when is_float(value) and value >= 0, do: value
+  def decode_symbol_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_symbol_size(_), do: {:error, "Unexpected type when decoding LegendConfig.symbol_size"}
+
+  def encode_symbol_size(value) when is_float(value), do: value
+  def encode_symbol_size(value) when is_integer(value), do: value
+  def encode_symbol_size(_), do: {:error, "Unexpected type when encoding LegendConfig.symbol_size"}
+
+  def decode_symbol_stroke_width(value) when is_float(value) and value >= 0, do: value
+  def decode_symbol_stroke_width(value) when is_integer(value) and value >= 0, do: value
+  def decode_symbol_stroke_width(_), do: {:error, "Unexpected type when decoding LegendConfig.symbol_stroke_width"}
+
+  def encode_symbol_stroke_width(value) when is_float(value), do: value
+  def encode_symbol_stroke_width(value) when is_integer(value), do: value
+  def encode_symbol_stroke_width(_), do: {:error, "Unexpected type when encoding LegendConfig.symbol_stroke_width"}
+
   def decode_symbol_type(value) when is_binary(value), do: value
   def decode_symbol_type(_), do: {:error, "Unexpected type when decoding LegendConfig.symbol_type"}
 
@@ -1913,44 +2585,68 @@ defmodule LegendConfig do
   def encode_title_font(value) when is_binary(value), do: value
   def encode_title_font(_), do: {:error, "Unexpected type when encoding LegendConfig.title_font"}
 
+  def decode_title_font_size(value) when is_float(value), do: value
+  def decode_title_font_size(value) when is_integer(value), do: value
+  def decode_title_font_size(_), do: {:error, "Unexpected type when decoding LegendConfig.title_font_size"}
+
+  def encode_title_font_size(value) when is_float(value), do: value
+  def encode_title_font_size(value) when is_integer(value), do: value
+  def encode_title_font_size(_), do: {:error, "Unexpected type when encoding LegendConfig.title_font_size"}
+
+  def decode_title_limit(value) when is_float(value), do: value
+  def decode_title_limit(value) when is_integer(value), do: value
+  def decode_title_limit(_), do: {:error, "Unexpected type when decoding LegendConfig.title_limit"}
+
+  def encode_title_limit(value) when is_float(value), do: value
+  def encode_title_limit(value) when is_integer(value), do: value
+  def encode_title_limit(_), do: {:error, "Unexpected type when encoding LegendConfig.title_limit"}
+
+  def decode_title_padding(value) when is_float(value), do: value
+  def decode_title_padding(value) when is_integer(value), do: value
+  def decode_title_padding(_), do: {:error, "Unexpected type when decoding LegendConfig.title_padding"}
+
+  def encode_title_padding(value) when is_float(value), do: value
+  def encode_title_padding(value) when is_integer(value), do: value
+  def encode_title_padding(_), do: {:error, "Unexpected type when encoding LegendConfig.title_padding"}
+
   def from_map(m) do
     %LegendConfig{
-      corner_radius: m["cornerRadius"],
-      entry_padding: m["entryPadding"],
+      corner_radius: m["cornerRadius"] && decode_corner_radius(m["cornerRadius"]),
+      entry_padding: m["entryPadding"] && decode_entry_padding(m["entryPadding"]),
       fill_color: m["fillColor"] && decode_fill_color(m["fillColor"]),
-      gradient_height: m["gradientHeight"],
+      gradient_height: m["gradientHeight"] && decode_gradient_height(m["gradientHeight"]),
       gradient_label_baseline: m["gradientLabelBaseline"] && decode_gradient_label_baseline(m["gradientLabelBaseline"]),
-      gradient_label_limit: m["gradientLabelLimit"],
-      gradient_label_offset: m["gradientLabelOffset"],
+      gradient_label_limit: m["gradientLabelLimit"] && decode_gradient_label_limit(m["gradientLabelLimit"]),
+      gradient_label_offset: m["gradientLabelOffset"] && decode_gradient_label_offset(m["gradientLabelOffset"]),
       gradient_stroke_color: m["gradientStrokeColor"] && decode_gradient_stroke_color(m["gradientStrokeColor"]),
-      gradient_stroke_width: m["gradientStrokeWidth"],
-      gradient_width: m["gradientWidth"],
+      gradient_stroke_width: m["gradientStrokeWidth"] && decode_gradient_stroke_width(m["gradientStrokeWidth"]),
+      gradient_width: m["gradientWidth"] && decode_gradient_width(m["gradientWidth"]),
       label_align: m["labelAlign"] && decode_label_align(m["labelAlign"]),
       label_baseline: m["labelBaseline"] && decode_label_baseline(m["labelBaseline"]),
       label_color: m["labelColor"] && decode_label_color(m["labelColor"]),
       label_font: m["labelFont"] && decode_label_font(m["labelFont"]),
-      label_font_size: m["labelFontSize"],
-      label_limit: m["labelLimit"],
-      label_offset: m["labelOffset"],
-      offset: m["offset"],
+      label_font_size: m["labelFontSize"] && decode_label_font_size(m["labelFontSize"]),
+      label_limit: m["labelLimit"] && decode_label_limit(m["labelLimit"]),
+      label_offset: m["labelOffset"] && decode_label_offset(m["labelOffset"]),
+      offset: m["offset"] && decode_offset(m["offset"]),
       orient: m["orient"] && LegendOrient.decode(m["orient"]),
-      padding: m["padding"],
+      padding: m["padding"] && decode_padding(m["padding"]),
       short_time_labels: m["shortTimeLabels"],
       stroke_color: m["strokeColor"] && decode_stroke_color(m["strokeColor"]),
       stroke_dash: m["strokeDash"],
-      stroke_width: m["strokeWidth"],
+      stroke_width: m["strokeWidth"] && decode_stroke_width(m["strokeWidth"]),
       symbol_color: m["symbolColor"] && decode_symbol_color(m["symbolColor"]),
-      symbol_size: m["symbolSize"],
-      symbol_stroke_width: m["symbolStrokeWidth"],
+      symbol_size: m["symbolSize"] && decode_symbol_size(m["symbolSize"]),
+      symbol_stroke_width: m["symbolStrokeWidth"] && decode_symbol_stroke_width(m["symbolStrokeWidth"]),
       symbol_type: m["symbolType"] && decode_symbol_type(m["symbolType"]),
       title_align: m["titleAlign"] && decode_title_align(m["titleAlign"]),
       title_baseline: m["titleBaseline"] && decode_title_baseline(m["titleBaseline"]),
       title_color: m["titleColor"] && decode_title_color(m["titleColor"]),
       title_font: m["titleFont"] && decode_title_font(m["titleFont"]),
-      title_font_size: m["titleFontSize"],
+      title_font_size: m["titleFontSize"] && decode_title_font_size(m["titleFontSize"]),
       title_font_weight: m["titleFontWeight"],
-      title_limit: m["titleLimit"],
-      title_padding: m["titlePadding"],
+      title_limit: m["titleLimit"] && decode_title_limit(m["titleLimit"]),
+      title_padding: m["titlePadding"] && decode_title_padding(m["titlePadding"]),
     }
   end
 
@@ -2018,12 +2714,44 @@ defmodule PaddingClass do
           top: float() | nil
         }
 
+  def decode_bottom(value) when is_float(value), do: value
+  def decode_bottom(value) when is_integer(value), do: value
+  def decode_bottom(_), do: {:error, "Unexpected type when decoding PaddingClass.bottom"}
+
+  def encode_bottom(value) when is_float(value), do: value
+  def encode_bottom(value) when is_integer(value), do: value
+  def encode_bottom(_), do: {:error, "Unexpected type when encoding PaddingClass.bottom"}
+
+  def decode_left(value) when is_float(value), do: value
+  def decode_left(value) when is_integer(value), do: value
+  def decode_left(_), do: {:error, "Unexpected type when decoding PaddingClass.left"}
+
+  def encode_left(value) when is_float(value), do: value
+  def encode_left(value) when is_integer(value), do: value
+  def encode_left(_), do: {:error, "Unexpected type when encoding PaddingClass.left"}
+
+  def decode_right(value) when is_float(value), do: value
+  def decode_right(value) when is_integer(value), do: value
+  def decode_right(_), do: {:error, "Unexpected type when decoding PaddingClass.right"}
+
+  def encode_right(value) when is_float(value), do: value
+  def encode_right(value) when is_integer(value), do: value
+  def encode_right(_), do: {:error, "Unexpected type when encoding PaddingClass.right"}
+
+  def decode_top(value) when is_float(value), do: value
+  def decode_top(value) when is_integer(value), do: value
+  def decode_top(_), do: {:error, "Unexpected type when decoding PaddingClass.top"}
+
+  def encode_top(value) when is_float(value), do: value
+  def encode_top(value) when is_integer(value), do: value
+  def encode_top(_), do: {:error, "Unexpected type when encoding PaddingClass.top"}
+
   def from_map(m) do
     %PaddingClass{
-      bottom: m["bottom"],
-      left: m["left"],
-      right: m["right"],
-      top: m["top"],
+      bottom: m["bottom"] && decode_bottom(m["bottom"]),
+      left: m["left"] && decode_left(m["left"]),
+      right: m["right"] && decode_right(m["right"]),
+      top: m["top"] && decode_top(m["top"]),
     }
   end
 
@@ -2150,6 +2878,54 @@ defmodule ProjectionConfig do
           type: VGProjectionType.t() | nil
         }
 
+  def decode_clip_angle(value) when is_float(value), do: value
+  def decode_clip_angle(value) when is_integer(value), do: value
+  def decode_clip_angle(_), do: {:error, "Unexpected type when decoding ProjectionConfig.clip_angle"}
+
+  def encode_clip_angle(value) when is_float(value), do: value
+  def encode_clip_angle(value) when is_integer(value), do: value
+  def encode_clip_angle(_), do: {:error, "Unexpected type when encoding ProjectionConfig.clip_angle"}
+
+  def decode_coefficient(value) when is_float(value), do: value
+  def decode_coefficient(value) when is_integer(value), do: value
+  def decode_coefficient(_), do: {:error, "Unexpected type when decoding ProjectionConfig.coefficient"}
+
+  def encode_coefficient(value) when is_float(value), do: value
+  def encode_coefficient(value) when is_integer(value), do: value
+  def encode_coefficient(_), do: {:error, "Unexpected type when encoding ProjectionConfig.coefficient"}
+
+  def decode_distance(value) when is_float(value), do: value
+  def decode_distance(value) when is_integer(value), do: value
+  def decode_distance(_), do: {:error, "Unexpected type when decoding ProjectionConfig.distance"}
+
+  def encode_distance(value) when is_float(value), do: value
+  def encode_distance(value) when is_integer(value), do: value
+  def encode_distance(_), do: {:error, "Unexpected type when encoding ProjectionConfig.distance"}
+
+  def decode_fraction(value) when is_float(value), do: value
+  def decode_fraction(value) when is_integer(value), do: value
+  def decode_fraction(_), do: {:error, "Unexpected type when decoding ProjectionConfig.fraction"}
+
+  def encode_fraction(value) when is_float(value), do: value
+  def encode_fraction(value) when is_integer(value), do: value
+  def encode_fraction(_), do: {:error, "Unexpected type when encoding ProjectionConfig.fraction"}
+
+  def decode_lobes(value) when is_float(value), do: value
+  def decode_lobes(value) when is_integer(value), do: value
+  def decode_lobes(_), do: {:error, "Unexpected type when decoding ProjectionConfig.lobes"}
+
+  def encode_lobes(value) when is_float(value), do: value
+  def encode_lobes(value) when is_integer(value), do: value
+  def encode_lobes(_), do: {:error, "Unexpected type when encoding ProjectionConfig.lobes"}
+
+  def decode_parallel(value) when is_float(value), do: value
+  def decode_parallel(value) when is_integer(value), do: value
+  def decode_parallel(_), do: {:error, "Unexpected type when decoding ProjectionConfig.parallel"}
+
+  def encode_parallel(value) when is_float(value), do: value
+  def encode_parallel(value) when is_integer(value), do: value
+  def encode_parallel(_), do: {:error, "Unexpected type when encoding ProjectionConfig.parallel"}
+
   def decode_precision_value(value) when is_float(value), do: value
   def decode_precision_value(value) when is_integer(value), do: value
   def decode_precision_value(value) when is_binary(value), do: value
@@ -2160,23 +2936,55 @@ defmodule ProjectionConfig do
   def encode_precision_value(value) when is_binary(value), do: value
   def encode_precision_value(_), do: {:error, "Unexpected type when encoding ProjectionConfig.precision"}
 
+  def decode_radius(value) when is_float(value), do: value
+  def decode_radius(value) when is_integer(value), do: value
+  def decode_radius(_), do: {:error, "Unexpected type when decoding ProjectionConfig.radius"}
+
+  def encode_radius(value) when is_float(value), do: value
+  def encode_radius(value) when is_integer(value), do: value
+  def encode_radius(_), do: {:error, "Unexpected type when encoding ProjectionConfig.radius"}
+
+  def decode_ratio(value) when is_float(value), do: value
+  def decode_ratio(value) when is_integer(value), do: value
+  def decode_ratio(_), do: {:error, "Unexpected type when decoding ProjectionConfig.ratio"}
+
+  def encode_ratio(value) when is_float(value), do: value
+  def encode_ratio(value) when is_integer(value), do: value
+  def encode_ratio(_), do: {:error, "Unexpected type when encoding ProjectionConfig.ratio"}
+
+  def decode_spacing(value) when is_float(value), do: value
+  def decode_spacing(value) when is_integer(value), do: value
+  def decode_spacing(_), do: {:error, "Unexpected type when decoding ProjectionConfig.spacing"}
+
+  def encode_spacing(value) when is_float(value), do: value
+  def encode_spacing(value) when is_integer(value), do: value
+  def encode_spacing(_), do: {:error, "Unexpected type when encoding ProjectionConfig.spacing"}
+
+  def decode_tilt(value) when is_float(value), do: value
+  def decode_tilt(value) when is_integer(value), do: value
+  def decode_tilt(_), do: {:error, "Unexpected type when decoding ProjectionConfig.tilt"}
+
+  def encode_tilt(value) when is_float(value), do: value
+  def encode_tilt(value) when is_integer(value), do: value
+  def encode_tilt(_), do: {:error, "Unexpected type when encoding ProjectionConfig.tilt"}
+
   def from_map(m) do
     %ProjectionConfig{
       center: m["center"],
-      clip_angle: m["clipAngle"],
+      clip_angle: m["clipAngle"] && decode_clip_angle(m["clipAngle"]),
       clip_extent: m["clipExtent"],
-      coefficient: m["coefficient"],
-      distance: m["distance"],
-      fraction: m["fraction"],
-      lobes: m["lobes"],
-      parallel: m["parallel"],
+      coefficient: m["coefficient"] && decode_coefficient(m["coefficient"]),
+      distance: m["distance"] && decode_distance(m["distance"]),
+      fraction: m["fraction"] && decode_fraction(m["fraction"]),
+      lobes: m["lobes"] && decode_lobes(m["lobes"]),
+      parallel: m["parallel"] && decode_parallel(m["parallel"]),
       precision: m["precision"]
       |> Map.new(fn {key, value} -> {key, decode_precision_value(value)} end),
-      radius: m["radius"],
-      ratio: m["ratio"],
+      radius: m["radius"] && decode_radius(m["radius"]),
+      ratio: m["ratio"] && decode_ratio(m["ratio"]),
       rotate: m["rotate"],
-      spacing: m["spacing"],
-      tilt: m["tilt"],
+      spacing: m["spacing"] && decode_spacing(m["spacing"]),
+      tilt: m["tilt"] && decode_tilt(m["tilt"]),
       type: m["type"] && VGProjectionType.decode(m["type"]),
     }
   end
@@ -2225,18 +3033,34 @@ defmodule VGScheme do
           step: float() | nil
         }
 
+  def decode_count(value) when is_float(value), do: value
+  def decode_count(value) when is_integer(value), do: value
+  def decode_count(_), do: {:error, "Unexpected type when decoding VGScheme.count"}
+
+  def encode_count(value) when is_float(value), do: value
+  def encode_count(value) when is_integer(value), do: value
+  def encode_count(_), do: {:error, "Unexpected type when encoding VGScheme.count"}
+
   def decode_scheme(value) when is_binary(value), do: value
   def decode_scheme(_), do: {:error, "Unexpected type when decoding VGScheme.scheme"}
 
   def encode_scheme(value) when is_binary(value), do: value
   def encode_scheme(_), do: {:error, "Unexpected type when encoding VGScheme.scheme"}
 
+  def decode_step(value) when is_float(value), do: value
+  def decode_step(value) when is_integer(value), do: value
+  def decode_step(_), do: {:error, "Unexpected type when decoding VGScheme.step"}
+
+  def encode_step(value) when is_float(value), do: value
+  def encode_step(value) when is_integer(value), do: value
+  def encode_step(_), do: {:error, "Unexpected type when encoding VGScheme.step"}
+
   def from_map(m) do
     %VGScheme{
-      count: m["count"],
+      count: m["count"] && decode_count(m["count"]),
       extent: m["extent"],
       scheme: m["scheme"] && decode_scheme(m["scheme"]),
-      step: m["step"],
+      step: m["step"] && decode_step(m["step"]),
     }
   end
 
@@ -2312,26 +3136,146 @@ defmodule ScaleConfig do
           use_unaggregated_domain: boolean() | nil
         }
 
+  def decode_band_padding_inner(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_band_padding_inner(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_band_padding_inner(_), do: {:error, "Unexpected type when decoding ScaleConfig.band_padding_inner"}
+
+  def encode_band_padding_inner(value) when is_float(value), do: value
+  def encode_band_padding_inner(value) when is_integer(value), do: value
+  def encode_band_padding_inner(_), do: {:error, "Unexpected type when encoding ScaleConfig.band_padding_inner"}
+
+  def decode_band_padding_outer(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_band_padding_outer(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_band_padding_outer(_), do: {:error, "Unexpected type when decoding ScaleConfig.band_padding_outer"}
+
+  def encode_band_padding_outer(value) when is_float(value), do: value
+  def encode_band_padding_outer(value) when is_integer(value), do: value
+  def encode_band_padding_outer(_), do: {:error, "Unexpected type when encoding ScaleConfig.band_padding_outer"}
+
+  def decode_continuous_padding(value) when is_float(value) and value >= 0, do: value
+  def decode_continuous_padding(value) when is_integer(value) and value >= 0, do: value
+  def decode_continuous_padding(_), do: {:error, "Unexpected type when decoding ScaleConfig.continuous_padding"}
+
+  def encode_continuous_padding(value) when is_float(value), do: value
+  def encode_continuous_padding(value) when is_integer(value), do: value
+  def encode_continuous_padding(_), do: {:error, "Unexpected type when encoding ScaleConfig.continuous_padding"}
+
+  def decode_max_band_size(value) when is_float(value) and value >= 0, do: value
+  def decode_max_band_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_max_band_size(_), do: {:error, "Unexpected type when decoding ScaleConfig.max_band_size"}
+
+  def encode_max_band_size(value) when is_float(value), do: value
+  def encode_max_band_size(value) when is_integer(value), do: value
+  def encode_max_band_size(_), do: {:error, "Unexpected type when encoding ScaleConfig.max_band_size"}
+
+  def decode_max_font_size(value) when is_float(value) and value >= 0, do: value
+  def decode_max_font_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_max_font_size(_), do: {:error, "Unexpected type when decoding ScaleConfig.max_font_size"}
+
+  def encode_max_font_size(value) when is_float(value), do: value
+  def encode_max_font_size(value) when is_integer(value), do: value
+  def encode_max_font_size(_), do: {:error, "Unexpected type when encoding ScaleConfig.max_font_size"}
+
+  def decode_max_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_max_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_max_opacity(_), do: {:error, "Unexpected type when decoding ScaleConfig.max_opacity"}
+
+  def encode_max_opacity(value) when is_float(value), do: value
+  def encode_max_opacity(value) when is_integer(value), do: value
+  def encode_max_opacity(_), do: {:error, "Unexpected type when encoding ScaleConfig.max_opacity"}
+
+  def decode_max_size(value) when is_float(value) and value >= 0, do: value
+  def decode_max_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_max_size(_), do: {:error, "Unexpected type when decoding ScaleConfig.max_size"}
+
+  def encode_max_size(value) when is_float(value), do: value
+  def encode_max_size(value) when is_integer(value), do: value
+  def encode_max_size(_), do: {:error, "Unexpected type when encoding ScaleConfig.max_size"}
+
+  def decode_max_stroke_width(value) when is_float(value) and value >= 0, do: value
+  def decode_max_stroke_width(value) when is_integer(value) and value >= 0, do: value
+  def decode_max_stroke_width(_), do: {:error, "Unexpected type when decoding ScaleConfig.max_stroke_width"}
+
+  def encode_max_stroke_width(value) when is_float(value), do: value
+  def encode_max_stroke_width(value) when is_integer(value), do: value
+  def encode_max_stroke_width(_), do: {:error, "Unexpected type when encoding ScaleConfig.max_stroke_width"}
+
+  def decode_min_band_size(value) when is_float(value) and value >= 0, do: value
+  def decode_min_band_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_min_band_size(_), do: {:error, "Unexpected type when decoding ScaleConfig.min_band_size"}
+
+  def encode_min_band_size(value) when is_float(value), do: value
+  def encode_min_band_size(value) when is_integer(value), do: value
+  def encode_min_band_size(_), do: {:error, "Unexpected type when encoding ScaleConfig.min_band_size"}
+
+  def decode_min_font_size(value) when is_float(value) and value >= 0, do: value
+  def decode_min_font_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_min_font_size(_), do: {:error, "Unexpected type when decoding ScaleConfig.min_font_size"}
+
+  def encode_min_font_size(value) when is_float(value), do: value
+  def encode_min_font_size(value) when is_integer(value), do: value
+  def encode_min_font_size(_), do: {:error, "Unexpected type when encoding ScaleConfig.min_font_size"}
+
+  def decode_min_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_min_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_min_opacity(_), do: {:error, "Unexpected type when decoding ScaleConfig.min_opacity"}
+
+  def encode_min_opacity(value) when is_float(value), do: value
+  def encode_min_opacity(value) when is_integer(value), do: value
+  def encode_min_opacity(_), do: {:error, "Unexpected type when encoding ScaleConfig.min_opacity"}
+
+  def decode_min_size(value) when is_float(value) and value >= 0, do: value
+  def decode_min_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_min_size(_), do: {:error, "Unexpected type when decoding ScaleConfig.min_size"}
+
+  def encode_min_size(value) when is_float(value), do: value
+  def encode_min_size(value) when is_integer(value), do: value
+  def encode_min_size(_), do: {:error, "Unexpected type when encoding ScaleConfig.min_size"}
+
+  def decode_min_stroke_width(value) when is_float(value) and value >= 0, do: value
+  def decode_min_stroke_width(value) when is_integer(value) and value >= 0, do: value
+  def decode_min_stroke_width(_), do: {:error, "Unexpected type when decoding ScaleConfig.min_stroke_width"}
+
+  def encode_min_stroke_width(value) when is_float(value), do: value
+  def encode_min_stroke_width(value) when is_integer(value), do: value
+  def encode_min_stroke_width(_), do: {:error, "Unexpected type when encoding ScaleConfig.min_stroke_width"}
+
+  def decode_point_padding(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_point_padding(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_point_padding(_), do: {:error, "Unexpected type when decoding ScaleConfig.point_padding"}
+
+  def encode_point_padding(value) when is_float(value), do: value
+  def encode_point_padding(value) when is_integer(value), do: value
+  def encode_point_padding(_), do: {:error, "Unexpected type when encoding ScaleConfig.point_padding"}
+
+  def decode_text_x_range_step(value) when is_float(value) and value >= 0, do: value
+  def decode_text_x_range_step(value) when is_integer(value) and value >= 0, do: value
+  def decode_text_x_range_step(_), do: {:error, "Unexpected type when decoding ScaleConfig.text_x_range_step"}
+
+  def encode_text_x_range_step(value) when is_float(value), do: value
+  def encode_text_x_range_step(value) when is_integer(value), do: value
+  def encode_text_x_range_step(_), do: {:error, "Unexpected type when encoding ScaleConfig.text_x_range_step"}
+
   def from_map(m) do
     %ScaleConfig{
-      band_padding_inner: m["bandPaddingInner"],
-      band_padding_outer: m["bandPaddingOuter"],
+      band_padding_inner: m["bandPaddingInner"] && decode_band_padding_inner(m["bandPaddingInner"]),
+      band_padding_outer: m["bandPaddingOuter"] && decode_band_padding_outer(m["bandPaddingOuter"]),
       clamp: m["clamp"],
-      continuous_padding: m["continuousPadding"],
-      max_band_size: m["maxBandSize"],
-      max_font_size: m["maxFontSize"],
-      max_opacity: m["maxOpacity"],
-      max_size: m["maxSize"],
-      max_stroke_width: m["maxStrokeWidth"],
-      min_band_size: m["minBandSize"],
-      min_font_size: m["minFontSize"],
-      min_opacity: m["minOpacity"],
-      min_size: m["minSize"],
-      min_stroke_width: m["minStrokeWidth"],
-      point_padding: m["pointPadding"],
+      continuous_padding: m["continuousPadding"] && decode_continuous_padding(m["continuousPadding"]),
+      max_band_size: m["maxBandSize"] && decode_max_band_size(m["maxBandSize"]),
+      max_font_size: m["maxFontSize"] && decode_max_font_size(m["maxFontSize"]),
+      max_opacity: m["maxOpacity"] && decode_max_opacity(m["maxOpacity"]),
+      max_size: m["maxSize"] && decode_max_size(m["maxSize"]),
+      max_stroke_width: m["maxStrokeWidth"] && decode_max_stroke_width(m["maxStrokeWidth"]),
+      min_band_size: m["minBandSize"] && decode_min_band_size(m["minBandSize"]),
+      min_font_size: m["minFontSize"] && decode_min_font_size(m["minFontSize"]),
+      min_opacity: m["minOpacity"] && decode_min_opacity(m["minOpacity"]),
+      min_size: m["minSize"] && decode_min_size(m["minSize"]),
+      min_stroke_width: m["minStrokeWidth"] && decode_min_stroke_width(m["minStrokeWidth"]),
+      point_padding: m["pointPadding"] && decode_point_padding(m["pointPadding"]),
       range_step: m["rangeStep"],
       round: m["round"],
-      text_x_range_step: m["textXRangeStep"],
+      text_x_range_step: m["textXRangeStep"] && decode_text_x_range_step(m["textXRangeStep"]),
       use_unaggregated_domain: m["useUnaggregatedDomain"],
     }
   end
@@ -2562,21 +3506,53 @@ defmodule BrushConfig do
   def encode_fill(value) when is_binary(value), do: value
   def encode_fill(_), do: {:error, "Unexpected type when encoding BrushConfig.fill"}
 
+  def decode_fill_opacity(value) when is_float(value), do: value
+  def decode_fill_opacity(value) when is_integer(value), do: value
+  def decode_fill_opacity(_), do: {:error, "Unexpected type when decoding BrushConfig.fill_opacity"}
+
+  def encode_fill_opacity(value) when is_float(value), do: value
+  def encode_fill_opacity(value) when is_integer(value), do: value
+  def encode_fill_opacity(_), do: {:error, "Unexpected type when encoding BrushConfig.fill_opacity"}
+
   def decode_stroke(value) when is_binary(value), do: value
   def decode_stroke(_), do: {:error, "Unexpected type when decoding BrushConfig.stroke"}
 
   def encode_stroke(value) when is_binary(value), do: value
   def encode_stroke(_), do: {:error, "Unexpected type when encoding BrushConfig.stroke"}
 
+  def decode_stroke_dash_offset(value) when is_float(value), do: value
+  def decode_stroke_dash_offset(value) when is_integer(value), do: value
+  def decode_stroke_dash_offset(_), do: {:error, "Unexpected type when decoding BrushConfig.stroke_dash_offset"}
+
+  def encode_stroke_dash_offset(value) when is_float(value), do: value
+  def encode_stroke_dash_offset(value) when is_integer(value), do: value
+  def encode_stroke_dash_offset(_), do: {:error, "Unexpected type when encoding BrushConfig.stroke_dash_offset"}
+
+  def decode_stroke_opacity(value) when is_float(value), do: value
+  def decode_stroke_opacity(value) when is_integer(value), do: value
+  def decode_stroke_opacity(_), do: {:error, "Unexpected type when decoding BrushConfig.stroke_opacity"}
+
+  def encode_stroke_opacity(value) when is_float(value), do: value
+  def encode_stroke_opacity(value) when is_integer(value), do: value
+  def encode_stroke_opacity(_), do: {:error, "Unexpected type when encoding BrushConfig.stroke_opacity"}
+
+  def decode_stroke_width(value) when is_float(value), do: value
+  def decode_stroke_width(value) when is_integer(value), do: value
+  def decode_stroke_width(_), do: {:error, "Unexpected type when decoding BrushConfig.stroke_width"}
+
+  def encode_stroke_width(value) when is_float(value), do: value
+  def encode_stroke_width(value) when is_integer(value), do: value
+  def encode_stroke_width(_), do: {:error, "Unexpected type when encoding BrushConfig.stroke_width"}
+
   def from_map(m) do
     %BrushConfig{
       fill: m["fill"] && decode_fill(m["fill"]),
-      fill_opacity: m["fillOpacity"],
+      fill_opacity: m["fillOpacity"] && decode_fill_opacity(m["fillOpacity"]),
       stroke: m["stroke"] && decode_stroke(m["stroke"]),
       stroke_dash: m["strokeDash"],
-      stroke_dash_offset: m["strokeDashOffset"],
-      stroke_opacity: m["strokeOpacity"],
-      stroke_width: m["strokeWidth"],
+      stroke_dash_offset: m["strokeDashOffset"] && decode_stroke_dash_offset(m["strokeDashOffset"]),
+      stroke_opacity: m["strokeOpacity"] && decode_stroke_opacity(m["strokeOpacity"]),
+      stroke_width: m["strokeWidth"] && decode_stroke_width(m["strokeWidth"]),
     }
   end
 
@@ -2822,14 +3798,38 @@ defmodule VGBinding do
   def encode_input(value) when is_binary(value), do: value
   def encode_input(_), do: {:error, "Unexpected type when encoding VGBinding.input"}
 
+  def decode_max(value) when is_float(value), do: value
+  def decode_max(value) when is_integer(value), do: value
+  def decode_max(_), do: {:error, "Unexpected type when decoding VGBinding.max"}
+
+  def encode_max(value) when is_float(value), do: value
+  def encode_max(value) when is_integer(value), do: value
+  def encode_max(_), do: {:error, "Unexpected type when encoding VGBinding.max"}
+
+  def decode_min(value) when is_float(value), do: value
+  def decode_min(value) when is_integer(value), do: value
+  def decode_min(_), do: {:error, "Unexpected type when decoding VGBinding.min"}
+
+  def encode_min(value) when is_float(value), do: value
+  def encode_min(value) when is_integer(value), do: value
+  def encode_min(_), do: {:error, "Unexpected type when encoding VGBinding.min"}
+
+  def decode_step(value) when is_float(value), do: value
+  def decode_step(value) when is_integer(value), do: value
+  def decode_step(_), do: {:error, "Unexpected type when decoding VGBinding.step"}
+
+  def encode_step(value) when is_float(value), do: value
+  def encode_step(value) when is_integer(value), do: value
+  def encode_step(_), do: {:error, "Unexpected type when encoding VGBinding.step"}
+
   def from_map(m) do
     %VGBinding{
       element: m["element"] && decode_element(m["element"]),
       input: decode_input(m["input"]),
       options: m["options"],
-      max: m["max"],
-      min: m["min"],
-      step: m["step"],
+      max: m["max"] && decode_max(m["max"]),
+      min: m["min"] && decode_min(m["min"]),
+      step: m["step"] && decode_step(m["step"]),
     }
   end
 
@@ -3085,21 +4085,61 @@ defmodule VGMarkConfig do
           theta: float() | nil
         }
 
+  def decode_angle(value) when is_float(value) and value >= 0 and value <= 360, do: value
+  def decode_angle(value) when is_integer(value) and value >= 0 and value <= 360, do: value
+  def decode_angle(_), do: {:error, "Unexpected type when decoding VGMarkConfig.angle"}
+
+  def encode_angle(value) when is_float(value), do: value
+  def encode_angle(value) when is_integer(value), do: value
+  def encode_angle(_), do: {:error, "Unexpected type when encoding VGMarkConfig.angle"}
+
+  def decode_dx(value) when is_float(value), do: value
+  def decode_dx(value) when is_integer(value), do: value
+  def decode_dx(_), do: {:error, "Unexpected type when decoding VGMarkConfig.dx"}
+
+  def encode_dx(value) when is_float(value), do: value
+  def encode_dx(value) when is_integer(value), do: value
+  def encode_dx(_), do: {:error, "Unexpected type when encoding VGMarkConfig.dx"}
+
+  def decode_dy(value) when is_float(value), do: value
+  def decode_dy(value) when is_integer(value), do: value
+  def decode_dy(_), do: {:error, "Unexpected type when decoding VGMarkConfig.dy"}
+
+  def encode_dy(value) when is_float(value), do: value
+  def encode_dy(value) when is_integer(value), do: value
+  def encode_dy(_), do: {:error, "Unexpected type when encoding VGMarkConfig.dy"}
+
   def decode_fill(value) when is_binary(value), do: value
   def decode_fill(_), do: {:error, "Unexpected type when decoding VGMarkConfig.fill"}
 
   def encode_fill(value) when is_binary(value), do: value
   def encode_fill(_), do: {:error, "Unexpected type when encoding VGMarkConfig.fill"}
 
+  def decode_fill_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_fill_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_fill_opacity(_), do: {:error, "Unexpected type when decoding VGMarkConfig.fill_opacity"}
+
+  def encode_fill_opacity(value) when is_float(value), do: value
+  def encode_fill_opacity(value) when is_integer(value), do: value
+  def encode_fill_opacity(_), do: {:error, "Unexpected type when encoding VGMarkConfig.fill_opacity"}
+
   def decode_font(value) when is_binary(value), do: value
   def decode_font(_), do: {:error, "Unexpected type when decoding VGMarkConfig.font"}
 
   def encode_font(value) when is_binary(value), do: value
   def encode_font(_), do: {:error, "Unexpected type when encoding VGMarkConfig.font"}
 
+  def decode_font_size(value) when is_float(value) and value >= 0, do: value
+  def decode_font_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_font_size(_), do: {:error, "Unexpected type when decoding VGMarkConfig.font_size"}
+
+  def encode_font_size(value) when is_float(value), do: value
+  def encode_font_size(value) when is_integer(value), do: value
+  def encode_font_size(_), do: {:error, "Unexpected type when encoding VGMarkConfig.font_size"}
+
   def decode_font_weight(value) when is_binary(value), do: FontWeight.decode(value)
-  def decode_font_weight(value) when is_float(value), do: value
-  def decode_font_weight(value) when is_integer(value), do: value
+  def decode_font_weight(value) when is_float(value) and value >= 100 and value <= 900, do: value
+  def decode_font_weight(value) when is_integer(value) and value >= 100 and value <= 900, do: value
   def decode_font_weight(value) when is_nil(value), do: value
   def decode_font_weight(_), do: {:error, "Unexpected type when decoding VGMarkConfig.font_weight"}
 
@@ -3115,54 +4155,126 @@ defmodule VGMarkConfig do
   def encode_href(value) when is_binary(value), do: value
   def encode_href(_), do: {:error, "Unexpected type when encoding VGMarkConfig.href"}
 
+  def decode_limit(value) when is_float(value), do: value
+  def decode_limit(value) when is_integer(value), do: value
+  def decode_limit(_), do: {:error, "Unexpected type when decoding VGMarkConfig.limit"}
+
+  def encode_limit(value) when is_float(value), do: value
+  def encode_limit(value) when is_integer(value), do: value
+  def encode_limit(_), do: {:error, "Unexpected type when encoding VGMarkConfig.limit"}
+
+  def decode_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_opacity(_), do: {:error, "Unexpected type when decoding VGMarkConfig.opacity"}
+
+  def encode_opacity(value) when is_float(value), do: value
+  def encode_opacity(value) when is_integer(value), do: value
+  def encode_opacity(_), do: {:error, "Unexpected type when encoding VGMarkConfig.opacity"}
+
+  def decode_radius(value) when is_float(value) and value >= 0, do: value
+  def decode_radius(value) when is_integer(value) and value >= 0, do: value
+  def decode_radius(_), do: {:error, "Unexpected type when decoding VGMarkConfig.radius"}
+
+  def encode_radius(value) when is_float(value), do: value
+  def encode_radius(value) when is_integer(value), do: value
+  def encode_radius(_), do: {:error, "Unexpected type when encoding VGMarkConfig.radius"}
+
   def decode_shape(value) when is_binary(value), do: value
   def decode_shape(_), do: {:error, "Unexpected type when decoding VGMarkConfig.shape"}
 
   def encode_shape(value) when is_binary(value), do: value
   def encode_shape(_), do: {:error, "Unexpected type when encoding VGMarkConfig.shape"}
 
+  def decode_size(value) when is_float(value) and value >= 0, do: value
+  def decode_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_size(_), do: {:error, "Unexpected type when decoding VGMarkConfig.size"}
+
+  def encode_size(value) when is_float(value), do: value
+  def encode_size(value) when is_integer(value), do: value
+  def encode_size(_), do: {:error, "Unexpected type when encoding VGMarkConfig.size"}
+
   def decode_stroke(value) when is_binary(value), do: value
   def decode_stroke(_), do: {:error, "Unexpected type when decoding VGMarkConfig.stroke"}
 
   def encode_stroke(value) when is_binary(value), do: value
   def encode_stroke(_), do: {:error, "Unexpected type when encoding VGMarkConfig.stroke"}
 
+  def decode_stroke_dash_offset(value) when is_float(value), do: value
+  def decode_stroke_dash_offset(value) when is_integer(value), do: value
+  def decode_stroke_dash_offset(_), do: {:error, "Unexpected type when decoding VGMarkConfig.stroke_dash_offset"}
+
+  def encode_stroke_dash_offset(value) when is_float(value), do: value
+  def encode_stroke_dash_offset(value) when is_integer(value), do: value
+  def encode_stroke_dash_offset(_), do: {:error, "Unexpected type when encoding VGMarkConfig.stroke_dash_offset"}
+
+  def decode_stroke_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_stroke_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_stroke_opacity(_), do: {:error, "Unexpected type when decoding VGMarkConfig.stroke_opacity"}
+
+  def encode_stroke_opacity(value) when is_float(value), do: value
+  def encode_stroke_opacity(value) when is_integer(value), do: value
+  def encode_stroke_opacity(_), do: {:error, "Unexpected type when encoding VGMarkConfig.stroke_opacity"}
+
+  def decode_stroke_width(value) when is_float(value) and value >= 0, do: value
+  def decode_stroke_width(value) when is_integer(value) and value >= 0, do: value
+  def decode_stroke_width(_), do: {:error, "Unexpected type when decoding VGMarkConfig.stroke_width"}
+
+  def encode_stroke_width(value) when is_float(value), do: value
+  def encode_stroke_width(value) when is_integer(value), do: value
+  def encode_stroke_width(_), do: {:error, "Unexpected type when encoding VGMarkConfig.stroke_width"}
+
+  def decode_tension(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_tension(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_tension(_), do: {:error, "Unexpected type when decoding VGMarkConfig.tension"}
+
+  def encode_tension(value) when is_float(value), do: value
+  def encode_tension(value) when is_integer(value), do: value
+  def encode_tension(_), do: {:error, "Unexpected type when encoding VGMarkConfig.tension"}
+
   def decode_text(value) when is_binary(value), do: value
   def decode_text(_), do: {:error, "Unexpected type when decoding VGMarkConfig.text"}
 
   def encode_text(value) when is_binary(value), do: value
   def encode_text(_), do: {:error, "Unexpected type when encoding VGMarkConfig.text"}
 
+  def decode_theta(value) when is_float(value), do: value
+  def decode_theta(value) when is_integer(value), do: value
+  def decode_theta(_), do: {:error, "Unexpected type when decoding VGMarkConfig.theta"}
+
+  def encode_theta(value) when is_float(value), do: value
+  def encode_theta(value) when is_integer(value), do: value
+  def encode_theta(_), do: {:error, "Unexpected type when encoding VGMarkConfig.theta"}
+
   def from_map(m) do
     %VGMarkConfig{
       align: m["align"] && HorizontalAlign.decode(m["align"]),
-      angle: m["angle"],
+      angle: m["angle"] && decode_angle(m["angle"]),
       baseline: m["baseline"] && VerticalAlign.decode(m["baseline"]),
       cursor: m["cursor"] && Cursor.decode(m["cursor"]),
-      dx: m["dx"],
-      dy: m["dy"],
+      dx: m["dx"] && decode_dx(m["dx"]),
+      dy: m["dy"] && decode_dy(m["dy"]),
       fill: m["fill"] && decode_fill(m["fill"]),
-      fill_opacity: m["fillOpacity"],
+      fill_opacity: m["fillOpacity"] && decode_fill_opacity(m["fillOpacity"]),
       font: m["font"] && decode_font(m["font"]),
-      font_size: m["fontSize"],
+      font_size: m["fontSize"] && decode_font_size(m["fontSize"]),
       font_style: m["fontStyle"] && FontStyle.decode(m["fontStyle"]),
       font_weight: decode_font_weight(m["fontWeight"]),
       href: m["href"] && decode_href(m["href"]),
       interpolate: m["interpolate"] && Interpolate.decode(m["interpolate"]),
-      limit: m["limit"],
-      opacity: m["opacity"],
+      limit: m["limit"] && decode_limit(m["limit"]),
+      opacity: m["opacity"] && decode_opacity(m["opacity"]),
       orient: m["orient"] && Orient.decode(m["orient"]),
-      radius: m["radius"],
+      radius: m["radius"] && decode_radius(m["radius"]),
       shape: m["shape"] && decode_shape(m["shape"]),
-      size: m["size"],
+      size: m["size"] && decode_size(m["size"]),
       stroke: m["stroke"] && decode_stroke(m["stroke"]),
       stroke_dash: m["strokeDash"],
-      stroke_dash_offset: m["strokeDashOffset"],
-      stroke_opacity: m["strokeOpacity"],
-      stroke_width: m["strokeWidth"],
-      tension: m["tension"],
+      stroke_dash_offset: m["strokeDashOffset"] && decode_stroke_dash_offset(m["strokeDashOffset"]),
+      stroke_opacity: m["strokeOpacity"] && decode_stroke_opacity(m["strokeOpacity"]),
+      stroke_width: m["strokeWidth"] && decode_stroke_width(m["strokeWidth"]),
+      tension: m["tension"] && decode_tension(m["tension"]),
       text: m["text"] && decode_text(m["text"]),
-      theta: m["theta"],
+      theta: m["theta"] && decode_theta(m["theta"]),
     }
   end
 
@@ -3284,27 +4396,67 @@ defmodule TextConfig do
           theta: float() | nil
         }
 
+  def decode_angle(value) when is_float(value) and value >= 0 and value <= 360, do: value
+  def decode_angle(value) when is_integer(value) and value >= 0 and value <= 360, do: value
+  def decode_angle(_), do: {:error, "Unexpected type when decoding TextConfig.angle"}
+
+  def encode_angle(value) when is_float(value), do: value
+  def encode_angle(value) when is_integer(value), do: value
+  def encode_angle(_), do: {:error, "Unexpected type when encoding TextConfig.angle"}
+
   def decode_color(value) when is_binary(value), do: value
   def decode_color(_), do: {:error, "Unexpected type when decoding TextConfig.color"}
 
   def encode_color(value) when is_binary(value), do: value
   def encode_color(_), do: {:error, "Unexpected type when encoding TextConfig.color"}
 
+  def decode_dx(value) when is_float(value), do: value
+  def decode_dx(value) when is_integer(value), do: value
+  def decode_dx(_), do: {:error, "Unexpected type when decoding TextConfig.dx"}
+
+  def encode_dx(value) when is_float(value), do: value
+  def encode_dx(value) when is_integer(value), do: value
+  def encode_dx(_), do: {:error, "Unexpected type when encoding TextConfig.dx"}
+
+  def decode_dy(value) when is_float(value), do: value
+  def decode_dy(value) when is_integer(value), do: value
+  def decode_dy(_), do: {:error, "Unexpected type when decoding TextConfig.dy"}
+
+  def encode_dy(value) when is_float(value), do: value
+  def encode_dy(value) when is_integer(value), do: value
+  def encode_dy(_), do: {:error, "Unexpected type when encoding TextConfig.dy"}
+
   def decode_fill(value) when is_binary(value), do: value
   def decode_fill(_), do: {:error, "Unexpected type when decoding TextConfig.fill"}
 
   def encode_fill(value) when is_binary(value), do: value
   def encode_fill(_), do: {:error, "Unexpected type when encoding TextConfig.fill"}
 
+  def decode_fill_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_fill_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_fill_opacity(_), do: {:error, "Unexpected type when decoding TextConfig.fill_opacity"}
+
+  def encode_fill_opacity(value) when is_float(value), do: value
+  def encode_fill_opacity(value) when is_integer(value), do: value
+  def encode_fill_opacity(_), do: {:error, "Unexpected type when encoding TextConfig.fill_opacity"}
+
   def decode_font(value) when is_binary(value), do: value
   def decode_font(_), do: {:error, "Unexpected type when decoding TextConfig.font"}
 
   def encode_font(value) when is_binary(value), do: value
   def encode_font(_), do: {:error, "Unexpected type when encoding TextConfig.font"}
 
+  def decode_font_size(value) when is_float(value) and value >= 0, do: value
+  def decode_font_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_font_size(_), do: {:error, "Unexpected type when decoding TextConfig.font_size"}
+
+  def encode_font_size(value) when is_float(value), do: value
+  def encode_font_size(value) when is_integer(value), do: value
+  def encode_font_size(_), do: {:error, "Unexpected type when encoding TextConfig.font_size"}
+
   def decode_font_weight(value) when is_binary(value), do: FontWeight.decode(value)
-  def decode_font_weight(value) when is_float(value), do: value
-  def decode_font_weight(value) when is_integer(value), do: value
+  def decode_font_weight(value) when is_float(value) and value >= 100 and value <= 900, do: value
+  def decode_font_weight(value) when is_integer(value) and value >= 100 and value <= 900, do: value
   def decode_font_weight(value) when is_nil(value), do: value
   def decode_font_weight(_), do: {:error, "Unexpected type when decoding TextConfig.font_weight"}
 
@@ -3320,57 +4472,129 @@ defmodule TextConfig do
   def encode_href(value) when is_binary(value), do: value
   def encode_href(_), do: {:error, "Unexpected type when encoding TextConfig.href"}
 
+  def decode_limit(value) when is_float(value), do: value
+  def decode_limit(value) when is_integer(value), do: value
+  def decode_limit(_), do: {:error, "Unexpected type when decoding TextConfig.limit"}
+
+  def encode_limit(value) when is_float(value), do: value
+  def encode_limit(value) when is_integer(value), do: value
+  def encode_limit(_), do: {:error, "Unexpected type when encoding TextConfig.limit"}
+
+  def decode_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_opacity(_), do: {:error, "Unexpected type when decoding TextConfig.opacity"}
+
+  def encode_opacity(value) when is_float(value), do: value
+  def encode_opacity(value) when is_integer(value), do: value
+  def encode_opacity(_), do: {:error, "Unexpected type when encoding TextConfig.opacity"}
+
+  def decode_radius(value) when is_float(value) and value >= 0, do: value
+  def decode_radius(value) when is_integer(value) and value >= 0, do: value
+  def decode_radius(_), do: {:error, "Unexpected type when decoding TextConfig.radius"}
+
+  def encode_radius(value) when is_float(value), do: value
+  def encode_radius(value) when is_integer(value), do: value
+  def encode_radius(_), do: {:error, "Unexpected type when encoding TextConfig.radius"}
+
   def decode_shape(value) when is_binary(value), do: value
   def decode_shape(_), do: {:error, "Unexpected type when decoding TextConfig.shape"}
 
   def encode_shape(value) when is_binary(value), do: value
   def encode_shape(_), do: {:error, "Unexpected type when encoding TextConfig.shape"}
 
+  def decode_size(value) when is_float(value) and value >= 0, do: value
+  def decode_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_size(_), do: {:error, "Unexpected type when decoding TextConfig.size"}
+
+  def encode_size(value) when is_float(value), do: value
+  def encode_size(value) when is_integer(value), do: value
+  def encode_size(_), do: {:error, "Unexpected type when encoding TextConfig.size"}
+
   def decode_stroke(value) when is_binary(value), do: value
   def decode_stroke(_), do: {:error, "Unexpected type when decoding TextConfig.stroke"}
 
   def encode_stroke(value) when is_binary(value), do: value
   def encode_stroke(_), do: {:error, "Unexpected type when encoding TextConfig.stroke"}
 
+  def decode_stroke_dash_offset(value) when is_float(value), do: value
+  def decode_stroke_dash_offset(value) when is_integer(value), do: value
+  def decode_stroke_dash_offset(_), do: {:error, "Unexpected type when decoding TextConfig.stroke_dash_offset"}
+
+  def encode_stroke_dash_offset(value) when is_float(value), do: value
+  def encode_stroke_dash_offset(value) when is_integer(value), do: value
+  def encode_stroke_dash_offset(_), do: {:error, "Unexpected type when encoding TextConfig.stroke_dash_offset"}
+
+  def decode_stroke_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_stroke_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_stroke_opacity(_), do: {:error, "Unexpected type when decoding TextConfig.stroke_opacity"}
+
+  def encode_stroke_opacity(value) when is_float(value), do: value
+  def encode_stroke_opacity(value) when is_integer(value), do: value
+  def encode_stroke_opacity(_), do: {:error, "Unexpected type when encoding TextConfig.stroke_opacity"}
+
+  def decode_stroke_width(value) when is_float(value) and value >= 0, do: value
+  def decode_stroke_width(value) when is_integer(value) and value >= 0, do: value
+  def decode_stroke_width(_), do: {:error, "Unexpected type when decoding TextConfig.stroke_width"}
+
+  def encode_stroke_width(value) when is_float(value), do: value
+  def encode_stroke_width(value) when is_integer(value), do: value
+  def encode_stroke_width(_), do: {:error, "Unexpected type when encoding TextConfig.stroke_width"}
+
+  def decode_tension(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_tension(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_tension(_), do: {:error, "Unexpected type when decoding TextConfig.tension"}
+
+  def encode_tension(value) when is_float(value), do: value
+  def encode_tension(value) when is_integer(value), do: value
+  def encode_tension(_), do: {:error, "Unexpected type when encoding TextConfig.tension"}
+
   def decode_text(value) when is_binary(value), do: value
   def decode_text(_), do: {:error, "Unexpected type when decoding TextConfig.text"}
 
   def encode_text(value) when is_binary(value), do: value
   def encode_text(_), do: {:error, "Unexpected type when encoding TextConfig.text"}
 
+  def decode_theta(value) when is_float(value), do: value
+  def decode_theta(value) when is_integer(value), do: value
+  def decode_theta(_), do: {:error, "Unexpected type when decoding TextConfig.theta"}
+
+  def encode_theta(value) when is_float(value), do: value
+  def encode_theta(value) when is_integer(value), do: value
+  def encode_theta(_), do: {:error, "Unexpected type when encoding TextConfig.theta"}
+
   def from_map(m) do
     %TextConfig{
       align: m["align"] && HorizontalAlign.decode(m["align"]),
-      angle: m["angle"],
+      angle: m["angle"] && decode_angle(m["angle"]),
       baseline: m["baseline"] && VerticalAlign.decode(m["baseline"]),
       color: m["color"] && decode_color(m["color"]),
       cursor: m["cursor"] && Cursor.decode(m["cursor"]),
-      dx: m["dx"],
-      dy: m["dy"],
+      dx: m["dx"] && decode_dx(m["dx"]),
+      dy: m["dy"] && decode_dy(m["dy"]),
       fill: m["fill"] && decode_fill(m["fill"]),
       filled: m["filled"],
-      fill_opacity: m["fillOpacity"],
+      fill_opacity: m["fillOpacity"] && decode_fill_opacity(m["fillOpacity"]),
       font: m["font"] && decode_font(m["font"]),
-      font_size: m["fontSize"],
+      font_size: m["fontSize"] && decode_font_size(m["fontSize"]),
       font_style: m["fontStyle"] && FontStyle.decode(m["fontStyle"]),
       font_weight: decode_font_weight(m["fontWeight"]),
       href: m["href"] && decode_href(m["href"]),
       interpolate: m["interpolate"] && Interpolate.decode(m["interpolate"]),
-      limit: m["limit"],
-      opacity: m["opacity"],
+      limit: m["limit"] && decode_limit(m["limit"]),
+      opacity: m["opacity"] && decode_opacity(m["opacity"]),
       orient: m["orient"] && Orient.decode(m["orient"]),
-      radius: m["radius"],
+      radius: m["radius"] && decode_radius(m["radius"]),
       shape: m["shape"] && decode_shape(m["shape"]),
       short_time_labels: m["shortTimeLabels"],
-      size: m["size"],
+      size: m["size"] && decode_size(m["size"]),
       stroke: m["stroke"] && decode_stroke(m["stroke"]),
       stroke_dash: m["strokeDash"],
-      stroke_dash_offset: m["strokeDashOffset"],
-      stroke_opacity: m["strokeOpacity"],
-      stroke_width: m["strokeWidth"],
-      tension: m["tension"],
+      stroke_dash_offset: m["strokeDashOffset"] && decode_stroke_dash_offset(m["strokeDashOffset"]),
+      stroke_opacity: m["strokeOpacity"] && decode_stroke_opacity(m["strokeOpacity"]),
+      stroke_width: m["strokeWidth"] && decode_stroke_width(m["strokeWidth"]),
+      tension: m["tension"] && decode_tension(m["tension"]),
       text: m["text"] && decode_text(m["text"]),
-      theta: m["theta"],
+      theta: m["theta"] && decode_theta(m["theta"]),
     }
   end
 
@@ -3497,27 +4721,75 @@ defmodule TickConfig do
           thickness: float() | nil
         }
 
+  def decode_angle(value) when is_float(value) and value >= 0 and value <= 360, do: value
+  def decode_angle(value) when is_integer(value) and value >= 0 and value <= 360, do: value
+  def decode_angle(_), do: {:error, "Unexpected type when decoding TickConfig.angle"}
+
+  def encode_angle(value) when is_float(value), do: value
+  def encode_angle(value) when is_integer(value), do: value
+  def encode_angle(_), do: {:error, "Unexpected type when encoding TickConfig.angle"}
+
+  def decode_band_size(value) when is_float(value) and value >= 0, do: value
+  def decode_band_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_band_size(_), do: {:error, "Unexpected type when decoding TickConfig.band_size"}
+
+  def encode_band_size(value) when is_float(value), do: value
+  def encode_band_size(value) when is_integer(value), do: value
+  def encode_band_size(_), do: {:error, "Unexpected type when encoding TickConfig.band_size"}
+
   def decode_color(value) when is_binary(value), do: value
   def decode_color(_), do: {:error, "Unexpected type when decoding TickConfig.color"}
 
   def encode_color(value) when is_binary(value), do: value
   def encode_color(_), do: {:error, "Unexpected type when encoding TickConfig.color"}
 
+  def decode_dx(value) when is_float(value), do: value
+  def decode_dx(value) when is_integer(value), do: value
+  def decode_dx(_), do: {:error, "Unexpected type when decoding TickConfig.dx"}
+
+  def encode_dx(value) when is_float(value), do: value
+  def encode_dx(value) when is_integer(value), do: value
+  def encode_dx(_), do: {:error, "Unexpected type when encoding TickConfig.dx"}
+
+  def decode_dy(value) when is_float(value), do: value
+  def decode_dy(value) when is_integer(value), do: value
+  def decode_dy(_), do: {:error, "Unexpected type when decoding TickConfig.dy"}
+
+  def encode_dy(value) when is_float(value), do: value
+  def encode_dy(value) when is_integer(value), do: value
+  def encode_dy(_), do: {:error, "Unexpected type when encoding TickConfig.dy"}
+
   def decode_fill(value) when is_binary(value), do: value
   def decode_fill(_), do: {:error, "Unexpected type when decoding TickConfig.fill"}
 
   def encode_fill(value) when is_binary(value), do: value
   def encode_fill(_), do: {:error, "Unexpected type when encoding TickConfig.fill"}
 
+  def decode_fill_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_fill_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_fill_opacity(_), do: {:error, "Unexpected type when decoding TickConfig.fill_opacity"}
+
+  def encode_fill_opacity(value) when is_float(value), do: value
+  def encode_fill_opacity(value) when is_integer(value), do: value
+  def encode_fill_opacity(_), do: {:error, "Unexpected type when encoding TickConfig.fill_opacity"}
+
   def decode_font(value) when is_binary(value), do: value
   def decode_font(_), do: {:error, "Unexpected type when decoding TickConfig.font"}
 
   def encode_font(value) when is_binary(value), do: value
   def encode_font(_), do: {:error, "Unexpected type when encoding TickConfig.font"}
 
+  def decode_font_size(value) when is_float(value) and value >= 0, do: value
+  def decode_font_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_font_size(_), do: {:error, "Unexpected type when decoding TickConfig.font_size"}
+
+  def encode_font_size(value) when is_float(value), do: value
+  def encode_font_size(value) when is_integer(value), do: value
+  def encode_font_size(_), do: {:error, "Unexpected type when encoding TickConfig.font_size"}
+
   def decode_font_weight(value) when is_binary(value), do: FontWeight.decode(value)
-  def decode_font_weight(value) when is_float(value), do: value
-  def decode_font_weight(value) when is_integer(value), do: value
+  def decode_font_weight(value) when is_float(value) and value >= 100 and value <= 900, do: value
+  def decode_font_weight(value) when is_integer(value) and value >= 100 and value <= 900, do: value
   def decode_font_weight(value) when is_nil(value), do: value
   def decode_font_weight(_), do: {:error, "Unexpected type when decoding TickConfig.font_weight"}
 
@@ -3533,58 +4805,138 @@ defmodule TickConfig do
   def encode_href(value) when is_binary(value), do: value
   def encode_href(_), do: {:error, "Unexpected type when encoding TickConfig.href"}
 
+  def decode_limit(value) when is_float(value), do: value
+  def decode_limit(value) when is_integer(value), do: value
+  def decode_limit(_), do: {:error, "Unexpected type when decoding TickConfig.limit"}
+
+  def encode_limit(value) when is_float(value), do: value
+  def encode_limit(value) when is_integer(value), do: value
+  def encode_limit(_), do: {:error, "Unexpected type when encoding TickConfig.limit"}
+
+  def decode_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_opacity(_), do: {:error, "Unexpected type when decoding TickConfig.opacity"}
+
+  def encode_opacity(value) when is_float(value), do: value
+  def encode_opacity(value) when is_integer(value), do: value
+  def encode_opacity(_), do: {:error, "Unexpected type when encoding TickConfig.opacity"}
+
+  def decode_radius(value) when is_float(value) and value >= 0, do: value
+  def decode_radius(value) when is_integer(value) and value >= 0, do: value
+  def decode_radius(_), do: {:error, "Unexpected type when decoding TickConfig.radius"}
+
+  def encode_radius(value) when is_float(value), do: value
+  def encode_radius(value) when is_integer(value), do: value
+  def encode_radius(_), do: {:error, "Unexpected type when encoding TickConfig.radius"}
+
   def decode_shape(value) when is_binary(value), do: value
   def decode_shape(_), do: {:error, "Unexpected type when decoding TickConfig.shape"}
 
   def encode_shape(value) when is_binary(value), do: value
   def encode_shape(_), do: {:error, "Unexpected type when encoding TickConfig.shape"}
 
+  def decode_size(value) when is_float(value) and value >= 0, do: value
+  def decode_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_size(_), do: {:error, "Unexpected type when decoding TickConfig.size"}
+
+  def encode_size(value) when is_float(value), do: value
+  def encode_size(value) when is_integer(value), do: value
+  def encode_size(_), do: {:error, "Unexpected type when encoding TickConfig.size"}
+
   def decode_stroke(value) when is_binary(value), do: value
   def decode_stroke(_), do: {:error, "Unexpected type when decoding TickConfig.stroke"}
 
   def encode_stroke(value) when is_binary(value), do: value
   def encode_stroke(_), do: {:error, "Unexpected type when encoding TickConfig.stroke"}
 
+  def decode_stroke_dash_offset(value) when is_float(value), do: value
+  def decode_stroke_dash_offset(value) when is_integer(value), do: value
+  def decode_stroke_dash_offset(_), do: {:error, "Unexpected type when decoding TickConfig.stroke_dash_offset"}
+
+  def encode_stroke_dash_offset(value) when is_float(value), do: value
+  def encode_stroke_dash_offset(value) when is_integer(value), do: value
+  def encode_stroke_dash_offset(_), do: {:error, "Unexpected type when encoding TickConfig.stroke_dash_offset"}
+
+  def decode_stroke_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_stroke_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_stroke_opacity(_), do: {:error, "Unexpected type when decoding TickConfig.stroke_opacity"}
+
+  def encode_stroke_opacity(value) when is_float(value), do: value
+  def encode_stroke_opacity(value) when is_integer(value), do: value
+  def encode_stroke_opacity(_), do: {:error, "Unexpected type when encoding TickConfig.stroke_opacity"}
+
+  def decode_stroke_width(value) when is_float(value) and value >= 0, do: value
+  def decode_stroke_width(value) when is_integer(value) and value >= 0, do: value
+  def decode_stroke_width(_), do: {:error, "Unexpected type when decoding TickConfig.stroke_width"}
+
+  def encode_stroke_width(value) when is_float(value), do: value
+  def encode_stroke_width(value) when is_integer(value), do: value
+  def encode_stroke_width(_), do: {:error, "Unexpected type when encoding TickConfig.stroke_width"}
+
+  def decode_tension(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_tension(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_tension(_), do: {:error, "Unexpected type when decoding TickConfig.tension"}
+
+  def encode_tension(value) when is_float(value), do: value
+  def encode_tension(value) when is_integer(value), do: value
+  def encode_tension(_), do: {:error, "Unexpected type when encoding TickConfig.tension"}
+
   def decode_text(value) when is_binary(value), do: value
   def decode_text(_), do: {:error, "Unexpected type when decoding TickConfig.text"}
 
   def encode_text(value) when is_binary(value), do: value
   def encode_text(_), do: {:error, "Unexpected type when encoding TickConfig.text"}
 
+  def decode_theta(value) when is_float(value), do: value
+  def decode_theta(value) when is_integer(value), do: value
+  def decode_theta(_), do: {:error, "Unexpected type when decoding TickConfig.theta"}
+
+  def encode_theta(value) when is_float(value), do: value
+  def encode_theta(value) when is_integer(value), do: value
+  def encode_theta(_), do: {:error, "Unexpected type when encoding TickConfig.theta"}
+
+  def decode_thickness(value) when is_float(value) and value >= 0, do: value
+  def decode_thickness(value) when is_integer(value) and value >= 0, do: value
+  def decode_thickness(_), do: {:error, "Unexpected type when decoding TickConfig.thickness"}
+
+  def encode_thickness(value) when is_float(value), do: value
+  def encode_thickness(value) when is_integer(value), do: value
+  def encode_thickness(_), do: {:error, "Unexpected type when encoding TickConfig.thickness"}
+
   def from_map(m) do
     %TickConfig{
       align: m["align"] && HorizontalAlign.decode(m["align"]),
-      angle: m["angle"],
-      band_size: m["bandSize"],
+      angle: m["angle"] && decode_angle(m["angle"]),
+      band_size: m["bandSize"] && decode_band_size(m["bandSize"]),
       baseline: m["baseline"] && VerticalAlign.decode(m["baseline"]),
       color: m["color"] && decode_color(m["color"]),
       cursor: m["cursor"] && Cursor.decode(m["cursor"]),
-      dx: m["dx"],
-      dy: m["dy"],
+      dx: m["dx"] && decode_dx(m["dx"]),
+      dy: m["dy"] && decode_dy(m["dy"]),
       fill: m["fill"] && decode_fill(m["fill"]),
       filled: m["filled"],
-      fill_opacity: m["fillOpacity"],
+      fill_opacity: m["fillOpacity"] && decode_fill_opacity(m["fillOpacity"]),
       font: m["font"] && decode_font(m["font"]),
-      font_size: m["fontSize"],
+      font_size: m["fontSize"] && decode_font_size(m["fontSize"]),
       font_style: m["fontStyle"] && FontStyle.decode(m["fontStyle"]),
       font_weight: decode_font_weight(m["fontWeight"]),
       href: m["href"] && decode_href(m["href"]),
       interpolate: m["interpolate"] && Interpolate.decode(m["interpolate"]),
-      limit: m["limit"],
-      opacity: m["opacity"],
+      limit: m["limit"] && decode_limit(m["limit"]),
+      opacity: m["opacity"] && decode_opacity(m["opacity"]),
       orient: m["orient"] && Orient.decode(m["orient"]),
-      radius: m["radius"],
+      radius: m["radius"] && decode_radius(m["radius"]),
       shape: m["shape"] && decode_shape(m["shape"]),
-      size: m["size"],
+      size: m["size"] && decode_size(m["size"]),
       stroke: m["stroke"] && decode_stroke(m["stroke"]),
       stroke_dash: m["strokeDash"],
-      stroke_dash_offset: m["strokeDashOffset"],
-      stroke_opacity: m["strokeOpacity"],
-      stroke_width: m["strokeWidth"],
-      tension: m["tension"],
+      stroke_dash_offset: m["strokeDashOffset"] && decode_stroke_dash_offset(m["strokeDashOffset"]),
+      stroke_opacity: m["strokeOpacity"] && decode_stroke_opacity(m["strokeOpacity"]),
+      stroke_width: m["strokeWidth"] && decode_stroke_width(m["strokeWidth"]),
+      tension: m["tension"] && decode_tension(m["tension"]),
       text: m["text"] && decode_text(m["text"]),
-      theta: m["theta"],
-      thickness: m["thickness"],
+      theta: m["theta"] && decode_theta(m["theta"]),
+      thickness: m["thickness"] && decode_thickness(m["thickness"]),
     }
   end
 
@@ -3789,6 +5141,14 @@ defmodule VGTitleConfig do
           orient: TitleOrient.t() | nil
         }
 
+  def decode_angle(value) when is_float(value), do: value
+  def decode_angle(value) when is_integer(value), do: value
+  def decode_angle(_), do: {:error, "Unexpected type when decoding VGTitleConfig.angle"}
+
+  def encode_angle(value) when is_float(value), do: value
+  def encode_angle(value) when is_integer(value), do: value
+  def encode_angle(_), do: {:error, "Unexpected type when encoding VGTitleConfig.angle"}
+
   def decode_color(value) when is_binary(value), do: value
   def decode_color(_), do: {:error, "Unexpected type when decoding VGTitleConfig.color"}
 
@@ -3801,9 +5161,17 @@ defmodule VGTitleConfig do
   def encode_font(value) when is_binary(value), do: value
   def encode_font(_), do: {:error, "Unexpected type when encoding VGTitleConfig.font"}
 
+  def decode_font_size(value) when is_float(value) and value >= 0, do: value
+  def decode_font_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_font_size(_), do: {:error, "Unexpected type when decoding VGTitleConfig.font_size"}
+
+  def encode_font_size(value) when is_float(value), do: value
+  def encode_font_size(value) when is_integer(value), do: value
+  def encode_font_size(_), do: {:error, "Unexpected type when encoding VGTitleConfig.font_size"}
+
   def decode_font_weight(value) when is_binary(value), do: FontWeight.decode(value)
-  def decode_font_weight(value) when is_float(value), do: value
-  def decode_font_weight(value) when is_integer(value), do: value
+  def decode_font_weight(value) when is_float(value) and value >= 100 and value <= 900, do: value
+  def decode_font_weight(value) when is_integer(value) and value >= 100 and value <= 900, do: value
   def decode_font_weight(value) when is_nil(value), do: value
   def decode_font_weight(_), do: {:error, "Unexpected type when decoding VGTitleConfig.font_weight"}
 
@@ -3813,17 +5181,33 @@ defmodule VGTitleConfig do
   def encode_font_weight(value) when is_nil(value), do: value
   def encode_font_weight(_), do: {:error, "Unexpected type when encoding VGTitleConfig.font_weight"}
 
+  def decode_limit(value) when is_float(value) and value >= 0, do: value
+  def decode_limit(value) when is_integer(value) and value >= 0, do: value
+  def decode_limit(_), do: {:error, "Unexpected type when decoding VGTitleConfig.limit"}
+
+  def encode_limit(value) when is_float(value), do: value
+  def encode_limit(value) when is_integer(value), do: value
+  def encode_limit(_), do: {:error, "Unexpected type when encoding VGTitleConfig.limit"}
+
+  def decode_offset(value) when is_float(value), do: value
+  def decode_offset(value) when is_integer(value), do: value
+  def decode_offset(_), do: {:error, "Unexpected type when decoding VGTitleConfig.offset"}
+
+  def encode_offset(value) when is_float(value), do: value
+  def encode_offset(value) when is_integer(value), do: value
+  def encode_offset(_), do: {:error, "Unexpected type when encoding VGTitleConfig.offset"}
+
   def from_map(m) do
     %VGTitleConfig{
       anchor: m["anchor"] && Anchor.decode(m["anchor"]),
-      angle: m["angle"],
+      angle: m["angle"] && decode_angle(m["angle"]),
       baseline: m["baseline"] && VerticalAlign.decode(m["baseline"]),
       color: m["color"] && decode_color(m["color"]),
       font: m["font"] && decode_font(m["font"]),
-      font_size: m["fontSize"],
+      font_size: m["fontSize"] && decode_font_size(m["fontSize"]),
       font_weight: decode_font_weight(m["fontWeight"]),
-      limit: m["limit"],
-      offset: m["offset"],
+      limit: m["limit"] && decode_limit(m["limit"]),
+      offset: m["offset"] && decode_offset(m["offset"]),
       orient: m["orient"] && TitleOrient.decode(m["orient"]),
     }
   end
@@ -3892,24 +5276,72 @@ defmodule ViewConfig do
   def encode_fill(value) when is_binary(value), do: value
   def encode_fill(_), do: {:error, "Unexpected type when encoding ViewConfig.fill"}
 
+  def decode_fill_opacity(value) when is_float(value), do: value
+  def decode_fill_opacity(value) when is_integer(value), do: value
+  def decode_fill_opacity(_), do: {:error, "Unexpected type when decoding ViewConfig.fill_opacity"}
+
+  def encode_fill_opacity(value) when is_float(value), do: value
+  def encode_fill_opacity(value) when is_integer(value), do: value
+  def encode_fill_opacity(_), do: {:error, "Unexpected type when encoding ViewConfig.fill_opacity"}
+
+  def decode_height(value) when is_float(value), do: value
+  def decode_height(value) when is_integer(value), do: value
+  def decode_height(_), do: {:error, "Unexpected type when decoding ViewConfig.height"}
+
+  def encode_height(value) when is_float(value), do: value
+  def encode_height(value) when is_integer(value), do: value
+  def encode_height(_), do: {:error, "Unexpected type when encoding ViewConfig.height"}
+
   def decode_stroke(value) when is_binary(value), do: value
   def decode_stroke(_), do: {:error, "Unexpected type when decoding ViewConfig.stroke"}
 
   def encode_stroke(value) when is_binary(value), do: value
   def encode_stroke(_), do: {:error, "Unexpected type when encoding ViewConfig.stroke"}
 
+  def decode_stroke_dash_offset(value) when is_float(value), do: value
+  def decode_stroke_dash_offset(value) when is_integer(value), do: value
+  def decode_stroke_dash_offset(_), do: {:error, "Unexpected type when decoding ViewConfig.stroke_dash_offset"}
+
+  def encode_stroke_dash_offset(value) when is_float(value), do: value
+  def encode_stroke_dash_offset(value) when is_integer(value), do: value
+  def encode_stroke_dash_offset(_), do: {:error, "Unexpected type when encoding ViewConfig.stroke_dash_offset"}
+
+  def decode_stroke_opacity(value) when is_float(value), do: value
+  def decode_stroke_opacity(value) when is_integer(value), do: value
+  def decode_stroke_opacity(_), do: {:error, "Unexpected type when decoding ViewConfig.stroke_opacity"}
+
+  def encode_stroke_opacity(value) when is_float(value), do: value
+  def encode_stroke_opacity(value) when is_integer(value), do: value
+  def encode_stroke_opacity(_), do: {:error, "Unexpected type when encoding ViewConfig.stroke_opacity"}
+
+  def decode_stroke_width(value) when is_float(value), do: value
+  def decode_stroke_width(value) when is_integer(value), do: value
+  def decode_stroke_width(_), do: {:error, "Unexpected type when decoding ViewConfig.stroke_width"}
+
+  def encode_stroke_width(value) when is_float(value), do: value
+  def encode_stroke_width(value) when is_integer(value), do: value
+  def encode_stroke_width(_), do: {:error, "Unexpected type when encoding ViewConfig.stroke_width"}
+
+  def decode_width(value) when is_float(value), do: value
+  def decode_width(value) when is_integer(value), do: value
+  def decode_width(_), do: {:error, "Unexpected type when decoding ViewConfig.width"}
+
+  def encode_width(value) when is_float(value), do: value
+  def encode_width(value) when is_integer(value), do: value
+  def encode_width(_), do: {:error, "Unexpected type when encoding ViewConfig.width"}
+
   def from_map(m) do
     %ViewConfig{
       clip: m["clip"],
       fill: m["fill"] && decode_fill(m["fill"]),
-      fill_opacity: m["fillOpacity"],
-      height: m["height"],
+      fill_opacity: m["fillOpacity"] && decode_fill_opacity(m["fillOpacity"]),
+      height: m["height"] && decode_height(m["height"]),
       stroke: m["stroke"] && decode_stroke(m["stroke"]),
       stroke_dash: m["strokeDash"],
-      stroke_dash_offset: m["strokeDashOffset"],
-      stroke_opacity: m["strokeOpacity"],
-      stroke_width: m["strokeWidth"],
-      width: m["width"],
+      stroke_dash_offset: m["strokeDashOffset"] && decode_stroke_dash_offset(m["strokeDashOffset"]),
+      stroke_opacity: m["strokeOpacity"] && decode_stroke_opacity(m["strokeOpacity"]),
+      stroke_width: m["strokeWidth"] && decode_stroke_width(m["strokeWidth"]),
+      width: m["width"] && decode_width(m["width"]),
     }
   end
 
@@ -4550,15 +5982,47 @@ defmodule BinParams do
           steps: [float()] | nil
         }
 
+  def decode_base(value) when is_float(value), do: value
+  def decode_base(value) when is_integer(value), do: value
+  def decode_base(_), do: {:error, "Unexpected type when decoding BinParams.base"}
+
+  def encode_base(value) when is_float(value), do: value
+  def encode_base(value) when is_integer(value), do: value
+  def encode_base(_), do: {:error, "Unexpected type when encoding BinParams.base"}
+
+  def decode_maxbins(value) when is_float(value) and value >= 2, do: value
+  def decode_maxbins(value) when is_integer(value) and value >= 2, do: value
+  def decode_maxbins(_), do: {:error, "Unexpected type when decoding BinParams.maxbins"}
+
+  def encode_maxbins(value) when is_float(value), do: value
+  def encode_maxbins(value) when is_integer(value), do: value
+  def encode_maxbins(_), do: {:error, "Unexpected type when encoding BinParams.maxbins"}
+
+  def decode_minstep(value) when is_float(value), do: value
+  def decode_minstep(value) when is_integer(value), do: value
+  def decode_minstep(_), do: {:error, "Unexpected type when decoding BinParams.minstep"}
+
+  def encode_minstep(value) when is_float(value), do: value
+  def encode_minstep(value) when is_integer(value), do: value
+  def encode_minstep(_), do: {:error, "Unexpected type when encoding BinParams.minstep"}
+
+  def decode_step(value) when is_float(value), do: value
+  def decode_step(value) when is_integer(value), do: value
+  def decode_step(_), do: {:error, "Unexpected type when decoding BinParams.step"}
+
+  def encode_step(value) when is_float(value), do: value
+  def encode_step(value) when is_integer(value), do: value
+  def encode_step(_), do: {:error, "Unexpected type when encoding BinParams.step"}
+
   def from_map(m) do
     %BinParams{
-      base: m["base"],
+      base: m["base"] && decode_base(m["base"]),
       divide: m["divide"],
       extent: m["extent"],
-      maxbins: m["maxbins"],
-      minstep: m["minstep"],
+      maxbins: m["maxbins"] && decode_maxbins(m["maxbins"]),
+      minstep: m["minstep"] && decode_minstep(m["minstep"]),
       nice: m["nice"],
-      step: m["step"],
+      step: m["step"] && decode_step(m["step"]),
       steps: m["steps"],
     }
   end
@@ -4686,18 +6150,74 @@ defmodule DateTimeClass do
           year: float() | nil
         }
 
+  def decode_date(value) when is_float(value) and value >= 1 and value <= 31, do: value
+  def decode_date(value) when is_integer(value) and value >= 1 and value <= 31, do: value
+  def decode_date(_), do: {:error, "Unexpected type when decoding DateTimeClass.date"}
+
+  def encode_date(value) when is_float(value), do: value
+  def encode_date(value) when is_integer(value), do: value
+  def encode_date(_), do: {:error, "Unexpected type when encoding DateTimeClass.date"}
+
+  def decode_hours(value) when is_float(value) and value >= 0 and value <= 23, do: value
+  def decode_hours(value) when is_integer(value) and value >= 0 and value <= 23, do: value
+  def decode_hours(_), do: {:error, "Unexpected type when decoding DateTimeClass.hours"}
+
+  def encode_hours(value) when is_float(value), do: value
+  def encode_hours(value) when is_integer(value), do: value
+  def encode_hours(_), do: {:error, "Unexpected type when encoding DateTimeClass.hours"}
+
+  def decode_milliseconds(value) when is_float(value) and value >= 0 and value <= 999, do: value
+  def decode_milliseconds(value) when is_integer(value) and value >= 0 and value <= 999, do: value
+  def decode_milliseconds(_), do: {:error, "Unexpected type when decoding DateTimeClass.milliseconds"}
+
+  def encode_milliseconds(value) when is_float(value), do: value
+  def encode_milliseconds(value) when is_integer(value), do: value
+  def encode_milliseconds(_), do: {:error, "Unexpected type when encoding DateTimeClass.milliseconds"}
+
+  def decode_minutes(value) when is_float(value) and value >= 0 and value <= 59, do: value
+  def decode_minutes(value) when is_integer(value) and value >= 0 and value <= 59, do: value
+  def decode_minutes(_), do: {:error, "Unexpected type when decoding DateTimeClass.minutes"}
+
+  def encode_minutes(value) when is_float(value), do: value
+  def encode_minutes(value) when is_integer(value), do: value
+  def encode_minutes(_), do: {:error, "Unexpected type when encoding DateTimeClass.minutes"}
+
+  def decode_quarter(value) when is_float(value) and value >= 1 and value <= 4, do: value
+  def decode_quarter(value) when is_integer(value) and value >= 1 and value <= 4, do: value
+  def decode_quarter(_), do: {:error, "Unexpected type when decoding DateTimeClass.quarter"}
+
+  def encode_quarter(value) when is_float(value), do: value
+  def encode_quarter(value) when is_integer(value), do: value
+  def encode_quarter(_), do: {:error, "Unexpected type when encoding DateTimeClass.quarter"}
+
+  def decode_seconds(value) when is_float(value) and value >= 0 and value <= 59, do: value
+  def decode_seconds(value) when is_integer(value) and value >= 0 and value <= 59, do: value
+  def decode_seconds(_), do: {:error, "Unexpected type when decoding DateTimeClass.seconds"}
+
+  def encode_seconds(value) when is_float(value), do: value
+  def encode_seconds(value) when is_integer(value), do: value
+  def encode_seconds(_), do: {:error, "Unexpected type when encoding DateTimeClass.seconds"}
+
+  def decode_year(value) when is_float(value), do: value
+  def decode_year(value) when is_integer(value), do: value
+  def decode_year(_), do: {:error, "Unexpected type when decoding DateTimeClass.year"}
+
+  def encode_year(value) when is_float(value), do: value
+  def encode_year(value) when is_integer(value), do: value
+  def encode_year(_), do: {:error, "Unexpected type when encoding DateTimeClass.year"}
+
   def from_map(m) do
     %DateTimeClass{
-      date: m["date"],
+      date: m["date"] && decode_date(m["date"]),
       day: m["day"],
-      hours: m["hours"],
-      milliseconds: m["milliseconds"],
-      minutes: m["minutes"],
+      hours: m["hours"] && decode_hours(m["hours"]),
+      milliseconds: m["milliseconds"] && decode_milliseconds(m["milliseconds"]),
+      minutes: m["minutes"] && decode_minutes(m["minutes"]),
       month: m["month"],
-      quarter: m["quarter"],
-      seconds: m["seconds"],
+      quarter: m["quarter"] && decode_quarter(m["quarter"]),
+      seconds: m["seconds"] && decode_seconds(m["seconds"]),
       utc: m["utc"],
-      year: m["year"],
+      year: m["year"] && decode_year(m["year"]),
     }
   end
 
@@ -5208,12 +6728,44 @@ defmodule Legend do
           zindex: float() | nil
         }
 
+  def decode_entry_padding(value) when is_float(value), do: value
+  def decode_entry_padding(value) when is_integer(value), do: value
+  def decode_entry_padding(_), do: {:error, "Unexpected type when decoding Legend.entry_padding"}
+
+  def encode_entry_padding(value) when is_float(value), do: value
+  def encode_entry_padding(value) when is_integer(value), do: value
+  def encode_entry_padding(_), do: {:error, "Unexpected type when encoding Legend.entry_padding"}
+
   def decode_format(value) when is_binary(value), do: value
   def decode_format(_), do: {:error, "Unexpected type when decoding Legend.format"}
 
   def encode_format(value) when is_binary(value), do: value
   def encode_format(_), do: {:error, "Unexpected type when encoding Legend.format"}
 
+  def decode_offset(value) when is_float(value), do: value
+  def decode_offset(value) when is_integer(value), do: value
+  def decode_offset(_), do: {:error, "Unexpected type when decoding Legend.offset"}
+
+  def encode_offset(value) when is_float(value), do: value
+  def encode_offset(value) when is_integer(value), do: value
+  def encode_offset(_), do: {:error, "Unexpected type when encoding Legend.offset"}
+
+  def decode_padding(value) when is_float(value), do: value
+  def decode_padding(value) when is_integer(value), do: value
+  def decode_padding(_), do: {:error, "Unexpected type when decoding Legend.padding"}
+
+  def encode_padding(value) when is_float(value), do: value
+  def encode_padding(value) when is_integer(value), do: value
+  def encode_padding(_), do: {:error, "Unexpected type when encoding Legend.padding"}
+
+  def decode_tick_count(value) when is_float(value), do: value
+  def decode_tick_count(value) when is_integer(value), do: value
+  def decode_tick_count(_), do: {:error, "Unexpected type when decoding Legend.tick_count"}
+
+  def encode_tick_count(value) when is_float(value), do: value
+  def encode_tick_count(value) when is_integer(value), do: value
+  def encode_tick_count(_), do: {:error, "Unexpected type when encoding Legend.tick_count"}
+
   def decode_values_element(%{} = value), do: DateTimeClass.from_map(value)
   def decode_values_element(value) when is_float(value), do: value
   def decode_values_element(value) when is_integer(value), do: value
@@ -5226,18 +6778,26 @@ defmodule Legend do
   def encode_values_element(value) when is_binary(value), do: value
   def encode_values_element(_), do: {:error, "Unexpected type when encoding Legend.values"}
 
+  def decode_zindex(value) when is_float(value) and value >= 0, do: value
+  def decode_zindex(value) when is_integer(value) and value >= 0, do: value
+  def decode_zindex(_), do: {:error, "Unexpected type when decoding Legend.zindex"}
+
+  def encode_zindex(value) when is_float(value), do: value
+  def encode_zindex(value) when is_integer(value), do: value
+  def encode_zindex(_), do: {:error, "Unexpected type when encoding Legend.zindex"}
+
   def from_map(m) do
     %Legend{
-      entry_padding: m["entryPadding"],
+      entry_padding: m["entryPadding"] && decode_entry_padding(m["entryPadding"]),
       format: m["format"] && decode_format(m["format"]),
-      offset: m["offset"],
+      offset: m["offset"] && decode_offset(m["offset"]),
       orient: m["orient"] && LegendOrient.decode(m["orient"]),
-      padding: m["padding"],
-      tick_count: m["tickCount"],
+      padding: m["padding"] && decode_padding(m["padding"]),
+      tick_count: m["tickCount"] && decode_tick_count(m["tickCount"]),
       title: m["title"],
       type: m["type"] && LegendType.decode(m["type"]),
       values: m["values"] && Enum.map(m["values"], &decode_values_element/1),
-      zindex: m["zindex"],
+      zindex: m["zindex"] && decode_zindex(m["zindex"]),
     }
   end
 
@@ -5433,9 +6993,17 @@ defmodule InterpolateParams do
           type: InterpolateParamsType.t()
         }
 
+  def decode_gamma(value) when is_float(value), do: value
+  def decode_gamma(value) when is_integer(value), do: value
+  def decode_gamma(_), do: {:error, "Unexpected type when decoding InterpolateParams.gamma"}
+
+  def encode_gamma(value) when is_float(value), do: value
+  def encode_gamma(value) when is_integer(value), do: value
+  def encode_gamma(_), do: {:error, "Unexpected type when encoding InterpolateParams.gamma"}
+
   def from_map(m) do
     %InterpolateParams{
-      gamma: m["gamma"],
+      gamma: m["gamma"] && decode_gamma(m["gamma"]),
       type: InterpolateParamsType.decode(m["type"]),
     }
   end
@@ -5726,6 +7294,14 @@ defmodule Scale do
           zero: boolean() | nil
         }
 
+  def decode_base(value) when is_float(value), do: value
+  def decode_base(value) when is_integer(value), do: value
+  def decode_base(_), do: {:error, "Unexpected type when decoding Scale.base"}
+
+  def encode_base(value) when is_float(value), do: value
+  def encode_base(value) when is_integer(value), do: value
+  def encode_base(_), do: {:error, "Unexpected type when encoding Scale.base"}
+
   def decode_domain(%{"selection" => _,} = value), do: DomainClass.from_map(value)
   def decode_domain(value) when is_binary(value), do: Domain.decode(value)
   def decode_domain(value) when is_list(value), do: value
@@ -5738,6 +7314,14 @@ defmodule Scale do
   def encode_domain(value) when is_nil(value), do: value
   def encode_domain(_), do: {:error, "Unexpected type when encoding Scale.domain"}
 
+  def decode_exponent(value) when is_float(value), do: value
+  def decode_exponent(value) when is_integer(value), do: value
+  def decode_exponent(_), do: {:error, "Unexpected type when decoding Scale.exponent"}
+
+  def encode_exponent(value) when is_float(value), do: value
+  def encode_exponent(value) when is_integer(value), do: value
+  def encode_exponent(_), do: {:error, "Unexpected type when encoding Scale.exponent"}
+
   def decode_interpolate(%{"type" => _,} = value), do: InterpolateParams.from_map(value)
   def decode_interpolate(value) when is_binary(value), do: Interpolate.decode(value)
   def decode_interpolate(value) when is_nil(value), do: value
@@ -5764,6 +7348,30 @@ defmodule Scale do
   def encode_nice(value) when is_nil(value), do: value
   def encode_nice(_), do: {:error, "Unexpected type when encoding Scale.nice"}
 
+  def decode_padding(value) when is_float(value) and value >= 0, do: value
+  def decode_padding(value) when is_integer(value) and value >= 0, do: value
+  def decode_padding(_), do: {:error, "Unexpected type when decoding Scale.padding"}
+
+  def encode_padding(value) when is_float(value), do: value
+  def encode_padding(value) when is_integer(value), do: value
+  def encode_padding(_), do: {:error, "Unexpected type when encoding Scale.padding"}
+
+  def decode_padding_inner(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_padding_inner(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_padding_inner(_), do: {:error, "Unexpected type when decoding Scale.padding_inner"}
+
+  def encode_padding_inner(value) when is_float(value), do: value
+  def encode_padding_inner(value) when is_integer(value), do: value
+  def encode_padding_inner(_), do: {:error, "Unexpected type when encoding Scale.padding_inner"}
+
+  def decode_padding_outer(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_padding_outer(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_padding_outer(_), do: {:error, "Unexpected type when decoding Scale.padding_outer"}
+
+  def encode_padding_outer(value) when is_float(value), do: value
+  def encode_padding_outer(value) when is_integer(value), do: value
+  def encode_padding_outer(_), do: {:error, "Unexpected type when encoding Scale.padding_outer"}
+
   def decode_range(value) when is_binary(value), do: value
   def decode_range(value) when is_list(value), do: value
   def decode_range(value) when is_nil(value), do: value
@@ -5786,15 +7394,15 @@ defmodule Scale do
 
   def from_map(m) do
     %Scale{
-      base: m["base"],
+      base: m["base"] && decode_base(m["base"]),
       clamp: m["clamp"],
       domain: decode_domain(m["domain"]),
-      exponent: m["exponent"],
+      exponent: m["exponent"] && decode_exponent(m["exponent"]),
       interpolate: decode_interpolate(m["interpolate"]),
       nice: decode_nice(m["nice"]),
-      padding: m["padding"],
-      padding_inner: m["paddingInner"],
-      padding_outer: m["paddingOuter"],
+      padding: m["padding"] && decode_padding(m["padding"]),
+      padding_inner: m["paddingInner"] && decode_padding_inner(m["paddingInner"]),
+      padding_outer: m["paddingOuter"] && decode_padding_outer(m["paddingOuter"]),
       range: decode_range(m["range"]),
       range_step: m["rangeStep"],
       round: m["round"],
@@ -6300,10 +7908,18 @@ defmodule Header do
   def encode_format(value) when is_binary(value), do: value
   def encode_format(_), do: {:error, "Unexpected type when encoding Header.format"}
 
+  def decode_label_angle(value) when is_float(value) and value >= -360 and value <= 360, do: value
+  def decode_label_angle(value) when is_integer(value) and value >= -360 and value <= 360, do: value
+  def decode_label_angle(_), do: {:error, "Unexpected type when decoding Header.label_angle"}
+
+  def encode_label_angle(value) when is_float(value), do: value
+  def encode_label_angle(value) when is_integer(value), do: value
+  def encode_label_angle(_), do: {:error, "Unexpected type when encoding Header.label_angle"}
+
   def from_map(m) do
     %Header{
       format: m["format"] && decode_format(m["format"]),
-      label_angle: m["labelAngle"],
+      label_angle: m["labelAngle"] && decode_label_angle(m["labelAngle"]),
       title: m["title"],
     }
   end
@@ -7059,6 +8675,14 @@ defmodule Axis do
   def encode_format(value) when is_binary(value), do: value
   def encode_format(_), do: {:error, "Unexpected type when encoding Axis.format"}
 
+  def decode_label_angle(value) when is_float(value) and value >= -360 and value <= 360, do: value
+  def decode_label_angle(value) when is_integer(value) and value >= -360 and value <= 360, do: value
+  def decode_label_angle(_), do: {:error, "Unexpected type when decoding Axis.label_angle"}
+
+  def encode_label_angle(value) when is_float(value), do: value
+  def encode_label_angle(value) when is_integer(value), do: value
+  def encode_label_angle(_), do: {:error, "Unexpected type when encoding Axis.label_angle"}
+
   def decode_label_overlap(value) when is_boolean(value), do: value
   def decode_label_overlap(value) when is_binary(value), do: LabelOverlapEnum.decode(value)
   def decode_label_overlap(value) when is_nil(value), do: value
@@ -7069,6 +8693,78 @@ defmodule Axis do
   def encode_label_overlap(value) when is_nil(value), do: value
   def encode_label_overlap(_), do: {:error, "Unexpected type when encoding Axis.label_overlap"}
 
+  def decode_label_padding(value) when is_float(value), do: value
+  def decode_label_padding(value) when is_integer(value), do: value
+  def decode_label_padding(_), do: {:error, "Unexpected type when decoding Axis.label_padding"}
+
+  def encode_label_padding(value) when is_float(value), do: value
+  def encode_label_padding(value) when is_integer(value), do: value
+  def encode_label_padding(_), do: {:error, "Unexpected type when encoding Axis.label_padding"}
+
+  def decode_max_extent(value) when is_float(value), do: value
+  def decode_max_extent(value) when is_integer(value), do: value
+  def decode_max_extent(_), do: {:error, "Unexpected type when decoding Axis.max_extent"}
+
+  def encode_max_extent(value) when is_float(value), do: value
+  def encode_max_extent(value) when is_integer(value), do: value
+  def encode_max_extent(_), do: {:error, "Unexpected type when encoding Axis.max_extent"}
+
+  def decode_min_extent(value) when is_float(value), do: value
+  def decode_min_extent(value) when is_integer(value), do: value
+  def decode_min_extent(_), do: {:error, "Unexpected type when decoding Axis.min_extent"}
+
+  def encode_min_extent(value) when is_float(value), do: value
+  def encode_min_extent(value) when is_integer(value), do: value
+  def encode_min_extent(_), do: {:error, "Unexpected type when encoding Axis.min_extent"}
+
+  def decode_offset(value) when is_float(value), do: value
+  def decode_offset(value) when is_integer(value), do: value
+  def decode_offset(_), do: {:error, "Unexpected type when decoding Axis.offset"}
+
+  def encode_offset(value) when is_float(value), do: value
+  def encode_offset(value) when is_integer(value), do: value
+  def encode_offset(_), do: {:error, "Unexpected type when encoding Axis.offset"}
+
+  def decode_position(value) when is_float(value), do: value
+  def decode_position(value) when is_integer(value), do: value
+  def decode_position(_), do: {:error, "Unexpected type when decoding Axis.position"}
+
+  def encode_position(value) when is_float(value), do: value
+  def encode_position(value) when is_integer(value), do: value
+  def encode_position(_), do: {:error, "Unexpected type when encoding Axis.position"}
+
+  def decode_tick_count(value) when is_float(value), do: value
+  def decode_tick_count(value) when is_integer(value), do: value
+  def decode_tick_count(_), do: {:error, "Unexpected type when decoding Axis.tick_count"}
+
+  def encode_tick_count(value) when is_float(value), do: value
+  def encode_tick_count(value) when is_integer(value), do: value
+  def encode_tick_count(_), do: {:error, "Unexpected type when encoding Axis.tick_count"}
+
+  def decode_tick_size(value) when is_float(value) and value >= 0, do: value
+  def decode_tick_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_tick_size(_), do: {:error, "Unexpected type when decoding Axis.tick_size"}
+
+  def encode_tick_size(value) when is_float(value), do: value
+  def encode_tick_size(value) when is_integer(value), do: value
+  def encode_tick_size(_), do: {:error, "Unexpected type when encoding Axis.tick_size"}
+
+  def decode_title_max_length(value) when is_float(value), do: value
+  def decode_title_max_length(value) when is_integer(value), do: value
+  def decode_title_max_length(_), do: {:error, "Unexpected type when decoding Axis.title_max_length"}
+
+  def encode_title_max_length(value) when is_float(value), do: value
+  def encode_title_max_length(value) when is_integer(value), do: value
+  def encode_title_max_length(_), do: {:error, "Unexpected type when encoding Axis.title_max_length"}
+
+  def decode_title_padding(value) when is_float(value), do: value
+  def decode_title_padding(value) when is_integer(value), do: value
+  def decode_title_padding(_), do: {:error, "Unexpected type when decoding Axis.title_padding"}
+
+  def encode_title_padding(value) when is_float(value), do: value
+  def encode_title_padding(value) when is_integer(value), do: value
+  def encode_title_padding(_), do: {:error, "Unexpected type when encoding Axis.title_padding"}
+
   def decode_values_element(%{} = value), do: DateTimeClass.from_map(value)
   def decode_values_element(value) when is_float(value), do: value
   def decode_values_element(value) when is_integer(value), do: value
@@ -7079,30 +8775,38 @@ defmodule Axis do
   def encode_values_element(value) when is_integer(value), do: value
   def encode_values_element(_), do: {:error, "Unexpected type when encoding Axis.values"}
 
+  def decode_zindex(value) when is_float(value) and value >= 0, do: value
+  def decode_zindex(value) when is_integer(value) and value >= 0, do: value
+  def decode_zindex(_), do: {:error, "Unexpected type when decoding Axis.zindex"}
+
+  def encode_zindex(value) when is_float(value), do: value
+  def encode_zindex(value) when is_integer(value), do: value
+  def encode_zindex(_), do: {:error, "Unexpected type when encoding Axis.zindex"}
+
   def from_map(m) do
     %Axis{
       domain: m["domain"],
       format: m["format"] && decode_format(m["format"]),
       grid: m["grid"],
-      label_angle: m["labelAngle"],
+      label_angle: m["labelAngle"] && decode_label_angle(m["labelAngle"]),
       label_bound: m["labelBound"],
       label_flush: m["labelFlush"],
       label_overlap: decode_label_overlap(m["labelOverlap"]),
-      label_padding: m["labelPadding"],
+      label_padding: m["labelPadding"] && decode_label_padding(m["labelPadding"]),
       labels: m["labels"],
-      max_extent: m["maxExtent"],
-      min_extent: m["minExtent"],
-      offset: m["offset"],
+      max_extent: m["maxExtent"] && decode_max_extent(m["maxExtent"]),
+      min_extent: m["minExtent"] && decode_min_extent(m["minExtent"]),
+      offset: m["offset"] && decode_offset(m["offset"]),
       orient: m["orient"] && TitleOrient.decode(m["orient"]),
-      position: m["position"],
-      tick_count: m["tickCount"],
+      position: m["position"] && decode_position(m["position"]),
+      tick_count: m["tickCount"] && decode_tick_count(m["tickCount"]),
       ticks: m["ticks"],
-      tick_size: m["tickSize"],
+      tick_size: m["tickSize"] && decode_tick_size(m["tickSize"]),
       title: m["title"],
-      title_max_length: m["titleMaxLength"],
-      title_padding: m["titlePadding"],
+      title_max_length: m["titleMaxLength"] && decode_title_max_length(m["titleMaxLength"]),
+      title_padding: m["titlePadding"] && decode_title_padding(m["titlePadding"]),
       values: m["values"] && Enum.map(m["values"], &decode_values_element/1),
-      zindex: m["zindex"],
+      zindex: m["zindex"] && decode_zindex(m["zindex"]),
     }
   end
 
@@ -7734,27 +9438,67 @@ defmodule MarkDef do
           type: Mark.t()
         }
 
+  def decode_angle(value) when is_float(value) and value >= 0 and value <= 360, do: value
+  def decode_angle(value) when is_integer(value) and value >= 0 and value <= 360, do: value
+  def decode_angle(_), do: {:error, "Unexpected type when decoding MarkDef.angle"}
+
+  def encode_angle(value) when is_float(value), do: value
+  def encode_angle(value) when is_integer(value), do: value
+  def encode_angle(_), do: {:error, "Unexpected type when encoding MarkDef.angle"}
+
   def decode_color(value) when is_binary(value), do: value
   def decode_color(_), do: {:error, "Unexpected type when decoding MarkDef.color"}
 
   def encode_color(value) when is_binary(value), do: value
   def encode_color(_), do: {:error, "Unexpected type when encoding MarkDef.color"}
 
+  def decode_dx(value) when is_float(value), do: value
+  def decode_dx(value) when is_integer(value), do: value
+  def decode_dx(_), do: {:error, "Unexpected type when decoding MarkDef.dx"}
+
+  def encode_dx(value) when is_float(value), do: value
+  def encode_dx(value) when is_integer(value), do: value
+  def encode_dx(_), do: {:error, "Unexpected type when encoding MarkDef.dx"}
+
+  def decode_dy(value) when is_float(value), do: value
+  def decode_dy(value) when is_integer(value), do: value
+  def decode_dy(_), do: {:error, "Unexpected type when decoding MarkDef.dy"}
+
+  def encode_dy(value) when is_float(value), do: value
+  def encode_dy(value) when is_integer(value), do: value
+  def encode_dy(_), do: {:error, "Unexpected type when encoding MarkDef.dy"}
+
   def decode_fill(value) when is_binary(value), do: value
   def decode_fill(_), do: {:error, "Unexpected type when decoding MarkDef.fill"}
 
   def encode_fill(value) when is_binary(value), do: value
   def encode_fill(_), do: {:error, "Unexpected type when encoding MarkDef.fill"}
 
+  def decode_fill_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_fill_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_fill_opacity(_), do: {:error, "Unexpected type when decoding MarkDef.fill_opacity"}
+
+  def encode_fill_opacity(value) when is_float(value), do: value
+  def encode_fill_opacity(value) when is_integer(value), do: value
+  def encode_fill_opacity(_), do: {:error, "Unexpected type when encoding MarkDef.fill_opacity"}
+
   def decode_font(value) when is_binary(value), do: value
   def decode_font(_), do: {:error, "Unexpected type when decoding MarkDef.font"}
 
   def encode_font(value) when is_binary(value), do: value
   def encode_font(_), do: {:error, "Unexpected type when encoding MarkDef.font"}
 
+  def decode_font_size(value) when is_float(value) and value >= 0, do: value
+  def decode_font_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_font_size(_), do: {:error, "Unexpected type when decoding MarkDef.font_size"}
+
+  def encode_font_size(value) when is_float(value), do: value
+  def encode_font_size(value) when is_integer(value), do: value
+  def encode_font_size(_), do: {:error, "Unexpected type when encoding MarkDef.font_size"}
+
   def decode_font_weight(value) when is_binary(value), do: FontWeight.decode(value)
-  def decode_font_weight(value) when is_float(value), do: value
-  def decode_font_weight(value) when is_integer(value), do: value
+  def decode_font_weight(value) when is_float(value) and value >= 100 and value <= 900, do: value
+  def decode_font_weight(value) when is_integer(value) and value >= 100 and value <= 900, do: value
   def decode_font_weight(value) when is_nil(value), do: value
   def decode_font_weight(_), do: {:error, "Unexpected type when decoding MarkDef.font_weight"}
 
@@ -7770,18 +9514,74 @@ defmodule MarkDef do
   def encode_href(value) when is_binary(value), do: value
   def encode_href(_), do: {:error, "Unexpected type when encoding MarkDef.href"}
 
+  def decode_limit(value) when is_float(value), do: value
+  def decode_limit(value) when is_integer(value), do: value
+  def decode_limit(_), do: {:error, "Unexpected type when decoding MarkDef.limit"}
+
+  def encode_limit(value) when is_float(value), do: value
+  def encode_limit(value) when is_integer(value), do: value
+  def encode_limit(_), do: {:error, "Unexpected type when encoding MarkDef.limit"}
+
+  def decode_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_opacity(_), do: {:error, "Unexpected type when decoding MarkDef.opacity"}
+
+  def encode_opacity(value) when is_float(value), do: value
+  def encode_opacity(value) when is_integer(value), do: value
+  def encode_opacity(_), do: {:error, "Unexpected type when encoding MarkDef.opacity"}
+
+  def decode_radius(value) when is_float(value) and value >= 0, do: value
+  def decode_radius(value) when is_integer(value) and value >= 0, do: value
+  def decode_radius(_), do: {:error, "Unexpected type when decoding MarkDef.radius"}
+
+  def encode_radius(value) when is_float(value), do: value
+  def encode_radius(value) when is_integer(value), do: value
+  def encode_radius(_), do: {:error, "Unexpected type when encoding MarkDef.radius"}
+
   def decode_shape(value) when is_binary(value), do: value
   def decode_shape(_), do: {:error, "Unexpected type when decoding MarkDef.shape"}
 
   def encode_shape(value) when is_binary(value), do: value
   def encode_shape(_), do: {:error, "Unexpected type when encoding MarkDef.shape"}
 
+  def decode_size(value) when is_float(value) and value >= 0, do: value
+  def decode_size(value) when is_integer(value) and value >= 0, do: value
+  def decode_size(_), do: {:error, "Unexpected type when decoding MarkDef.size"}
+
+  def encode_size(value) when is_float(value), do: value
+  def encode_size(value) when is_integer(value), do: value
+  def encode_size(_), do: {:error, "Unexpected type when encoding MarkDef.size"}
+
   def decode_stroke(value) when is_binary(value), do: value
   def decode_stroke(_), do: {:error, "Unexpected type when decoding MarkDef.stroke"}
 
   def encode_stroke(value) when is_binary(value), do: value
   def encode_stroke(_), do: {:error, "Unexpected type when encoding MarkDef.stroke"}
 
+  def decode_stroke_dash_offset(value) when is_float(value), do: value
+  def decode_stroke_dash_offset(value) when is_integer(value), do: value
+  def decode_stroke_dash_offset(_), do: {:error, "Unexpected type when decoding MarkDef.stroke_dash_offset"}
+
+  def encode_stroke_dash_offset(value) when is_float(value), do: value
+  def encode_stroke_dash_offset(value) when is_integer(value), do: value
+  def encode_stroke_dash_offset(_), do: {:error, "Unexpected type when encoding MarkDef.stroke_dash_offset"}
+
+  def decode_stroke_opacity(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_stroke_opacity(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_stroke_opacity(_), do: {:error, "Unexpected type when decoding MarkDef.stroke_opacity"}
+
+  def encode_stroke_opacity(value) when is_float(value), do: value
+  def encode_stroke_opacity(value) when is_integer(value), do: value
+  def encode_stroke_opacity(_), do: {:error, "Unexpected type when encoding MarkDef.stroke_opacity"}
+
+  def decode_stroke_width(value) when is_float(value) and value >= 0, do: value
+  def decode_stroke_width(value) when is_integer(value) and value >= 0, do: value
+  def decode_stroke_width(_), do: {:error, "Unexpected type when decoding MarkDef.stroke_width"}
+
+  def encode_stroke_width(value) when is_float(value), do: value
+  def encode_stroke_width(value) when is_integer(value), do: value
+  def encode_stroke_width(_), do: {:error, "Unexpected type when encoding MarkDef.stroke_width"}
+
   def decode_style(value) when is_binary(value), do: value
   def decode_style(value) when is_list(value), do: value
   def decode_style(value) when is_nil(value), do: value
@@ -7792,46 +9592,62 @@ defmodule MarkDef do
   def encode_style(value) when is_nil(value), do: value
   def encode_style(_), do: {:error, "Unexpected type when encoding MarkDef.style"}
 
+  def decode_tension(value) when is_float(value) and value >= 0 and value <= 1, do: value
+  def decode_tension(value) when is_integer(value) and value >= 0 and value <= 1, do: value
+  def decode_tension(_), do: {:error, "Unexpected type when decoding MarkDef.tension"}
+
+  def encode_tension(value) when is_float(value), do: value
+  def encode_tension(value) when is_integer(value), do: value
+  def encode_tension(_), do: {:error, "Unexpected type when encoding MarkDef.tension"}
+
   def decode_text(value) when is_binary(value), do: value
   def decode_text(_), do: {:error, "Unexpected type when decoding MarkDef.text"}
 
   def encode_text(value) when is_binary(value), do: value
   def encode_text(_), do: {:error, "Unexpected type when encoding MarkDef.text"}
 
+  def decode_theta(value) when is_float(value), do: value
+  def decode_theta(value) when is_integer(value), do: value
+  def decode_theta(_), do: {:error, "Unexpected type when decoding MarkDef.theta"}
+
+  def encode_theta(value) when is_float(value), do: value
+  def encode_theta(value) when is_integer(value), do: value
+  def encode_theta(_), do: {:error, "Unexpected type when encoding MarkDef.theta"}
+
   def from_map(m) do
     %MarkDef{
       align: m["align"] && HorizontalAlign.decode(m["align"]),
-      angle: m["angle"],
+      angle: m["angle"] && decode_angle(m["angle"]),
       baseline: m["baseline"] && VerticalAlign.decode(m["baseline"]),
       clip: m["clip"],
       color: m["color"] && decode_color(m["color"]),
       cursor: m["cursor"] && Cursor.decode(m["cursor"]),
-      dx: m["dx"],
-      dy: m["dy"],
+      dx: m["dx"] && decode_dx(m["dx"]),
+      dy: m["dy"] && decode_dy(m["dy"]),
       fill: m["fill"] && decode_fill(m["fill"]),
       filled: m["filled"],
-      fill_opacity: m["fillOpacity"],
+      fill_opacity: m["fillOpacity"] && decode_fill_opacity(m["fillOpacity"]),
       font: m["font"] && decode_font(m["font"]),
-      font_size: m["fontSize"],
+      font_size: m["fontSize"] && decode_font_size(m["fontSize"]),
       font_style: m["fontStyle"] && FontStyle.decode(m["fontStyle"]),
       font_weight: decode_font_weight(m["fontWeight"]),
       href: m["href"] && decode_href(m["href"]),
       interpolate: m["interpolate"] && Interpolate.decode(m["interpolate"]),
-      limit: m["limit"],
-      opacity: m["opacity"],
+      limit: m["limit"] && decode_limit(m["limit"]),
+      opacity: m["opacity"] && decode_opacity(m["opacity"]),
       orient: m["orient"] && Orient.decode(m["orient"]),
-      radius: m["radius"],
+      radius: m["radius"] && decode_radius(m["radius"]),
       shape: m["shape"] && decode_shape(m["shape"]),
-      size: m["size"],
+      size: m["size"] && decode_size(m["size"]),
       stroke: m["stroke"] && decode_stroke(m["stroke"]),
       stroke_dash: m["strokeDash"],
-      stroke_dash_offset: m["strokeDashOffset"],
-      stroke_opacity: m["strokeOpacity"],
-      stroke_width: m["strokeWidth"],
+      stroke_dash_offset: m["strokeDashOffset"] && decode_stroke_dash_offset(m["strokeDashOffset"]),
+      stroke_opacity: m["strokeOpacity"] && decode_stroke_opacity(m["strokeOpacity"]),
+      stroke_width: m["strokeWidth"] && decode_stroke_width(m["strokeWidth"]),
       style: decode_style(m["style"]),
-      tension: m["tension"],
+      tension: m["tension"] && decode_tension(m["tension"]),
       text: m["text"] && decode_text(m["text"]),
-      theta: m["theta"],
+      theta: m["theta"] && decode_theta(m["theta"]),
       type: Mark.decode(m["type"]),
     }
   end
@@ -7921,6 +9737,54 @@ defmodule Projection do
           type: VGProjectionType.t() | nil
         }
 
+  def decode_clip_angle(value) when is_float(value), do: value
+  def decode_clip_angle(value) when is_integer(value), do: value
+  def decode_clip_angle(_), do: {:error, "Unexpected type when decoding Projection.clip_angle"}
+
+  def encode_clip_angle(value) when is_float(value), do: value
+  def encode_clip_angle(value) when is_integer(value), do: value
+  def encode_clip_angle(_), do: {:error, "Unexpected type when encoding Projection.clip_angle"}
+
+  def decode_coefficient(value) when is_float(value), do: value
+  def decode_coefficient(value) when is_integer(value), do: value
+  def decode_coefficient(_), do: {:error, "Unexpected type when decoding Projection.coefficient"}
+
+  def encode_coefficient(value) when is_float(value), do: value
+  def encode_coefficient(value) when is_integer(value), do: value
+  def encode_coefficient(_), do: {:error, "Unexpected type when encoding Projection.coefficient"}
+
+  def decode_distance(value) when is_float(value), do: value
+  def decode_distance(value) when is_integer(value), do: value
+  def decode_distance(_), do: {:error, "Unexpected type when decoding Projection.distance"}
+
+  def encode_distance(value) when is_float(value), do: value
+  def encode_distance(value) when is_integer(value), do: value
+  def encode_distance(_), do: {:error, "Unexpected type when encoding Projection.distance"}
+
+  def decode_fraction(value) when is_float(value), do: value
+  def decode_fraction(value) when is_integer(value), do: value
+  def decode_fraction(_), do: {:error, "Unexpected type when decoding Projection.fraction"}
+
+  def encode_fraction(value) when is_float(value), do: value
+  def encode_fraction(value) when is_integer(value), do: value
+  def encode_fraction(_), do: {:error, "Unexpected type when encoding Projection.fraction"}
+
+  def decode_lobes(value) when is_float(value), do: value
+  def decode_lobes(value) when is_integer(value), do: value
+  def decode_lobes(_), do: {:error, "Unexpected type when decoding Projection.lobes"}
+
+  def encode_lobes(value) when is_float(value), do: value
+  def encode_lobes(value) when is_integer(value), do: value
+  def encode_lobes(_), do: {:error, "Unexpected type when encoding Projection.lobes"}
+
+  def decode_parallel(value) when is_float(value), do: value
+  def decode_parallel(value) when is_integer(value), do: value
+  def decode_parallel(_), do: {:error, "Unexpected type when decoding Projection.parallel"}
+
+  def encode_parallel(value) when is_float(value), do: value
+  def encode_parallel(value) when is_integer(value), do: value
+  def encode_parallel(_), do: {:error, "Unexpected type when encoding Projection.parallel"}
+
   def decode_precision_value(value) when is_float(value), do: value
   def decode_precision_value(value) when is_integer(value), do: value
   def decode_precision_value(value) when is_binary(value), do: value
@@ -7931,23 +9795,55 @@ defmodule Projection do
   def encode_precision_value(value) when is_binary(value), do: value
   def encode_precision_value(_), do: {:error, "Unexpected type when encoding Projection.precision"}
 
+  def decode_radius(value) when is_float(value), do: value
+  def decode_radius(value) when is_integer(value), do: value
+  def decode_radius(_), do: {:error, "Unexpected type when decoding Projection.radius"}
+
+  def encode_radius(value) when is_float(value), do: value
+  def encode_radius(value) when is_integer(value), do: value
+  def encode_radius(_), do: {:error, "Unexpected type when encoding Projection.radius"}
+
+  def decode_ratio(value) when is_float(value), do: value
+  def decode_ratio(value) when is_integer(value), do: value
+  def decode_ratio(_), do: {:error, "Unexpected type when decoding Projection.ratio"}
+
+  def encode_ratio(value) when is_float(value), do: value
+  def encode_ratio(value) when is_integer(value), do: value
+  def encode_ratio(_), do: {:error, "Unexpected type when encoding Projection.ratio"}
+
+  def decode_spacing(value) when is_float(value), do: value
+  def decode_spacing(value) when is_integer(value), do: value
+  def decode_spacing(_), do: {:error, "Unexpected type when decoding Projection.spacing"}
+
+  def encode_spacing(value) when is_float(value), do: value
+  def encode_spacing(value) when is_integer(value), do: value
+  def encode_spacing(_), do: {:error, "Unexpected type when encoding Projection.spacing"}
+
+  def decode_tilt(value) when is_float(value), do: value
+  def decode_tilt(value) when is_integer(value), do: value
+  def decode_tilt(_), do: {:error, "Unexpected type when decoding Projection.tilt"}
+
+  def encode_tilt(value) when is_float(value), do: value
+  def encode_tilt(value) when is_integer(value), do: value
+  def encode_tilt(_), do: {:error, "Unexpected type when encoding Projection.tilt"}
+
   def from_map(m) do
     %Projection{
       center: m["center"],
-      clip_angle: m["clipAngle"],
+      clip_angle: m["clipAngle"] && decode_clip_angle(m["clipAngle"]),
       clip_extent: m["clipExtent"],
-      coefficient: m["coefficient"],
-      distance: m["distance"],
-      fraction: m["fraction"],
-      lobes: m["lobes"],
-      parallel: m["parallel"],
+      coefficient: m["coefficient"] && decode_coefficient(m["coefficient"]),
+      distance: m["distance"] && decode_distance(m["distance"]),
+      fraction: m["fraction"] && decode_fraction(m["fraction"]),
+      lobes: m["lobes"] && decode_lobes(m["lobes"]),
+      parallel: m["parallel"] && decode_parallel(m["parallel"]),
       precision: m["precision"]
       |> Map.new(fn {key, value} -> {key, decode_precision_value(value)} end),
-      radius: m["radius"],
-      ratio: m["ratio"],
+      radius: m["radius"] && decode_radius(m["radius"]),
+      ratio: m["ratio"] && decode_ratio(m["ratio"]),
       rotate: m["rotate"],
-      spacing: m["spacing"],
-      tilt: m["tilt"],
+      spacing: m["spacing"] && decode_spacing(m["spacing"]),
+      tilt: m["tilt"] && decode_tilt(m["tilt"]),
       type: m["type"] && VGProjectionType.decode(m["type"]),
     }
   end
@@ -8365,6 +10261,14 @@ defmodule TitleParams do
           text: String.t()
         }
 
+  def decode_offset(value) when is_float(value), do: value
+  def decode_offset(value) when is_integer(value), do: value
+  def decode_offset(_), do: {:error, "Unexpected type when decoding TitleParams.offset"}
+
+  def encode_offset(value) when is_float(value), do: value
+  def encode_offset(value) when is_integer(value), do: value
+  def encode_offset(_), do: {:error, "Unexpected type when encoding TitleParams.offset"}
+
   def decode_style(value) when is_binary(value), do: value
   def decode_style(value) when is_list(value), do: value
   def decode_style(value) when is_nil(value), do: value
@@ -8384,7 +10288,7 @@ defmodule TitleParams do
   def from_map(m) do
     %TitleParams{
       anchor: m["anchor"] && Anchor.decode(m["anchor"]),
-      offset: m["offset"],
+      offset: m["offset"] && decode_offset(m["offset"]),
       orient: m["orient"] && TitleOrient.decode(m["orient"]),
       style: decode_style(m["style"]),
       text: decode_text(m["text"]),
@@ -8695,6 +10599,14 @@ defmodule LayerSpec do
   def encode_description(value) when is_binary(value), do: value
   def encode_description(_), do: {:error, "Unexpected type when encoding LayerSpec.description"}
 
+  def decode_height(value) when is_float(value), do: value
+  def decode_height(value) when is_integer(value), do: value
+  def decode_height(_), do: {:error, "Unexpected type when decoding LayerSpec.height"}
+
+  def encode_height(value) when is_float(value), do: value
+  def encode_height(value) when is_integer(value), do: value
+  def encode_height(_), do: {:error, "Unexpected type when encoding LayerSpec.height"}
+
   def decode_name(value) when is_binary(value), do: value
   def decode_name(_), do: {:error, "Unexpected type when decoding LayerSpec.name"}
 
@@ -8711,6 +10623,14 @@ defmodule LayerSpec do
   def encode_title(value) when is_nil(value), do: value
   def encode_title(_), do: {:error, "Unexpected type when encoding LayerSpec.title"}
 
+  def decode_width(value) when is_float(value), do: value
+  def decode_width(value) when is_integer(value), do: value
+  def decode_width(_), do: {:error, "Unexpected type when decoding LayerSpec.width"}
+
+  def encode_width(value) when is_float(value), do: value
+  def encode_width(value) when is_integer(value), do: value
+  def encode_width(_), do: {:error, "Unexpected type when encoding LayerSpec.width"}
+
   def decode_mark(%{"type" => _,} = value), do: MarkDef.from_map(value)
   def decode_mark(value) when is_binary(value), do: Mark.decode(value)
   def decode_mark(value) when is_nil(value), do: value
@@ -8725,13 +10645,13 @@ defmodule LayerSpec do
     %LayerSpec{
       data: m["data"] && Data.from_map(m["data"]),
       description: m["description"] && decode_description(m["description"]),
-      height: m["height"],
+      height: m["height"] && decode_height(m["height"]),
       layer: m["layer"] && Enum.map(m["layer"], &LayerSpec.from_map/1),
       name: m["name"] && decode_name(m["name"]),
       resolve: m["resolve"] && Resolve.from_map(m["resolve"]),
       title: decode_title(m["title"]),
       transform: m["transform"] && Enum.map(m["transform"], &Transform.from_map/1),
-      width: m["width"],
+      width: m["width"] && decode_width(m["width"]),
       encoding: m["encoding"] && Encoding.from_map(m["encoding"]),
       mark: decode_mark(m["mark"]),
       projection: m["projection"] && Projection.from_map(m["projection"]),
@@ -8866,6 +10786,14 @@ defmodule Spec do
   def encode_description(value) when is_binary(value), do: value
   def encode_description(_), do: {:error, "Unexpected type when encoding Spec.description"}
 
+  def decode_height(value) when is_float(value), do: value
+  def decode_height(value) when is_integer(value), do: value
+  def decode_height(_), do: {:error, "Unexpected type when decoding Spec.height"}
+
+  def encode_height(value) when is_float(value), do: value
+  def encode_height(value) when is_integer(value), do: value
+  def encode_height(_), do: {:error, "Unexpected type when encoding Spec.height"}
+
   def decode_name(value) when is_binary(value), do: value
   def decode_name(_), do: {:error, "Unexpected type when decoding Spec.name"}
 
@@ -8882,6 +10810,14 @@ defmodule Spec do
   def encode_title(value) when is_nil(value), do: value
   def encode_title(_), do: {:error, "Unexpected type when encoding Spec.title"}
 
+  def decode_width(value) when is_float(value), do: value
+  def decode_width(value) when is_integer(value), do: value
+  def decode_width(_), do: {:error, "Unexpected type when decoding Spec.width"}
+
+  def encode_width(value) when is_float(value), do: value
+  def encode_width(value) when is_integer(value), do: value
+  def encode_width(_), do: {:error, "Unexpected type when encoding Spec.width"}
+
   def decode_mark(%{"type" => _,} = value), do: MarkDef.from_map(value)
   def decode_mark(value) when is_binary(value), do: Mark.decode(value)
   def decode_mark(value) when is_nil(value), do: value
@@ -8896,13 +10832,13 @@ defmodule Spec do
     %Spec{
       data: m["data"] && Data.from_map(m["data"]),
       description: m["description"] && decode_description(m["description"]),
-      height: m["height"],
+      height: m["height"] && decode_height(m["height"]),
       layer: m["layer"] && Enum.map(m["layer"], &LayerSpec.from_map/1),
       name: m["name"] && decode_name(m["name"]),
       resolve: m["resolve"] && Resolve.from_map(m["resolve"]),
       title: decode_title(m["title"]),
       transform: m["transform"] && Enum.map(m["transform"], &Transform.from_map/1),
-      width: m["width"],
+      width: m["width"] && decode_width(m["width"]),
       encoding: m["encoding"] && Encoding.from_map(m["encoding"]),
       mark: decode_mark(m["mark"]),
       projection: m["projection"] && Projection.from_map(m["projection"]),
@@ -9036,6 +10972,14 @@ defmodule TopLevel do
   def encode_description(value) when is_binary(value), do: value
   def encode_description(_), do: {:error, "Unexpected type when encoding TopLevel.description"}
 
+  def decode_height(value) when is_float(value), do: value
+  def decode_height(value) when is_integer(value), do: value
+  def decode_height(_), do: {:error, "Unexpected type when decoding TopLevel.height"}
+
+  def encode_height(value) when is_float(value), do: value
+  def encode_height(value) when is_integer(value), do: value
+  def encode_height(_), do: {:error, "Unexpected type when encoding TopLevel.height"}
+
   def decode_mark(%{"type" => _,} = value), do: MarkDef.from_map(value)
   def decode_mark(value) when is_binary(value), do: Mark.decode(value)
   def decode_mark(value) when is_nil(value), do: value
@@ -9074,6 +11018,14 @@ defmodule TopLevel do
   def encode_title(value) when is_nil(value), do: value
   def encode_title(_), do: {:error, "Unexpected type when encoding TopLevel.title"}
 
+  def decode_width(value) when is_float(value), do: value
+  def decode_width(value) when is_integer(value), do: value
+  def decode_width(_), do: {:error, "Unexpected type when decoding TopLevel.width"}
+
+  def encode_width(value) when is_float(value), do: value
+  def encode_width(value) when is_integer(value), do: value
+  def encode_width(_), do: {:error, "Unexpected type when encoding TopLevel.width"}
+
   def from_map(m) do
     %TopLevel{
       schema: m["$schema"] && decode_schema(m["$schema"]),
@@ -9083,7 +11035,7 @@ defmodule TopLevel do
       data: m["data"] && Data.from_map(m["data"]),
       description: m["description"] && decode_description(m["description"]),
       encoding: m["encoding"] && EncodingWithFacet.from_map(m["encoding"]),
-      height: m["height"],
+      height: m["height"] && decode_height(m["height"]),
       mark: decode_mark(m["mark"]),
       name: m["name"] && decode_name(m["name"]),
       padding: decode_padding(m["padding"]),
@@ -9092,7 +11044,7 @@ defmodule TopLevel do
       |> Map.new(fn {key, value} -> {key, SelectionDef.from_map(value)} end),
       title: decode_title(m["title"]),
       transform: m["transform"] && Enum.map(m["transform"], &Transform.from_map/1),
-      width: m["width"],
+      width: m["width"] && decode_width(m["width"]),
       layer: m["layer"] && Enum.map(m["layer"], &LayerSpec.from_map/1),
       resolve: m["resolve"] && Resolve.from_map(m["resolve"]),
       facet: m["facet"] && FacetMapping.from_map(m["facet"]),
diff --git a/head/schema-elm/test/inputs/schema/fractional-bounds.schema/default/QuickType.elm b/head/schema-elm/test/inputs/schema/fractional-bounds.schema/default/QuickType.elm
new file mode 100644
index 0000000..a7cbef2
--- /dev/null
+++ b/head/schema-elm/test/inputs/schema/fractional-bounds.schema/default/QuickType.elm
@@ -0,0 +1,57 @@
+-- To decode the JSON data, add this file to your project, run
+--
+--     elm install NoRedInk/elm-json-decode-pipeline
+--
+-- add these imports
+--
+--     import Json.Decode exposing (decodeString)
+--     import QuickType exposing (quickType)
+--
+-- and you're off to the races with
+--
+--     decodeString quickType myJsonString
+
+module QuickType exposing
+    ( QuickType
+    , quickTypeToString
+    , quickType
+    )
+
+import Json.Decode as Jdec
+import Json.Decode.Pipeline as Jpipe
+import Json.Encode as Jenc
+import Dict exposing (Dict)
+
+type alias QuickType =
+    { value : Float
+    }
+
+-- decoders and encoders
+optionalField key decoder fallback =
+    Jdec.dict Jdec.value
+        |> Jdec.andThen (\m ->
+            case Dict.get key m of
+                Nothing -> Jdec.succeed fallback
+                Just x -> Jdec.decodeValue decoder x |> Result.map Jdec.succeed |> Result.withDefault (Jdec.fail ("Invalid " ++ key)))
+
+quickTypeToString : QuickType -> String
+quickTypeToString r = Jenc.encode 0 (encodeQuickType r)
+
+quickType : Jdec.Decoder QuickType
+quickType =
+    Jdec.succeed QuickType
+        |> Jpipe.required "value" (Jdec.andThen (\x -> if x >= 0.1 && x <= 0.9 then Jdec.succeed x else Jdec.fail "Number out of range") Jdec.float)
+
+encodeQuickType : QuickType -> Jenc.Value
+encodeQuickType x =
+    Jenc.object
+        [ ("value", Jenc.float x.value)
+        ]
+
+--- encoder helpers
+
+makeNullableEncoder : (a -> Jenc.Value) -> Maybe a -> Jenc.Value
+makeNullableEncoder f m =
+    case m of
+    Just x -> f x
+    Nothing -> Jenc.null
diff --git a/base/schema-flow/test/inputs/schema/accessors.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/accessors.schema/default/TopLevel.js
index 84b5ac7..eb6ec52 100644
--- a/base/schema-flow/test/inputs/schema/accessors.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/accessors.schema/default/TopLevel.js
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.js
index 71263b3..f396e99 100644
--- a/base/schema-flow/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.js
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/any.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/any.schema/default/TopLevel.js
index 6b5c82c..a815d1f 100644
--- a/base/schema-flow/test/inputs/schema/any.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/any.schema/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/bool-string.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/bool-string.schema/default/TopLevel.js
index cbc22b4..b091ee6 100644
--- a/base/schema-flow/test/inputs/schema/bool-string.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/bool-string.schema/default/TopLevel.js
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/boolean-subschema.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/boolean-subschema.schema/default/TopLevel.js
index c5b572c..89ed849 100644
--- a/base/schema-flow/test/inputs/schema/boolean-subschema.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/boolean-subschema.schema/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/camelCase.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/camelCase.schema/default/TopLevel.js
index 36b2fbe..68c5bb7 100644
--- a/base/schema-flow/test/inputs/schema/camelCase.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/camelCase.schema/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/class-map-union.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/class-map-union.schema/default/TopLevel.js
index 63ad264..bd843f1 100644
--- a/base/schema-flow/test/inputs/schema/class-map-union.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/class-map-union.schema/default/TopLevel.js
@@ -152,7 +152,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/class-with-additional.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/class-with-additional.schema/default/TopLevel.js
index 790d6ae..ac8ad1e 100644
--- a/base/schema-flow/test/inputs/schema/class-with-additional.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/class-with-additional.schema/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.js
index 5801994..f43328c 100644
--- a/base/schema-flow/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.js
@@ -150,7 +150,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.js
index 64ff7f3..f51219c 100644
--- a/base/schema-flow/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.js
@@ -156,7 +156,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.js
index 39f4b8f..7347c36 100644
--- a/base/schema-flow/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.js
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/comment-injection.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/comment-injection.schema/default/TopLevel.js
index 1a6126f..c113d8f 100644
--- a/base/schema-flow/test/inputs/schema/comment-injection.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/comment-injection.schema/default/TopLevel.js
@@ -175,7 +175,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/const-non-string.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/const-non-string.schema/default/TopLevel.js
index 8a6b3a5..a2be7c1 100644
--- a/base/schema-flow/test/inputs/schema/const-non-string.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/const-non-string.schema/default/TopLevel.js
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/constructor.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/constructor.schema/default/TopLevel.js
index 374bfba..8d064b4 100644
--- a/base/schema-flow/test/inputs/schema/constructor.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/constructor.schema/default/TopLevel.js
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/cut-enum.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/cut-enum.schema/default/TopLevel.js
index ca769c1..5fc62ff 100644
--- a/base/schema-flow/test/inputs/schema/cut-enum.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/cut-enum.schema/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/date-time-or-string.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/date-time-or-string.schema/default/TopLevel.js
index cceb6d3..a07fc3e 100644
--- a/base/schema-flow/test/inputs/schema/date-time-or-string.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/date-time-or-string.schema/default/TopLevel.js
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/date-time.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/date-time.schema/default/TopLevel.js
index 1ab4b73..7217235 100644
--- a/base/schema-flow/test/inputs/schema/date-time.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/date-time.schema/default/TopLevel.js
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/default-value.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/default-value.schema/default/TopLevel.js
index 3b87590..9357b41 100644
--- a/base/schema-flow/test/inputs/schema/default-value.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/default-value.schema/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.js
index 9e9aa40..5a53374 100644
--- a/base/schema-flow/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/description.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/description.schema/default/TopLevel.js
index e48ae9c..477f6b6 100644
--- a/base/schema-flow/test/inputs/schema/description.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/description.schema/default/TopLevel.js
@@ -174,7 +174,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/direct-union.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/direct-union.schema/default/TopLevel.js
index c5f14fa..7c502bb 100644
--- a/base/schema-flow/test/inputs/schema/direct-union.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/direct-union.schema/default/TopLevel.js
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/empty-object.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/empty-object.schema/default/TopLevel.js
index b73bc0c..6301e5d 100644
--- a/base/schema-flow/test/inputs/schema/empty-object.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/empty-object.schema/default/TopLevel.js
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/enum-large.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/enum-large.schema/default/TopLevel.js
index 751e484..5c60925 100644
--- a/base/schema-flow/test/inputs/schema/enum-large.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/enum-large.schema/default/TopLevel.js
@@ -164,7 +164,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/enum-with-null.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/enum-with-null.schema/default/TopLevel.js
index 6207039..4d0f60f 100644
--- a/base/schema-flow/test/inputs/schema/enum-with-null.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/enum-with-null.schema/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/enum-with-values.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/enum-with-values.schema/default/TopLevel.js
index 4bd336a..65eb190 100644
--- a/base/schema-flow/test/inputs/schema/enum-with-values.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/enum-with-values.schema/default/TopLevel.js
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/enum.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/enum.schema/default/TopLevel.js
index 684fee0..16b6fcf 100644
--- a/base/schema-flow/test/inputs/schema/enum.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/enum.schema/default/TopLevel.js
@@ -157,7 +157,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/schema-flow/test/inputs/schema/fractional-bounds.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/fractional-bounds.schema/default/TopLevel.js
new file mode 100644
index 0000000..05dba1b
--- /dev/null
+++ b/head/schema-flow/test/inputs/schema/fractional-bounds.schema/default/TopLevel.js
@@ -0,0 +1,210 @@
+// @flow
+
+// To parse this data:
+//
+//   const Convert = require("./TopLevel");
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export type TopLevel = {
+    value: number;
+    [property: string]: mixed | number;
+};
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+function toTopLevel(json: string): TopLevel {
+    return cast(JSON.parse(json), r("TopLevel"));
+}
+
+function topLevelToJson(value: TopLevel): string {
+    return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = '') {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "value", js: "value", typ: n(3.14, 0.1, 0.9) },
+    ], "any"),
+};
+
+module.exports = {
+    "topLevelToJson": topLevelToJson,
+    "toTopLevel": toTopLevel,
+};
diff --git a/base/schema-flow/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.js
index 59da3cf..db60ec3 100644
--- a/base/schema-flow/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.js
index d7eea60..87b604a 100644
--- a/base/schema-flow/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/id-no-address.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/id-no-address.schema/default/TopLevel.js
index c974875..cd40fc2 100644
--- a/base/schema-flow/test/inputs/schema/id-no-address.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/id-no-address.schema/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/id-root.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/id-root.schema/default/TopLevel.js
index 713bc4e..d9cba86 100644
--- a/base/schema-flow/test/inputs/schema/id-root.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/id-root.schema/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.js
index ab20ba6..e1474d0 100644
--- a/base/schema-flow/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.js
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/implicit-all-of.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/implicit-all-of.schema/default/TopLevel.js
index c39cbdd..f5eefd3 100644
--- a/base/schema-flow/test/inputs/schema/implicit-all-of.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/implicit-all-of.schema/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.js
index a6ffd3a..4c7e0f0 100644
--- a/base/schema-flow/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.js
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/implicit-one-of.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/implicit-one-of.schema/default/TopLevel.js
index 9682fb2..f49d653 100644
--- a/base/schema-flow/test/inputs/schema/implicit-one-of.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/implicit-one-of.schema/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/integer-before-number.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/integer-before-number.schema/default/TopLevel.js
index 9190489..b0b74b2 100644
--- a/base/schema-flow/test/inputs/schema/integer-before-number.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/integer-before-number.schema/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/integer-float-union.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/integer-float-union.schema/default/TopLevel.js
index b472728..3e09a4a 100644
--- a/base/schema-flow/test/inputs/schema/integer-float-union.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/integer-float-union.schema/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/integer-string.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/integer-string.schema/default/TopLevel.js
index 4926aaf..5a379d8 100644
--- a/base/schema-flow/test/inputs/schema/integer-string.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/integer-string.schema/default/TopLevel.js
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/integer-type.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/integer-type.schema/default/TopLevel.js
index 4fd4f78..124a5d6 100644
--- a/base/schema-flow/test/inputs/schema/integer-type.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/integer-type.schema/default/TopLevel.js
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/intersection-nested.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/intersection-nested.schema/default/TopLevel.js
index ec13bd5..1f6d2ea 100644
--- a/base/schema-flow/test/inputs/schema/intersection-nested.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/intersection-nested.schema/default/TopLevel.js
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/intersection.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/intersection.schema/default/TopLevel.js
index eb28f59..6f84dc8 100644
--- a/base/schema-flow/test/inputs/schema/intersection.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/intersection.schema/default/TopLevel.js
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.js
index dcbd39d..9a2c339 100644
--- a/base/schema-flow/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.js
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/keyword-enum.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
index b853cb3..c207e9f 100644
--- a/base/schema-flow/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
@@ -415,7 +415,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/keyword-unions.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
index e729b45..e440d18 100644
--- a/base/schema-flow/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
@@ -1792,7 +1792,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/light.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/light.schema/default/TopLevel.js
index 595fe3b..d4bd0a4 100644
--- a/base/schema-flow/test/inputs/schema/light.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/light.schema/default/TopLevel.js
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/list.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/list.schema/default/TopLevel.js
index 25a9304..4dc419c 100644
--- a/base/schema-flow/test/inputs/schema/list.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/list.schema/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/min-max-items.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/min-max-items.schema/default/TopLevel.js
index 4e5fae6..6853c06 100644
--- a/base/schema-flow/test/inputs/schema/min-max-items.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/min-max-items.schema/default/TopLevel.js
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/minmax-integer.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/minmax-integer.schema/default/TopLevel.js
index 24d004c..7f1b193 100644
--- a/base/schema-flow/test/inputs/schema/minmax-integer.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/minmax-integer.schema/default/TopLevel.js
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/minmax.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/minmax.schema/default/TopLevel.js
index cb357ab..b9db934 100644
--- a/base/schema-flow/test/inputs/schema/minmax.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/minmax.schema/default/TopLevel.js
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/minmaxlength.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/minmaxlength.schema/default/TopLevel.js
index 47461fb..2c105dc 100644
--- a/base/schema-flow/test/inputs/schema/minmaxlength.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/minmaxlength.schema/default/TopLevel.js
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/multi-type-enum.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/multi-type-enum.schema/default/TopLevel.js
index 1650cb5..ed8de71 100644
--- a/base/schema-flow/test/inputs/schema/multi-type-enum.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/multi-type-enum.schema/default/TopLevel.js
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/mutually-recursive.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/mutually-recursive.schema/default/TopLevel.js
index 4adc3aa..ec6f3b6 100644
--- a/base/schema-flow/test/inputs/schema/mutually-recursive.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/mutually-recursive.schema/default/TopLevel.js
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.js
index 30b98a7..acf4266 100644
--- a/base/schema-flow/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.js
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/non-standard-ref.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/non-standard-ref.schema/default/TopLevel.js
index 4418b17..a7e0805 100644
--- a/base/schema-flow/test/inputs/schema/non-standard-ref.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/non-standard-ref.schema/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.js
index 41cfef5..6bcb6b6 100644
--- a/base/schema-flow/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.js
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/object-type-required.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/object-type-required.schema/default/TopLevel.js
index 84180ae..d201ab6 100644
--- a/base/schema-flow/test/inputs/schema/object-type-required.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/object-type-required.schema/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/optional-any.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/optional-any.schema/default/TopLevel.js
index e253b10..a00eb46 100644
--- a/base/schema-flow/test/inputs/schema/optional-any.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/optional-any.schema/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/optional-const-ref.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/optional-const-ref.schema/default/TopLevel.js
index 63da65e..82516b7 100644
--- a/base/schema-flow/test/inputs/schema/optional-const-ref.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/optional-const-ref.schema/default/TopLevel.js
@@ -146,7 +146,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/optional-constraints.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/optional-constraints.schema/default/TopLevel.js
index 74a9b1d..b842458 100644
--- a/base/schema-flow/test/inputs/schema/optional-constraints.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/optional-constraints.schema/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/optional-date-time.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/optional-date-time.schema/default/TopLevel.js
index abd5fa5..6768c4f 100644
--- a/base/schema-flow/test/inputs/schema/optional-date-time.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/optional-date-time.schema/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/optional-enum.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/optional-enum.schema/default/TopLevel.js
index 3f9a7de..6801fec 100644
--- a/base/schema-flow/test/inputs/schema/optional-enum.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/optional-enum.schema/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/pattern.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/pattern.schema/default/TopLevel.js
index be048e5..6d97539 100644
--- a/base/schema-flow/test/inputs/schema/pattern.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/pattern.schema/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/postman-collection.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/postman-collection.schema/default/TopLevel.js
index 6f9782c..fccf8dc 100644
--- a/base/schema-flow/test/inputs/schema/postman-collection.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/postman-collection.schema/default/TopLevel.js
@@ -146,7 +146,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/prefix-items.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/prefix-items.schema/default/TopLevel.js
index 38b8ba6..e95f56b 100644
--- a/base/schema-flow/test/inputs/schema/prefix-items.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/prefix-items.schema/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.js
index 39251ea..c162621 100644
--- a/base/schema-flow/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.js
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/ref-id-files.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/ref-id-files.schema/default/TopLevel.js
index ca769c1..5fc62ff 100644
--- a/base/schema-flow/test/inputs/schema/ref-id-files.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/ref-id-files.schema/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/ref-remote.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/ref-remote.schema/default/TopLevel.js
index 25a9304..4dc419c 100644
--- a/base/schema-flow/test/inputs/schema/ref-remote.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/ref-remote.schema/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/renaming-bug.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/renaming-bug.schema/default/TopLevel.js
index 7435250..bade79e 100644
--- a/base/schema-flow/test/inputs/schema/renaming-bug.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/renaming-bug.schema/default/TopLevel.js
@@ -238,7 +238,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/required-draft3.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/required-draft3.schema/default/TopLevel.js
index 96ddcbf..913f9ee 100644
--- a/base/schema-flow/test/inputs/schema/required-draft3.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/required-draft3.schema/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/required-non-properties.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/required-non-properties.schema/default/TopLevel.js
index ee3c8dd..c43feb9 100644
--- a/base/schema-flow/test/inputs/schema/required-non-properties.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/required-non-properties.schema/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/required.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/required.schema/default/TopLevel.js
index 96ddcbf..913f9ee 100644
--- a/base/schema-flow/test/inputs/schema/required.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/required.schema/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.js
index d7819a5..46a8876 100644
--- a/base/schema-flow/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.js
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/schema-constraints.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/schema-constraints.schema/default/TopLevel.js
index af326f0..22a906a 100644
--- a/base/schema-flow/test/inputs/schema/schema-constraints.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/schema-constraints.schema/default/TopLevel.js
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/simple-ref.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/simple-ref.schema/default/TopLevel.js
index 25a9304..4dc419c 100644
--- a/base/schema-flow/test/inputs/schema/simple-ref.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/simple-ref.schema/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/strict-optional.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/strict-optional.schema/default/TopLevel.js
index 3a28b9f..792e8fe 100644
--- a/base/schema-flow/test/inputs/schema/strict-optional.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/strict-optional.schema/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/top-level-array.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/top-level-array.schema/default/TopLevel.js
index d193cef..f8415a8 100644
--- a/base/schema-flow/test/inputs/schema/top-level-array.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/top-level-array.schema/default/TopLevel.js
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/top-level-enum.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/top-level-enum.schema/default/TopLevel.js
index f0c1e9a..d58515e 100644
--- a/base/schema-flow/test/inputs/schema/top-level-enum.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/top-level-enum.schema/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.js
index 16d93a7..c079e36 100644
--- a/base/schema-flow/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.js
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/top-level-primitive.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/top-level-primitive.schema/default/TopLevel.js
index 2a48909..3a2b495 100644
--- a/base/schema-flow/test/inputs/schema/top-level-primitive.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/top-level-primitive.schema/default/TopLevel.js
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/tuple.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/tuple.schema/default/TopLevel.js
index 60f826e..b5722b3 100644
--- a/base/schema-flow/test/inputs/schema/tuple.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/tuple.schema/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.js
index 41b3b6b..2e7b122 100644
--- a/base/schema-flow/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.js
@@ -154,7 +154,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/union-int-double.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/union-int-double.schema/default/TopLevel.js
index 98beb06..2968d01 100644
--- a/base/schema-flow/test/inputs/schema/union-int-double.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/union-int-double.schema/default/TopLevel.js
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/union-list.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/union-list.schema/default/TopLevel.js
index 15dfd79..123512a 100644
--- a/base/schema-flow/test/inputs/schema/union-list.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/union-list.schema/default/TopLevel.js
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/union.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/union.schema/default/TopLevel.js
index 34fccb4..29cc42f 100644
--- a/base/schema-flow/test/inputs/schema/union.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/union.schema/default/TopLevel.js
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/uuid.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/uuid.schema/default/TopLevel.js
index 48e0c05..e9f588a 100644
--- a/base/schema-flow/test/inputs/schema/uuid.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/uuid.schema/default/TopLevel.js
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-flow/test/inputs/schema/vega-lite.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/vega-lite.schema/default/TopLevel.js
index 133a1ea..ac8d948 100644
--- a/base/schema-flow/test/inputs/schema/vega-lite.schema/default/TopLevel.js
+++ b/head/schema-flow/test/inputs/schema/vega-lite.schema/default/TopLevel.js
@@ -6227,7 +6227,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/schema-golang/test/inputs/schema/fractional-bounds.schema/default/quicktype.go b/head/schema-golang/test/inputs/schema/fractional-bounds.schema/default/quicktype.go
new file mode 100644
index 0000000..b4c90cc
--- /dev/null
+++ b/head/schema-golang/test/inputs/schema/fractional-bounds.schema/default/quicktype.go
@@ -0,0 +1,23 @@
+// Code generated from JSON Schema using quicktype. DO NOT EDIT.
+// To parse and unparse this JSON data, add this code to your project and do:
+//
+//    topLevel, err := UnmarshalTopLevel(bytes)
+//    bytes, err = topLevel.Marshal()
+
+package main
+
+import "encoding/json"
+
+func UnmarshalTopLevel(data []byte) (TopLevel, error) {
+	var r TopLevel
+	err := json.Unmarshal(data, &r)
+	return r, err
+}
+
+func (r *TopLevel) Marshal() ([]byte, error) {
+	return json.Marshal(r)
+}
+
+type TopLevel struct {
+	Value float64 `json:"value"`
+}
diff --git a/head/schema-haskell/test/inputs/schema/fractional-bounds.schema/default/QuickType.hs b/head/schema-haskell/test/inputs/schema/fractional-bounds.schema/default/QuickType.hs
new file mode 100644
index 0000000..c55c2fd
--- /dev/null
+++ b/head/schema-haskell/test/inputs/schema/fractional-bounds.schema/default/QuickType.hs
@@ -0,0 +1,30 @@
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module QuickType
+    ( QuickType (..)
+    , decodeTopLevel
+    ) where
+
+import Data.Aeson
+import Data.Aeson.Types (emptyObject)
+import Data.ByteString.Lazy (ByteString)
+import Data.HashMap.Strict (HashMap)
+import Data.Text (Text)
+
+data QuickType = QuickType
+    { valueQuickType :: Double
+    } deriving (Show)
+
+decodeTopLevel :: ByteString -> Maybe QuickType
+decodeTopLevel = decode
+
+instance ToJSON QuickType where
+    toJSON (QuickType valueQuickType) =
+        object
+        [ "value" .= valueQuickType
+        ]
+
+instance FromJSON QuickType where
+    parseJSON (Object v) = QuickType
+        <$> v .: "value"
diff --git a/head/schema-java/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/Converter.java b/head/schema-java/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/Converter.java
new file mode 100644
index 0000000..cf0c886
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/Converter.java
@@ -0,0 +1,102 @@
+// To use this code, add the following Maven dependency to your project:
+//
+//
+//     com.fasterxml.jackson.core     : jackson-databind          : 2.9.0
+//     com.fasterxml.jackson.datatype : jackson-datatype-jsr310   : 2.9.0
+//
+// Import this package:
+//
+//     import io.quicktype.Converter;
+//
+// Then you can deserialize a JSON string with
+//
+//     TopLevel data = Converter.fromJsonString(jsonString);
+
+package io.quicktype;
+
+import java.io.IOException;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import java.util.*;
+import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
+import java.time.temporal.ChronoField;
+
+public class Converter {
+    // Date-time helpers
+
+    private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()
+            .appendOptional(DateTimeFormatter.ISO_DATE_TIME)
+            .appendOptional(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
+            .appendOptional(DateTimeFormatter.ISO_INSTANT)
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SX"))
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssX"))
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
+            .toFormatter()
+            .withZone(ZoneOffset.UTC);
+
+    public static OffsetDateTime parseDateTimeString(String str) {
+        return ZonedDateTime.from(Converter.DATE_TIME_FORMATTER.parse(str)).toOffsetDateTime();
+    }
+
+    private static final DateTimeFormatter TIME_FORMATTER = new DateTimeFormatterBuilder()
+            .appendOptional(DateTimeFormatter.ISO_TIME)
+            .appendOptional(DateTimeFormatter.ISO_OFFSET_TIME)
+            .parseDefaulting(ChronoField.YEAR, 2020)
+            .parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
+            .parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
+            .toFormatter()
+            .withZone(ZoneOffset.UTC);
+
+    public static OffsetTime parseTimeString(String str) {
+        return ZonedDateTime.from(Converter.TIME_FORMATTER.parse(str)).toOffsetDateTime().toOffsetTime();
+    }
+    // Serialize/deserialize helpers
+
+    public static TopLevel fromJsonString(String json) throws IOException {
+        return getObjectReader().readValue(json);
+    }
+
+    public static String toJsonString(TopLevel obj) throws JsonProcessingException {
+        return getObjectWriter().writeValueAsString(obj);
+    }
+
+    private static ObjectReader reader;
+    private static ObjectWriter writer;
+
+    private static void instantiateMapper() {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.findAndRegisterModules();
+        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+        SimpleModule module = new SimpleModule();
+        module.addDeserializer(OffsetDateTime.class, new JsonDeserializer<OffsetDateTime>() {
+            @Override
+            public OffsetDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+                String value = jsonParser.getText();
+                return Converter.parseDateTimeString(value);
+            }
+        });
+        mapper.registerModule(module);
+        reader = mapper.readerFor(TopLevel.class);
+        writer = mapper.writerFor(TopLevel.class);
+    }
+
+    private static ObjectReader getObjectReader() {
+        if (reader == null) instantiateMapper();
+        return reader;
+    }
+
+    private static ObjectWriter getObjectWriter() {
+        if (writer == null) instantiateMapper();
+        return writer;
+    }
+}
diff --git a/head/schema-java/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/TopLevel.java b/head/schema-java/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/TopLevel.java
new file mode 100644
index 0000000..e9cf315
--- /dev/null
+++ b/head/schema-java/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/TopLevel.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class TopLevel {
+    private double value;
+
+    @JsonProperty("value")
+    public double getValue() { return value; }
+    @JsonProperty("value")
+    public void setValue(double value) { this.value = value; }
+}
diff --git a/head/schema-java-datetime-legacy/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/Converter.java b/head/schema-java-datetime-legacy/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/Converter.java
new file mode 100644
index 0000000..322888e
--- /dev/null
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/Converter.java
@@ -0,0 +1,123 @@
+// To use this code, add the following Maven dependency to your project:
+//
+//
+//     com.fasterxml.jackson.core     : jackson-databind          : 2.9.0
+//
+//
+// Import this package:
+//
+//     import io.quicktype.Converter;
+//
+// Then you can deserialize a JSON string with
+//
+//     TopLevel data = Converter.fromJsonString(jsonString);
+
+package io.quicktype;
+
+import java.io.IOException;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import java.util.*;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+
+public class Converter {
+    // Date-time helpers
+
+    private static final String[] DATE_TIME_FORMATS = {
+            "yyyy-MM-dd'T'HH:mm:ss.SX",
+            "yyyy-MM-dd'T'HH:mm:ss.S",
+            "yyyy-MM-dd'T'HH:mm:ssX",
+            "yyyy-MM-dd'T'HH:mm:ss",
+            "yyyy-MM-dd HH:mm:ss.SX",
+            "yyyy-MM-dd HH:mm:ss.S",
+            "yyyy-MM-dd HH:mm:ssX",
+            "yyyy-MM-dd HH:mm:ss",
+            "HH:mm:ss.SZ",
+            "HH:mm:ss.S",
+            "HH:mm:ssZ",
+            "HH:mm:ss",
+            "yyyy-MM-dd",
+    };
+
+    public static Date parseAllDateTimeString(String str) {
+        str = str.replaceFirst("(\\.\\d{3})\\d+", "$1");
+        for (String format : DATE_TIME_FORMATS) {
+            try {
+                return new SimpleDateFormat(format).parse(str);
+            } catch (Exception ex) {
+                // Ignored
+            }
+        }
+        return null;
+    }
+
+    public static String serializeDateTime(Date datetime) {
+        return new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ssZ").format(datetime);
+    }
+
+    public static String serializeDate(Date datetime) {
+        return new SimpleDateFormat("yyyy-MM-dd").format(datetime);
+    }
+
+    public static String serializeTime(Date datetime) {
+        return new SimpleDateFormat("hh:mm:ssZ").format(datetime);
+    }
+    // Serialize/deserialize helpers
+
+    public static TopLevel fromJsonString(String json) throws IOException {
+        return getObjectReader().readValue(json);
+    }
+
+    public static String toJsonString(TopLevel obj) throws JsonProcessingException {
+        return getObjectWriter().writeValueAsString(obj);
+    }
+
+    private static ObjectReader reader;
+    private static ObjectWriter writer;
+
+    private static void instantiateMapper() {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.findAndRegisterModules();
+        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+        SimpleModule module = new SimpleModule();
+        module.addDeserializer(Date.class, new JsonDeserializer<Date>() {
+            @Override
+            public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+                String value = jsonParser.getText();
+                return Converter.parseAllDateTimeString(value);
+            }
+        });
+        module.addDeserializer(Date.class, new JsonDeserializer<Date>() {
+            @Override
+            public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+                String value = jsonParser.getText();
+                return Converter.parseAllDateTimeString(value);
+            }
+        });
+        module.addDeserializer(Date.class, new JsonDeserializer<Date>() {
+            @Override
+            public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+                String value = jsonParser.getText();
+                return Converter.parseAllDateTimeString(value);
+            }
+        });
+        mapper.registerModule(module);
+        reader = mapper.readerFor(TopLevel.class);
+        writer = mapper.writerFor(TopLevel.class);
+    }
+
+    private static ObjectReader getObjectReader() {
+        if (reader == null) instantiateMapper();
+        return reader;
+    }
+
+    private static ObjectWriter getObjectWriter() {
+        if (writer == null) instantiateMapper();
+        return writer;
+    }
+}
diff --git a/head/schema-java-datetime-legacy/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/TopLevel.java b/head/schema-java-datetime-legacy/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/TopLevel.java
new file mode 100644
index 0000000..e9cf315
--- /dev/null
+++ b/head/schema-java-datetime-legacy/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/TopLevel.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class TopLevel {
+    private double value;
+
+    @JsonProperty("value")
+    public double getValue() { return value; }
+    @JsonProperty("value")
+    public void setValue(double value) { this.value = value; }
+}
diff --git a/head/schema-java-lombok/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/Converter.java b/head/schema-java-lombok/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/Converter.java
new file mode 100644
index 0000000..cf0c886
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/Converter.java
@@ -0,0 +1,102 @@
+// To use this code, add the following Maven dependency to your project:
+//
+//
+//     com.fasterxml.jackson.core     : jackson-databind          : 2.9.0
+//     com.fasterxml.jackson.datatype : jackson-datatype-jsr310   : 2.9.0
+//
+// Import this package:
+//
+//     import io.quicktype.Converter;
+//
+// Then you can deserialize a JSON string with
+//
+//     TopLevel data = Converter.fromJsonString(jsonString);
+
+package io.quicktype;
+
+import java.io.IOException;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import java.util.*;
+import java.time.LocalDate;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
+import java.time.temporal.ChronoField;
+
+public class Converter {
+    // Date-time helpers
+
+    private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()
+            .appendOptional(DateTimeFormatter.ISO_DATE_TIME)
+            .appendOptional(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
+            .appendOptional(DateTimeFormatter.ISO_INSTANT)
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SX"))
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssX"))
+            .appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
+            .toFormatter()
+            .withZone(ZoneOffset.UTC);
+
+    public static OffsetDateTime parseDateTimeString(String str) {
+        return ZonedDateTime.from(Converter.DATE_TIME_FORMATTER.parse(str)).toOffsetDateTime();
+    }
+
+    private static final DateTimeFormatter TIME_FORMATTER = new DateTimeFormatterBuilder()
+            .appendOptional(DateTimeFormatter.ISO_TIME)
+            .appendOptional(DateTimeFormatter.ISO_OFFSET_TIME)
+            .parseDefaulting(ChronoField.YEAR, 2020)
+            .parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
+            .parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
+            .toFormatter()
+            .withZone(ZoneOffset.UTC);
+
+    public static OffsetTime parseTimeString(String str) {
+        return ZonedDateTime.from(Converter.TIME_FORMATTER.parse(str)).toOffsetDateTime().toOffsetTime();
+    }
+    // Serialize/deserialize helpers
+
+    public static TopLevel fromJsonString(String json) throws IOException {
+        return getObjectReader().readValue(json);
+    }
+
+    public static String toJsonString(TopLevel obj) throws JsonProcessingException {
+        return getObjectWriter().writeValueAsString(obj);
+    }
+
+    private static ObjectReader reader;
+    private static ObjectWriter writer;
+
+    private static void instantiateMapper() {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.findAndRegisterModules();
+        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+        SimpleModule module = new SimpleModule();
+        module.addDeserializer(OffsetDateTime.class, new JsonDeserializer<OffsetDateTime>() {
+            @Override
+            public OffsetDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+                String value = jsonParser.getText();
+                return Converter.parseDateTimeString(value);
+            }
+        });
+        mapper.registerModule(module);
+        reader = mapper.readerFor(TopLevel.class);
+        writer = mapper.writerFor(TopLevel.class);
+    }
+
+    private static ObjectReader getObjectReader() {
+        if (reader == null) instantiateMapper();
+        return reader;
+    }
+
+    private static ObjectWriter getObjectWriter() {
+        if (writer == null) instantiateMapper();
+        return writer;
+    }
+}
diff --git a/head/schema-java-lombok/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/TopLevel.java b/head/schema-java-lombok/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/TopLevel.java
new file mode 100644
index 0000000..e9cf315
--- /dev/null
+++ b/head/schema-java-lombok/test/inputs/schema/fractional-bounds.schema/default/src/main/java/io/quicktype/TopLevel.java
@@ -0,0 +1,12 @@
+package io.quicktype;
+
+import com.fasterxml.jackson.annotation.*;
+
+public class TopLevel {
+    private double value;
+
+    @JsonProperty("value")
+    public double getValue() { return value; }
+    @JsonProperty("value")
+    public void setValue(double value) { this.value = value; }
+}
diff --git a/head/schema-javascript/test/inputs/regressions/unicode-codepoint-length.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/regressions/unicode-codepoint-length.schema/default/TopLevel.js
new file mode 100644
index 0000000..e0d37ac
--- /dev/null
+++ b/head/schema-javascript/test/inputs/regressions/unicode-codepoint-length.schema/default/TopLevel.js
@@ -0,0 +1,205 @@
+// To parse this data:
+//
+//   const Convert = require("./TopLevel");
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+function toTopLevel(json) {
+    return cast(JSON.parse(json), r("TopLevel"));
+}
+
+function topLevelToJson(value) {
+    return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+}
+
+function invalidValue(typ, val, key, parent = '') {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ) {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ) {
+    if (typ.jsonToJS === undefined) {
+        const map = {};
+        typ.props.forEach((p) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ) {
+    if (typ.jsToJSON === undefined) {
+        const map = {};
+        typ.props.forEach((p) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val, typ, getProps, key = '', parent = '') {
+    function transformPrimitive(typ, val) {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs, val) {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases, val) {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ, val) {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val) {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props, additional, val) {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast(val, typ) {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast(val, typ) {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ) {
+    return { literal: typ };
+}
+
+function a(typ) {
+    return { arrayItems: typ };
+}
+
+function i(typ) {
+    return { integer: typ };
+}
+
+function p(pattern) {
+    return { pattern };
+}
+
+function s(typ, min, max) {
+    return { string: typ, min, max };
+}
+
+function n(typ, min, max) {
+    return { number: typ, min, max };
+}
+
+function u(...typs) {
+    return { unionMembers: typs };
+}
+
+function o(props, additional) {
+    return { props, additional };
+}
+
+function m(additional) {
+    const props = [];
+    return { props, additional };
+}
+
+function r(name) {
+    return { ref: name };
+}
+
+const typeMap = {
+    "TopLevel": o([
+        { json: "exact", js: "exact", typ: s(p("^[^!]+$"), 2, 2) },
+        { json: "maximum", js: "maximum", typ: s("", undefined, 1) },
+        { json: "minimum", js: "minimum", typ: s("", 2, undefined) },
+    ], "any"),
+};
+
+module.exports = {
+    "topLevelToJson": topLevelToJson,
+    "toTopLevel": toTopLevel,
+};
diff --git a/base/schema-javascript/test/inputs/schema/accessors.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/accessors.schema/default/TopLevel.js
index 5f15379..0cb914d 100644
--- a/base/schema-javascript/test/inputs/schema/accessors.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/accessors.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.js
index 98c3270..a9cfbf1 100644
--- a/base/schema-javascript/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/any.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/any.schema/default/TopLevel.js
index 1c59d58..088188b 100644
--- a/base/schema-javascript/test/inputs/schema/any.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/any.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/bool-string.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/bool-string.schema/default/TopLevel.js
index 1eddf83..88a930f 100644
--- a/base/schema-javascript/test/inputs/schema/bool-string.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/bool-string.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/boolean-subschema.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/boolean-subschema.schema/default/TopLevel.js
index 77cf532..efd36e2 100644
--- a/base/schema-javascript/test/inputs/schema/boolean-subschema.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/boolean-subschema.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/camelCase.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/camelCase.schema/default/TopLevel.js
index dc9a9ec..56530f7 100644
--- a/base/schema-javascript/test/inputs/schema/camelCase.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/camelCase.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/class-map-union.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/class-map-union.schema/default/TopLevel.js
index d4670ef..c664436 100644
--- a/base/schema-javascript/test/inputs/schema/class-map-union.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/class-map-union.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/class-with-additional.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/class-with-additional.schema/default/TopLevel.js
index 16e823d..fa08e02 100644
--- a/base/schema-javascript/test/inputs/schema/class-with-additional.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/class-with-additional.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.js
index ee321f8..ff00d85 100644
--- a/base/schema-javascript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.js
index ee321f8..ff00d85 100644
--- a/base/schema-javascript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.js
index f7915e9..36492fa 100644
--- a/base/schema-javascript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/comment-injection.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/comment-injection.schema/default/TopLevel.js
index 17ff1d9..3cccccd 100644
--- a/base/schema-javascript/test/inputs/schema/comment-injection.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/comment-injection.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/const-non-string.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/const-non-string.schema/default/TopLevel.js
index 2a58271..caed2d3 100644
--- a/base/schema-javascript/test/inputs/schema/const-non-string.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/const-non-string.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/constructor.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/constructor.schema/default/TopLevel.js
index 0e151d3..b1498fc 100644
--- a/base/schema-javascript/test/inputs/schema/constructor.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/constructor.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/cut-enum.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/cut-enum.schema/default/TopLevel.js
index 63f88bb..dfb07db 100644
--- a/base/schema-javascript/test/inputs/schema/cut-enum.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/cut-enum.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/date-time-or-string.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/date-time-or-string.schema/default/TopLevel.js
index f68579f..740705e 100644
--- a/base/schema-javascript/test/inputs/schema/date-time-or-string.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/date-time-or-string.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/date-time.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/date-time.schema/default/TopLevel.js
index 501f05e..ffd542c 100644
--- a/base/schema-javascript/test/inputs/schema/date-time.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/date-time.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/default-value.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/default-value.schema/default/TopLevel.js
index 1cfdb88..0573d56 100644
--- a/base/schema-javascript/test/inputs/schema/default-value.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/default-value.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.js
index 4ee16bb..fea2e10 100644
--- a/base/schema-javascript/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/description.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/description.schema/default/TopLevel.js
index d415abb..516f737 100644
--- a/base/schema-javascript/test/inputs/schema/description.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/description.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/direct-union.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/direct-union.schema/default/TopLevel.js
index 3060e05..1dc2f29 100644
--- a/base/schema-javascript/test/inputs/schema/direct-union.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/direct-union.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/empty-object.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/empty-object.schema/default/TopLevel.js
index 535c5dd..8622c1b 100644
--- a/base/schema-javascript/test/inputs/schema/empty-object.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/empty-object.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/enum-large.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/enum-large.schema/default/TopLevel.js
index d85c2af..5d86580 100644
--- a/base/schema-javascript/test/inputs/schema/enum-large.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/enum-large.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/enum-with-null.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/enum-with-null.schema/default/TopLevel.js
index f2dd301..6e0665a 100644
--- a/base/schema-javascript/test/inputs/schema/enum-with-null.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/enum-with-null.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/enum-with-values.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/enum-with-values.schema/default/TopLevel.js
index 9c88c9f..df41b06 100644
--- a/base/schema-javascript/test/inputs/schema/enum-with-values.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/enum-with-values.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/enum.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/enum.schema/default/TopLevel.js
index 71bb16c..35015dd 100644
--- a/base/schema-javascript/test/inputs/schema/enum.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/enum.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/schema-javascript/test/inputs/schema/fractional-bounds.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/fractional-bounds.schema/default/TopLevel.js
new file mode 100644
index 0000000..bad58fe
--- /dev/null
+++ b/head/schema-javascript/test/inputs/schema/fractional-bounds.schema/default/TopLevel.js
@@ -0,0 +1,203 @@
+// To parse this data:
+//
+//   const Convert = require("./TopLevel");
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+function toTopLevel(json) {
+    return cast(JSON.parse(json), r("TopLevel"));
+}
+
+function topLevelToJson(value) {
+    return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+}
+
+function invalidValue(typ, val, key, parent = '') {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ) {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ) {
+    if (typ.jsonToJS === undefined) {
+        const map = {};
+        typ.props.forEach((p) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ) {
+    if (typ.jsToJSON === undefined) {
+        const map = {};
+        typ.props.forEach((p) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val, typ, getProps, key = '', parent = '') {
+    function transformPrimitive(typ, val) {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs, val) {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases, val) {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ, val) {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val) {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props, additional, val) {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast(val, typ) {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast(val, typ) {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ) {
+    return { literal: typ };
+}
+
+function a(typ) {
+    return { arrayItems: typ };
+}
+
+function i(typ) {
+    return { integer: typ };
+}
+
+function p(pattern) {
+    return { pattern };
+}
+
+function s(typ, min, max) {
+    return { string: typ, min, max };
+}
+
+function n(typ, min, max) {
+    return { number: typ, min, max };
+}
+
+function u(...typs) {
+    return { unionMembers: typs };
+}
+
+function o(props, additional) {
+    return { props, additional };
+}
+
+function m(additional) {
+    const props = [];
+    return { props, additional };
+}
+
+function r(name) {
+    return { ref: name };
+}
+
+const typeMap = {
+    "TopLevel": o([
+        { json: "value", js: "value", typ: n(3.14, 0.1, 0.9) },
+    ], "any"),
+};
+
+module.exports = {
+    "topLevelToJson": topLevelToJson,
+    "toTopLevel": toTopLevel,
+};
diff --git a/base/schema-javascript/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.js
index 36cc5e7..adca574 100644
--- a/base/schema-javascript/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.js
index d398c9c..7a5e388 100644
--- a/base/schema-javascript/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/id-no-address.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/id-no-address.schema/default/TopLevel.js
index cbc2a13..8760679 100644
--- a/base/schema-javascript/test/inputs/schema/id-no-address.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/id-no-address.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/id-root.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/id-root.schema/default/TopLevel.js
index 35aab9f..9be2181 100644
--- a/base/schema-javascript/test/inputs/schema/id-root.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/id-root.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.js
index b51b74e..41464ae 100644
--- a/base/schema-javascript/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/implicit-all-of.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/implicit-all-of.schema/default/TopLevel.js
index 4bb35ff..7d17b4f 100644
--- a/base/schema-javascript/test/inputs/schema/implicit-all-of.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/implicit-all-of.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.js
index d5a1380..f36c0b2 100644
--- a/base/schema-javascript/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/implicit-one-of.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/implicit-one-of.schema/default/TopLevel.js
index 74ecb2f..93ce7c8 100644
--- a/base/schema-javascript/test/inputs/schema/implicit-one-of.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/implicit-one-of.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/integer-before-number.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/integer-before-number.schema/default/TopLevel.js
index 6a5aba9..7d79664 100644
--- a/base/schema-javascript/test/inputs/schema/integer-before-number.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/integer-before-number.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/integer-float-union.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/integer-float-union.schema/default/TopLevel.js
index cb4c622..cbd7545 100644
--- a/base/schema-javascript/test/inputs/schema/integer-float-union.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/integer-float-union.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/integer-string.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/integer-string.schema/default/TopLevel.js
index d6733bc..81bef49 100644
--- a/base/schema-javascript/test/inputs/schema/integer-string.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/integer-string.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/integer-type.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/integer-type.schema/default/TopLevel.js
index d67f900..539b102 100644
--- a/base/schema-javascript/test/inputs/schema/integer-type.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/integer-type.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/intersection-nested.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/intersection-nested.schema/default/TopLevel.js
index 4eb46cc..870f3aa 100644
--- a/base/schema-javascript/test/inputs/schema/intersection-nested.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/intersection-nested.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/intersection.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/intersection.schema/default/TopLevel.js
index 21093b3..8885187 100644
--- a/base/schema-javascript/test/inputs/schema/intersection.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/intersection.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.js
index bbf1861..ca3c226 100644
--- a/base/schema-javascript/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/keyword-enum.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
index 5cc3c9f..7100f5a 100644
--- a/base/schema-javascript/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/keyword-enum.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/keyword-unions.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
index 9f87186..bbb7038 100644
--- a/base/schema-javascript/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/keyword-unions.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/light.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/light.schema/default/TopLevel.js
index 7ad52b7..650e123 100644
--- a/base/schema-javascript/test/inputs/schema/light.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/light.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/list.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/list.schema/default/TopLevel.js
index a7ce0e8..5bc04a2 100644
--- a/base/schema-javascript/test/inputs/schema/list.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/list.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/min-max-items.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/min-max-items.schema/default/TopLevel.js
index ff895f8..09dcdab 100644
--- a/base/schema-javascript/test/inputs/schema/min-max-items.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/min-max-items.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/minmax-integer.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/minmax-integer.schema/default/TopLevel.js
index 8abc6ff..693b1f1 100644
--- a/base/schema-javascript/test/inputs/schema/minmax-integer.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/minmax-integer.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/minmax.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/minmax.schema/default/TopLevel.js
index 7f107cb..3bf2b38 100644
--- a/base/schema-javascript/test/inputs/schema/minmax.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/minmax.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/minmaxlength.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/minmaxlength.schema/default/TopLevel.js
index db57f2c..b2ce4c6 100644
--- a/base/schema-javascript/test/inputs/schema/minmaxlength.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/minmaxlength.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/multi-type-enum.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/multi-type-enum.schema/default/TopLevel.js
index 2b2b838..aa69a6e 100644
--- a/base/schema-javascript/test/inputs/schema/multi-type-enum.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/multi-type-enum.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/mutually-recursive.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/mutually-recursive.schema/default/TopLevel.js
index 6ecb7c2..6e3b399 100644
--- a/base/schema-javascript/test/inputs/schema/mutually-recursive.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/mutually-recursive.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.js
index e9b3997..8a5c403 100644
--- a/base/schema-javascript/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/non-standard-ref.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/non-standard-ref.schema/default/TopLevel.js
index 2c06c09..d7bfad7 100644
--- a/base/schema-javascript/test/inputs/schema/non-standard-ref.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/non-standard-ref.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.js
index 3172159..9a164d3 100644
--- a/base/schema-javascript/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/object-type-required.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/object-type-required.schema/default/TopLevel.js
index 5fea6e3..66b914a 100644
--- a/base/schema-javascript/test/inputs/schema/object-type-required.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/object-type-required.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/optional-any.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/optional-any.schema/default/TopLevel.js
index b9732fd..8b8c8db 100644
--- a/base/schema-javascript/test/inputs/schema/optional-any.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/optional-any.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/optional-const-ref.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/optional-const-ref.schema/default/TopLevel.js
index 8f8a942..428a0ed 100644
--- a/base/schema-javascript/test/inputs/schema/optional-const-ref.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/optional-const-ref.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/optional-constraints.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/optional-constraints.schema/default/TopLevel.js
index 67b390c..ce5bc95 100644
--- a/base/schema-javascript/test/inputs/schema/optional-constraints.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/optional-constraints.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/optional-date-time.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/optional-date-time.schema/default/TopLevel.js
index 94e885b..f69cac9 100644
--- a/base/schema-javascript/test/inputs/schema/optional-date-time.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/optional-date-time.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/optional-enum.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/optional-enum.schema/default/TopLevel.js
index 9da47a0..208a938 100644
--- a/base/schema-javascript/test/inputs/schema/optional-enum.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/optional-enum.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/pattern.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/pattern.schema/default/TopLevel.js
index 9d8cfb7..54c997d 100644
--- a/base/schema-javascript/test/inputs/schema/pattern.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/pattern.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/postman-collection.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/postman-collection.schema/default/TopLevel.js
index eae3943..8d69356 100644
--- a/base/schema-javascript/test/inputs/schema/postman-collection.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/postman-collection.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/prefix-items.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/prefix-items.schema/default/TopLevel.js
index 5ce6aaa..b17b3dd 100644
--- a/base/schema-javascript/test/inputs/schema/prefix-items.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/prefix-items.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.js
index 99614e6..ae82160 100644
--- a/base/schema-javascript/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/ref-id-files.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/ref-id-files.schema/default/TopLevel.js
index 63f88bb..dfb07db 100644
--- a/base/schema-javascript/test/inputs/schema/ref-id-files.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/ref-id-files.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/ref-remote.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/ref-remote.schema/default/TopLevel.js
index a7ce0e8..5bc04a2 100644
--- a/base/schema-javascript/test/inputs/schema/ref-remote.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/ref-remote.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/renaming-bug.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/renaming-bug.schema/default/TopLevel.js
index 5bb03ac..c249f53 100644
--- a/base/schema-javascript/test/inputs/schema/renaming-bug.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/renaming-bug.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/required-draft3.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/required-draft3.schema/default/TopLevel.js
index a77161c..c56b57d 100644
--- a/base/schema-javascript/test/inputs/schema/required-draft3.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/required-draft3.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/required-non-properties.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/required-non-properties.schema/default/TopLevel.js
index e62f270..ed85f72 100644
--- a/base/schema-javascript/test/inputs/schema/required-non-properties.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/required-non-properties.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/required.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/required.schema/default/TopLevel.js
index a77161c..c56b57d 100644
--- a/base/schema-javascript/test/inputs/schema/required.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/required.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.js
index f8c8b0b..3db51f3 100644
--- a/base/schema-javascript/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/schema-constraints.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/schema-constraints.schema/default/TopLevel.js
index 1866d52..41e9d6f 100644
--- a/base/schema-javascript/test/inputs/schema/schema-constraints.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/schema-constraints.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/simple-ref.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/simple-ref.schema/default/TopLevel.js
index a7ce0e8..5bc04a2 100644
--- a/base/schema-javascript/test/inputs/schema/simple-ref.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/simple-ref.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/strict-optional.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/strict-optional.schema/default/TopLevel.js
index 9a0dbcd..ada09da 100644
--- a/base/schema-javascript/test/inputs/schema/strict-optional.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/strict-optional.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/top-level-array.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/top-level-array.schema/default/TopLevel.js
index 0dd544b..2d9a11d 100644
--- a/base/schema-javascript/test/inputs/schema/top-level-array.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/top-level-array.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/top-level-enum.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/top-level-enum.schema/default/TopLevel.js
index f322489..efbe789 100644
--- a/base/schema-javascript/test/inputs/schema/top-level-enum.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/top-level-enum.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.js
index 0cb245a..0b34916 100644
--- a/base/schema-javascript/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/top-level-primitive.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/top-level-primitive.schema/default/TopLevel.js
index e86ff20..6723f68 100644
--- a/base/schema-javascript/test/inputs/schema/top-level-primitive.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/top-level-primitive.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/tuple.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/tuple.schema/default/TopLevel.js
index f858196..3fc8e90 100644
--- a/base/schema-javascript/test/inputs/schema/tuple.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/tuple.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.js
index 43b4f8a..f4f135f 100644
--- a/base/schema-javascript/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/union-int-double.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/union-int-double.schema/default/TopLevel.js
index 54a8fdb..500c569 100644
--- a/base/schema-javascript/test/inputs/schema/union-int-double.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/union-int-double.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/union-list.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/union-list.schema/default/TopLevel.js
index 627fcaf..9eca1b5 100644
--- a/base/schema-javascript/test/inputs/schema/union-list.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/union-list.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/union.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/union.schema/default/TopLevel.js
index 61a950b..e6a3677 100644
--- a/base/schema-javascript/test/inputs/schema/union.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/union.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/uuid.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/uuid.schema/default/TopLevel.js
index 8b769d2..f34be5e 100644
--- a/base/schema-javascript/test/inputs/schema/uuid.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/uuid.schema/default/TopLevel.js
@@ -130,7 +130,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-javascript/test/inputs/schema/vega-lite.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/vega-lite.schema/default/TopLevel.js
index 2ab3dc9..5762a17 100644
--- a/base/schema-javascript/test/inputs/schema/vega-lite.schema/default/TopLevel.js
+++ b/head/schema-javascript/test/inputs/schema/vega-lite.schema/default/TopLevel.js
@@ -129,7 +129,7 @@ function transform(val, typ, getProps, key = '', parent = '') {
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/schema-javascript-prop-types/test/inputs/schema/fractional-bounds.schema/default/toplevel.js b/head/schema-javascript-prop-types/test/inputs/schema/fractional-bounds.schema/default/toplevel.js
new file mode 100644
index 0000000..6ad6164
--- /dev/null
+++ b/head/schema-javascript-prop-types/test/inputs/schema/fractional-bounds.schema/default/toplevel.js
@@ -0,0 +1,20 @@
+// Example usage:
+//
+// import { MyShape } from ./myShape.js;
+//
+// class MyComponent extends React.Component {
+//   //
+// }
+//
+// MyComponent.propTypes = {
+//   input: MyShape
+// };
+
+import PropTypes from "prop-types";
+
+let _TopLevel;
+_TopLevel = PropTypes.shape({
+    "value": PropTypes.oneOfType([(props, name) => { const value = props[name]; return value == null || (typeof value === 'number' && value >= 0.1 && value <= 0.9) ? null : new Error("Expected bounded number"); }]).isRequired,
+});
+
+export const TopLevel = _TopLevel;
diff --git a/head/schema-kotlin/test/inputs/schema/fractional-bounds.schema/default/TopLevel.kt b/head/schema-kotlin/test/inputs/schema/fractional-bounds.schema/default/TopLevel.kt
new file mode 100644
index 0000000..c18e4b4
--- /dev/null
+++ b/head/schema-kotlin/test/inputs/schema/fractional-bounds.schema/default/TopLevel.kt
@@ -0,0 +1,25 @@
+// To parse the JSON, install Klaxon and do:
+//
+//   val topLevel = TopLevel.fromJson(jsonString)
+
+package quicktype
+
+import com.beust.klaxon.*
+
+private val klaxon = Klaxon()
+
+data class TopLevel (
+    val value: Double
+) {
+    init {
+        require(value >= 0.1)
+    }
+    init {
+        require(value <= 0.9)
+    }
+    public fun toJson() = klaxon.toJsonString(this)
+
+    companion object {
+        public fun fromJson(json: String) = klaxon.parse<TopLevel>(json)
+    }
+}
diff --git a/head/schema-kotlin-jackson/test/inputs/schema/fractional-bounds.schema/default/TopLevel.kt b/head/schema-kotlin-jackson/test/inputs/schema/fractional-bounds.schema/default/TopLevel.kt
new file mode 100644
index 0000000..8e3702e
--- /dev/null
+++ b/head/schema-kotlin-jackson/test/inputs/schema/fractional-bounds.schema/default/TopLevel.kt
@@ -0,0 +1,34 @@
+// To parse the JSON, install jackson-module-kotlin and do:
+//
+//   val topLevel = TopLevel.fromJson(jsonString)
+
+package quicktype
+
+import com.fasterxml.jackson.annotation.*
+import com.fasterxml.jackson.core.*
+import com.fasterxml.jackson.databind.*
+import com.fasterxml.jackson.databind.deser.std.StdDeserializer
+import com.fasterxml.jackson.databind.module.SimpleModule
+import com.fasterxml.jackson.databind.node.*
+import com.fasterxml.jackson.databind.ser.std.StdSerializer
+import com.fasterxml.jackson.module.kotlin.*
+
+val mapper = jacksonObjectMapper().apply {
+    propertyNamingStrategy = object : PropertyNamingStrategy.PropertyNamingStrategyBase() { override fun translate(name: String) = if (name == "empty") "" else name }
+    setSerializationInclusion(JsonInclude.Include.NON_NULL)
+}
+
+data class TopLevel (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val value: Double
+) {
+    init {
+        require(value >= 0.1)
+        require(value <= 0.9)
+    }
+    fun toJson() = mapper.writeValueAsString(this)
+
+    companion object {
+        fun fromJson(json: String) = mapper.readValue<TopLevel>(json)
+    }
+}
diff --git a/head/schema-kotlinx/test/inputs/schema/fractional-bounds.schema/default/TopLevel.kt b/head/schema-kotlinx/test/inputs/schema/fractional-bounds.schema/default/TopLevel.kt
new file mode 100644
index 0000000..a8c2b98
--- /dev/null
+++ b/head/schema-kotlinx/test/inputs/schema/fractional-bounds.schema/default/TopLevel.kt
@@ -0,0 +1,16 @@
+// To parse the JSON, install kotlin's serialization plugin and do:
+//
+// val json     = Json { allowStructuredMapKeys = true }
+// val topLevel = json.parse(TopLevel.serializer(), jsonString)
+
+package quicktype
+
+import kotlinx.serialization.*
+import kotlinx.serialization.json.*
+import kotlinx.serialization.descriptors.*
+import kotlinx.serialization.encoding.*
+
+@Serializable
+data class TopLevel (
+    val value: Double
+)
diff --git a/head/schema-objective-c/test/inputs/schema/fractional-bounds.schema/default/QTTopLevel.h b/head/schema-objective-c/test/inputs/schema/fractional-bounds.schema/default/QTTopLevel.h
new file mode 100644
index 0000000..7c48071
--- /dev/null
+++ b/head/schema-objective-c/test/inputs/schema/fractional-bounds.schema/default/QTTopLevel.h
@@ -0,0 +1,30 @@
+// To parse this JSON:
+//
+//   NSError *error;
+//   QTTopLevel *topLevel = [QTTopLevel fromJSON:json encoding:NSUTF8Encoding error:&error];
+
+#import <Foundation/Foundation.h>
+
+@class QTTopLevel;
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark - Top-level marshaling functions
+
+QTTopLevel *_Nullable QTTopLevelFromData(NSData *data, NSError **error);
+QTTopLevel *_Nullable QTTopLevelFromJSON(NSString *json, NSStringEncoding encoding, NSError **error);
+NSData     *_Nullable QTTopLevelToData(QTTopLevel *topLevel, NSError **error);
+NSString   *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding encoding, NSError **error);
+
+#pragma mark - Object interfaces
+
+@interface QTTopLevel : NSObject
+@property (nonatomic, assign) double value;
+
++ (_Nullable instancetype)fromJSON:(NSString *)json encoding:(NSStringEncoding)encoding error:(NSError *_Nullable *)error;
++ (_Nullable instancetype)fromData:(NSData *)data error:(NSError *_Nullable *)error;
+- (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error;
+- (NSData *_Nullable)toData:(NSError *_Nullable *)error;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/head/schema-objective-c/test/inputs/schema/fractional-bounds.schema/default/QTTopLevel.m b/head/schema-objective-c/test/inputs/schema/fractional-bounds.schema/default/QTTopLevel.m
new file mode 100644
index 0000000..d3ea0b7
--- /dev/null
+++ b/head/schema-objective-c/test/inputs/schema/fractional-bounds.schema/default/QTTopLevel.m
@@ -0,0 +1,115 @@
+#import "QTTopLevel.h"
+
+#define λ(decl, expr) (^(decl) { return (expr); })
+
+static id NSNullify(id _Nullable x) {
+    return (x == nil || x == NSNull.null) ? NSNull.null : x;
+}
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface QTTopLevel (JSONConversion)
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
+- (NSDictionary *)JSONDictionary;
+@end
+
+#pragma mark - JSON serialization
+
+QTTopLevel *_Nullable QTTopLevelFromData(NSData *data, NSError **error)
+{
+    @try {
+        id json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:error];
+        return *error ? nil : [QTTopLevel fromJSONDictionary:json];
+    } @catch (NSException *exception) {
+        *error = [NSError errorWithDomain:@"JSONSerialization" code:-1 userInfo:@{ @"exception": exception }];
+        return nil;
+    }
+}
+
+QTTopLevel *_Nullable QTTopLevelFromJSON(NSString *json, NSStringEncoding encoding, NSError **error)
+{
+    return QTTopLevelFromData([json dataUsingEncoding:encoding], error);
+}
+
+NSData *_Nullable QTTopLevelToData(QTTopLevel *topLevel, NSError **error)
+{
+    @try {
+        id json = [topLevel JSONDictionary];
+        NSData *data = [NSJSONSerialization dataWithJSONObject:json options:NSJSONWritingFragmentsAllowed error:error];
+        return *error ? nil : data;
+    } @catch (NSException *exception) {
+        *error = [NSError errorWithDomain:@"JSONSerialization" code:-1 userInfo:@{ @"exception": exception }];
+        return nil;
+    }
+}
+
+NSString *_Nullable QTTopLevelToJSON(QTTopLevel *topLevel, NSStringEncoding encoding, NSError **error)
+{
+    NSData *data = QTTopLevelToData(topLevel, error);
+    return data ? [[NSString alloc] initWithData:data encoding:encoding] : nil;
+}
+
+@implementation QTTopLevel
++ (NSDictionary<NSString *, NSString *> *)properties
+{
+    static NSDictionary<NSString *, NSString *> *properties;
+    return properties = properties ? properties : @{
+        @"value": @"value",
+    };
+}
+
++ (_Nullable instancetype)fromData:(NSData *)data error:(NSError *_Nullable *)error
+{
+    return QTTopLevelFromData(data, error);
+}
+
++ (_Nullable instancetype)fromJSON:(NSString *)json encoding:(NSStringEncoding)encoding error:(NSError *_Nullable *)error
+{
+    return QTTopLevelFromJSON(json, encoding, error);
+}
+
++ (instancetype)fromJSONDictionary:(NSDictionary *)dict
+{
+    return [dict isKindOfClass:NSDictionary.class] ? [[QTTopLevel alloc] initWithJSONDictionary:dict] : nil;
+}
+
+- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
+{
+    if (self = [super init]) {
+        if (dict[@"value"] && [dict[@"value"] doubleValue] < 0.1) return nil;
+        if (dict[@"value"] && [dict[@"value"] doubleValue] > 0.9) return nil;
+        if (![dict[@"value"] isKindOfClass:NSNumber.class]) return nil;
+        [self setValuesForKeysWithDictionary:dict];
+    }
+    return self;
+}
+
+- (void)setValue:(nullable id)value forKey:(NSString *)key
+{
+    id resolved = QTTopLevel.properties[key];
+    if (resolved) [super setValue:value forKey:resolved];
+}
+
+- (void)setNilValueForKey:(NSString *)key
+{
+    id resolved = QTTopLevel.properties[key];
+    if (resolved) [super setValue:@(0) forKey:resolved];
+}
+
+- (NSDictionary *)JSONDictionary
+{
+    return [self dictionaryWithValuesForKeys:QTTopLevel.properties.allValues];
+}
+
+- (NSData *_Nullable)toData:(NSError *_Nullable *)error
+{
+    return QTTopLevelToData(self, error);
+}
+
+- (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error
+{
+    return QTTopLevelToJSON(self, encoding, error);
+}
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/head/schema-php/test/inputs/schema/fractional-bounds.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/fractional-bounds.schema/default/TopLevel.php
new file mode 100644
index 0000000..9eb9645
--- /dev/null
+++ b/head/schema-php/test/inputs/schema/fractional-bounds.schema/default/TopLevel.php
@@ -0,0 +1,105 @@
+<?php
+declare(strict_types=1);
+
+// This is an autogenerated file:TopLevel
+
+class TopLevel {
+    private float $value; // json:value Required
+
+    /**
+     * @param float $value
+     */
+    public function __construct(float $value) {
+        $this->value = $value;
+    }
+
+    /**
+     * @param float $value
+     * @throws Exception
+     * @return float
+     */
+    public static function fromValue(float $value): float {
+        return $value; /*float*/
+    }
+
+    /**
+     * @throws Exception
+     * @return float
+     */
+    public function toValue(): float {
+        if (TopLevel::validateValue($this->value))  {
+            return $this->value; /*float*/
+        }
+        throw new Exception('never get to this TopLevel::value');
+    }
+
+    /**
+     * @param float
+     * @return bool
+     * @throws Exception
+     */
+    public static function validateValue(float $value): bool {
+        if ($value < 0.1) throw new Exception("Attribute Error");
+        if ($value > 0.9) throw new Exception("Attribute Error");
+        return true;
+    }
+
+    /**
+     * @throws Exception
+     * @return float
+     */
+    public function getValue(): float {
+        if (TopLevel::validateValue($this->value))  {
+            return $this->value;
+        }
+        throw new Exception('never get to getValue TopLevel::value');
+    }
+
+    /**
+     * @return float
+     */
+    public static function sampleValue(): float {
+        return 31.031; /*31:value*/
+    }
+
+    /**
+     * @throws Exception
+     * @return bool
+     */
+    public function validate(): bool {
+        return TopLevel::validateValue($this->value);
+    }
+
+    /**
+     * @return stdClass
+     * @throws Exception
+     */
+    public function to(): stdClass  {
+        $out = new stdClass();
+        $out->{'value'} = $this->toValue();
+        return $out;
+    }
+
+    /**
+     * @param stdClass $obj
+     * @return TopLevel
+     * @throws Exception
+     */
+    public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
+        return new TopLevel(
+         TopLevel::fromValue($obj->{'value'})
+        );
+    }
+
+    /**
+     * @return TopLevel
+     */
+    public static function sample(): TopLevel {
+        return new TopLevel(
+         TopLevel::sampleValue()
+        );
+    }
+}
diff --git a/head/schema-pike/test/inputs/schema/fractional-bounds.schema/default/TopLevel.pmod b/head/schema-pike/test/inputs/schema/fractional-bounds.schema/default/TopLevel.pmod
new file mode 100644
index 0000000..89f0dcb
--- /dev/null
+++ b/head/schema-pike/test/inputs/schema/fractional-bounds.schema/default/TopLevel.pmod
@@ -0,0 +1,35 @@
+// This source has been automatically generated by quicktype.
+// ( https://github.com/quicktype/quicktype )
+//
+// To use this code, simply import it into your project as a Pike module.
+// To JSON-encode your object, you can pass it to `Standards.JSON.encode`
+// or call `encode_json` on it.
+//
+// To decode a JSON string, first pass it to `Standards.JSON.decode`,
+// and then pass the result to `<YourClass>_from_JSON`.
+// It will return an instance of <YourClass>.
+// Bear in mind that these functions have unexpected behavior,
+// and will likely throw an error, if the JSON string does not
+// match the expected interface, even if the JSON itself is valid.
+
+class TopLevel {
+    float value; // json: "value"
+
+    string encode_json() {
+        mapping(string:mixed) json = ([
+            "value" : value,
+        ]);
+
+        return Standards.JSON.encode(json);
+    }
+}
+
+TopLevel TopLevel_from_JSON(mixed json) {
+    TopLevel retval = TopLevel();
+
+    if (json["value"] < 0.1) error("Value below minimum");
+    if (json["value"] > 0.9) error("Value above maximum");
+    retval.value = (float)json["value"];
+
+    return retval;
+}
diff --git a/head/schema-python/test/inputs/schema/fractional-bounds.schema/default/quicktype.py b/head/schema-python/test/inputs/schema/fractional-bounds.schema/default/quicktype.py
new file mode 100644
index 0000000..ef4dfc7
--- /dev/null
+++ b/head/schema-python/test/inputs/schema/fractional-bounds.schema/default/quicktype.py
@@ -0,0 +1,44 @@
+from dataclasses import dataclass
+from typing import Any, TypeVar, Type, cast
+
+
+T = TypeVar("T")
+
+
+def from_float(x: Any) -> float:
+    assert isinstance(x, (float, int)) and not isinstance(x, bool)
+    return float(x)
+
+
+def to_float(x: Any) -> float:
+    assert isinstance(x, (int, float))
+    return x
+
+
+def to_class(c: Type[T], x: Any) -> dict:
+    assert isinstance(x, c)
+    return cast(Any, x).to_dict()
+
+
+@dataclass
+class TopLevel:
+    value: float
+
+    @staticmethod
+    def from_dict(obj: Any) -> 'TopLevel':
+        assert isinstance(obj, dict)
+        value = from_float(obj.get("value"))
+        return TopLevel(value)
+
+    def to_dict(self) -> dict:
+        result: dict = {}
+        result["value"] = to_float(self.value)
+        return result
+
+
+def top_level_from_dict(s: Any) -> TopLevel:
+    return TopLevel.from_dict(s)
+
+
+def top_level_to_dict(x: TopLevel) -> Any:
+    return to_class(TopLevel, x)
diff --git a/head/schema-ruby/test/inputs/schema/fractional-bounds.schema/default/TopLevel.rb b/head/schema-ruby/test/inputs/schema/fractional-bounds.schema/default/TopLevel.rb
new file mode 100644
index 0000000..7e31e33
--- /dev/null
+++ b/head/schema-ruby/test/inputs/schema/fractional-bounds.schema/default/TopLevel.rb
@@ -0,0 +1,45 @@
+# This code may look unusually verbose for Ruby (and it is), but
+# it performs some subtle and complex validation of JSON data.
+#
+# To parse this JSON, add 'dry-struct' and 'dry-types' gems, then do:
+#
+#   top_level = TopLevel.from_json! "{…}"
+#   puts top_level.value
+#
+# If from_json! succeeds, the value returned matches the schema.
+
+require 'json'
+require 'dry-types'
+require 'dry-struct'
+
+module Types
+  include Dry.Types(default: :nominal)
+
+  Hash   = Strict::Hash
+  Double = Strict::Float | Strict::Integer
+end
+
+class TopLevel < Dry::Struct
+  attribute :value, Types::Double.constrained(gteq: 0.1, lteq: 0.9)
+
+  def self.from_dynamic!(d)
+    d = Types::Hash[d]
+    new(
+      value: d.fetch("value"),
+    )
+  end
+
+  def self.from_json!(json)
+    from_dynamic!(JSON.parse(json))
+  end
+
+  def to_dynamic
+    {
+      "value" => value,
+    }
+  end
+
+  def to_json(options = nil)
+    JSON.generate(to_dynamic, options)
+  end
+end
diff --git a/head/schema-rust/test/inputs/schema/fractional-bounds.schema/default/module_under_test.rs b/head/schema-rust/test/inputs/schema/fractional-bounds.schema/default/module_under_test.rs
new file mode 100644
index 0000000..e54f05a
--- /dev/null
+++ b/head/schema-rust/test/inputs/schema/fractional-bounds.schema/default/module_under_test.rs
@@ -0,0 +1,19 @@
+// Example code that deserializes and serializes the model.
+// extern crate serde;
+// #[macro_use]
+// extern crate serde_derive;
+// extern crate serde_json;
+//
+// use generated_module::TopLevel;
+//
+// fn main() {
+//     let json = r#"{"answer": 42}"#;
+//     let model: TopLevel = serde_json::from_str(&json).unwrap();
+// }
+
+use serde::{Serialize, Deserialize};
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct TopLevel {
+    pub value: f64,
+}
diff --git a/head/schema-scala3/test/inputs/schema/fractional-bounds.schema/default/TopLevel.scala b/head/schema-scala3/test/inputs/schema/fractional-bounds.schema/default/TopLevel.scala
new file mode 100644
index 0000000..82acc3f
--- /dev/null
+++ b/head/schema-scala3/test/inputs/schema/fractional-bounds.schema/default/TopLevel.scala
@@ -0,0 +1,12 @@
+package quicktype
+
+import io.circe.syntax._
+import io.circe._
+import cats.syntax.functor._
+
+// If a union has a null in, then we'll need this too... 
+type NullValue = None.type
+
+case class TopLevel (
+    val value : Double
+) derives Encoder.AsObject, Decoder
diff --git a/head/schema-scala3-upickle/test/inputs/schema/fractional-bounds.schema/default/TopLevel.scala b/head/schema-scala3-upickle/test/inputs/schema/fractional-bounds.schema/default/TopLevel.scala
new file mode 100644
index 0000000..53bb91b
--- /dev/null
+++ b/head/schema-scala3-upickle/test/inputs/schema/fractional-bounds.schema/default/TopLevel.scala
@@ -0,0 +1,72 @@
+package quicktype
+
+// Custom pickler so that missing keys and JSON nulls both read as None,
+// and None is left out when writing (upickle's default for Option is a
+// JSON array).
+object OptionPickler extends upickle.AttributeTagged:
+    import upickle.default.Writer
+    import upickle.default.Reader
+    override implicit def OptionWriter[T: Writer]: Writer[Option[T]] =
+        implicitly[Writer[T]].comap[Option[T]] {
+            case None => null.asInstanceOf[T]
+            case Some(x) => x
+        }
+
+    override implicit def OptionReader[T: Reader]: Reader[Option[T]] = {
+        new Reader.Delegate[Any, Option[T]](implicitly[Reader[T]].map(Some(_))){
+        override def visitNull(index: Int) = None
+        }
+    }
+end OptionPickler
+
+// If a union has a null in, then we'll need this too...
+type NullValue = None.type
+given OptionPickler.ReadWriter[NullValue] = OptionPickler.readwriter[ujson.Value].bimap[NullValue](
+    _ => ujson.Null,
+    json => if json.isNull then None else throw new upickle.core.Abort("not null")
+)
+given OptionPickler.ReadWriter[java.time.Instant] = OptionPickler.readwriter[String].bimap(_.toString, java.time.Instant.parse)
+
+object JsonExt:
+    val valueReader = OptionPickler.readwriter[ujson.Value]
+
+    // upickle's built-in primitive readers are lenient -- the numeric and
+    // boolean readers accept strings, and the string reader accepts
+    // numbers and booleans -- so untagged unions need strict readers to
+    // pick the right member.
+    val strictString: OptionPickler.Reader[String] = valueReader.map {
+        case ujson.Str(s) => s
+        case json => throw new upickle.core.Abort("expected string, got " + json)
+    }
+    val strictLong: OptionPickler.Reader[Long] = valueReader.map {
+        case ujson.Num(n) if n.isWhole => n.toLong
+        case json => throw new upickle.core.Abort("expected integer, got " + json)
+    }
+    val strictDouble: OptionPickler.Reader[Double] = valueReader.map {
+        case ujson.Num(n) => n
+        case json => throw new upickle.core.Abort("expected number, got " + json)
+    }
+    val strictBoolean: OptionPickler.Reader[Boolean] = valueReader.map {
+        case ujson.Bool(b) => b
+        case json => throw new upickle.core.Abort("expected boolean, got " + json)
+    }
+
+    def badMerge[T](r1: => OptionPickler.Reader[?], rest: OptionPickler.Reader[?]*): OptionPickler.Reader[T] = valueReader.map { json =>
+        var t: T | Null = null
+        val stack       = Vector.newBuilder[Throwable]
+        (r1 +: rest).foreach { reader =>
+            if t == null then
+            try
+                t = OptionPickler.read[T](json, trace = true)(using reader.asInstanceOf[OptionPickler.Reader[T]])
+            catch
+                case exc => stack += exc
+        }
+        if t != null then t.nn else throw new Exception(json.toString(), stack.result().headOption.getOrElse(null))
+    }
+end JsonExt
+given OptionPickler.Reader[Long] = JsonExt.strictLong
+
+
+case class TopLevel (
+    val value : Double
+) derives OptionPickler.ReadWriter
diff --git a/head/schema-schema/test/inputs/schema/fractional-bounds.schema/default/TopLevel.schema b/head/schema-schema/test/inputs/schema/fractional-bounds.schema/default/TopLevel.schema
new file mode 100644
index 0000000..24691fc
--- /dev/null
+++ b/head/schema-schema/test/inputs/schema/fractional-bounds.schema/default/TopLevel.schema
@@ -0,0 +1,21 @@
+{
+    "$schema": "http://json-schema.org/draft-06/schema#",
+    "$ref": "#/definitions/TopLevel",
+    "definitions": {
+        "TopLevel": {
+            "type": "object",
+            "additionalProperties": {},
+            "properties": {
+                "value": {
+                    "type": "number",
+                    "minimum": 0.1,
+                    "maximum": 0.9
+                }
+            },
+            "required": [
+                "value"
+            ],
+            "title": "TopLevel"
+        }
+    }
+}
diff --git a/head/schema-swift/test/inputs/schema/fractional-bounds.schema/default/quicktype.swift b/head/schema-swift/test/inputs/schema/fractional-bounds.schema/default/quicktype.swift
new file mode 100644
index 0000000..fdf4d37
--- /dev/null
+++ b/head/schema-swift/test/inputs/schema/fractional-bounds.schema/default/quicktype.swift
@@ -0,0 +1,86 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+import Foundation
+
+// MARK: - TopLevel
+struct TopLevel: Codable {
+    let value: Double
+
+    enum CodingKeys: String, CodingKey {
+        case value = "value"
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(TopLevel.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        value: Double? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            value: value ?? self.value
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
diff --git a/head/schema-typescript/test/inputs/regressions/unicode-codepoint-length.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/regressions/unicode-codepoint-length.schema/default/TopLevel.ts
new file mode 100644
index 0000000..13e9e75
--- /dev/null
+++ b/head/schema-typescript/test/inputs/regressions/unicode-codepoint-length.schema/default/TopLevel.ts
@@ -0,0 +1,209 @@
+// To parse this data:
+//
+//   import { Convert, TopLevel } from "./TopLevel";
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export interface TopLevel {
+    exact:   string;
+    maximum: string;
+    minimum: string;
+    [property: string]: unknown | string | string | string;
+}
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+export class Convert {
+    public static toTopLevel(json: string): TopLevel {
+        return cast(JSON.parse(json), r("TopLevel"));
+    }
+
+    public static topLevelToJson(value: TopLevel): string {
+        return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+    }
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = ''): never {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "exact", js: "exact", typ: s(p("^[^!]+$"), 2, 2) },
+        { json: "maximum", js: "maximum", typ: s("", undefined, 1) },
+        { json: "minimum", js: "minimum", typ: s("", 2, undefined) },
+    ], "any"),
+};
diff --git a/base/schema-typescript/test/inputs/schema/accessors.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/accessors.schema/default/TopLevel.ts
index b9fbdf2..b2e4d7e 100644
--- a/base/schema-typescript/test/inputs/schema/accessors.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/accessors.schema/default/TopLevel.ts
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.ts
index 79fe85b..2d7b0e9 100644
--- a/base/schema-typescript/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.ts
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/any.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/any.schema/default/TopLevel.ts
index a33a23b..8e66323 100644
--- a/base/schema-typescript/test/inputs/schema/any.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/any.schema/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/bool-string.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/bool-string.schema/default/TopLevel.ts
index ebbd8c3..9f8c6c6 100644
--- a/base/schema-typescript/test/inputs/schema/bool-string.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/bool-string.schema/default/TopLevel.ts
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/boolean-subschema.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/boolean-subschema.schema/default/TopLevel.ts
index 6cd2b31..e78dbfc 100644
--- a/base/schema-typescript/test/inputs/schema/boolean-subschema.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/boolean-subschema.schema/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/camelCase.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/camelCase.schema/default/TopLevel.ts
index 9748b66..617ac26 100644
--- a/base/schema-typescript/test/inputs/schema/camelCase.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/camelCase.schema/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/class-map-union.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/class-map-union.schema/default/TopLevel.ts
index 8613dec..7dabad5 100644
--- a/base/schema-typescript/test/inputs/schema/class-map-union.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/class-map-union.schema/default/TopLevel.ts
@@ -152,7 +152,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/class-with-additional.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/class-with-additional.schema/default/TopLevel.ts
index b0f6add..854b6e0 100644
--- a/base/schema-typescript/test/inputs/schema/class-with-additional.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/class-with-additional.schema/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.ts
index b5db30e..5ea43d9 100644
--- a/base/schema-typescript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.ts
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.ts
index 2efa565..e3731c5 100644
--- a/base/schema-typescript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.ts
@@ -155,7 +155,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.ts
index f804896..6f0ae2d 100644
--- a/base/schema-typescript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.ts
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/comment-injection.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/comment-injection.schema/default/TopLevel.ts
index 615f083..4a0a168 100644
--- a/base/schema-typescript/test/inputs/schema/comment-injection.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/comment-injection.schema/default/TopLevel.ts
@@ -175,7 +175,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/const-non-string.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/const-non-string.schema/default/TopLevel.ts
index e537d90..f7a244e 100644
--- a/base/schema-typescript/test/inputs/schema/const-non-string.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/const-non-string.schema/default/TopLevel.ts
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/constructor.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/constructor.schema/default/TopLevel.ts
index 7c378cf..3176ec5 100644
--- a/base/schema-typescript/test/inputs/schema/constructor.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/constructor.schema/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/cut-enum.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/cut-enum.schema/default/TopLevel.ts
index ee0179f..85812b6 100644
--- a/base/schema-typescript/test/inputs/schema/cut-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/cut-enum.schema/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/date-time-or-string.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/date-time-or-string.schema/default/TopLevel.ts
index 2cbd5fb..51e77a6 100644
--- a/base/schema-typescript/test/inputs/schema/date-time-or-string.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/date-time-or-string.schema/default/TopLevel.ts
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/date-time.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/date-time.schema/default/TopLevel.ts
index 61f3694..a552ea2 100644
--- a/base/schema-typescript/test/inputs/schema/date-time.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/date-time.schema/default/TopLevel.ts
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/default-value.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/default-value.schema/default/TopLevel.ts
index 6021750..fb7fe69 100644
--- a/base/schema-typescript/test/inputs/schema/default-value.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/default-value.schema/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.ts
index a4d92a9..3377565 100644
--- a/base/schema-typescript/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/description.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/description.schema/default/TopLevel.ts
index ca556a5..44752c4 100644
--- a/base/schema-typescript/test/inputs/schema/description.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/description.schema/default/TopLevel.ts
@@ -172,7 +172,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/direct-union.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/direct-union.schema/default/TopLevel.ts
index 039777e..0c66b0c 100644
--- a/base/schema-typescript/test/inputs/schema/direct-union.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/direct-union.schema/default/TopLevel.ts
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/empty-object.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/empty-object.schema/default/TopLevel.ts
index ddbc949..82dd04b 100644
--- a/base/schema-typescript/test/inputs/schema/empty-object.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/empty-object.schema/default/TopLevel.ts
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/enum-large.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/enum-large.schema/default/TopLevel.ts
index a2d62de..6904f81 100644
--- a/base/schema-typescript/test/inputs/schema/enum-large.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/enum-large.schema/default/TopLevel.ts
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/enum-with-null.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/enum-with-null.schema/default/TopLevel.ts
index d9a46bb..0740b6c 100644
--- a/base/schema-typescript/test/inputs/schema/enum-with-null.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/enum-with-null.schema/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/enum-with-values.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/enum-with-values.schema/default/TopLevel.ts
index 87d9ab1..d0201a5 100644
--- a/base/schema-typescript/test/inputs/schema/enum-with-values.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/enum-with-values.schema/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/enum.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/enum.schema/default/TopLevel.ts
index 2ed0250..27cac86 100644
--- a/base/schema-typescript/test/inputs/schema/enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/enum.schema/default/TopLevel.ts
@@ -148,7 +148,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/schema-typescript/test/inputs/schema/fractional-bounds.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/fractional-bounds.schema/default/TopLevel.ts
new file mode 100644
index 0000000..d2c2116
--- /dev/null
+++ b/head/schema-typescript/test/inputs/schema/fractional-bounds.schema/default/TopLevel.ts
@@ -0,0 +1,205 @@
+// To parse this data:
+//
+//   import { Convert, TopLevel } from "./TopLevel";
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export interface TopLevel {
+    value: number;
+    [property: string]: unknown | number;
+}
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+export class Convert {
+    public static toTopLevel(json: string): TopLevel {
+        return cast(JSON.parse(json), r("TopLevel"));
+    }
+
+    public static topLevelToJson(value: TopLevel): string {
+        return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+    }
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = ''): never {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "value", js: "value", typ: n(3.14, 0.1, 0.9) },
+    ], "any"),
+};
diff --git a/base/schema-typescript/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.ts
index bec548b..00d24c2 100644
--- a/base/schema-typescript/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.ts
index 05d38cf..aca2dbd 100644
--- a/base/schema-typescript/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/id-no-address.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/id-no-address.schema/default/TopLevel.ts
index 5ba0e25..956e8e2 100644
--- a/base/schema-typescript/test/inputs/schema/id-no-address.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/id-no-address.schema/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/id-root.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/id-root.schema/default/TopLevel.ts
index 1b6d40d..39449cf 100644
--- a/base/schema-typescript/test/inputs/schema/id-root.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/id-root.schema/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.ts
index 59a5067..a2fcf91 100644
--- a/base/schema-typescript/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.ts
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/implicit-all-of.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/implicit-all-of.schema/default/TopLevel.ts
index a512f81..131b0b6 100644
--- a/base/schema-typescript/test/inputs/schema/implicit-all-of.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/implicit-all-of.schema/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.ts
index 95d4783..3ed058c 100644
--- a/base/schema-typescript/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.ts
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/implicit-one-of.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/implicit-one-of.schema/default/TopLevel.ts
index 911edea..3e9a7fa 100644
--- a/base/schema-typescript/test/inputs/schema/implicit-one-of.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/implicit-one-of.schema/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/integer-before-number.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/integer-before-number.schema/default/TopLevel.ts
index bb63a39..85e189f 100644
--- a/base/schema-typescript/test/inputs/schema/integer-before-number.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/integer-before-number.schema/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/integer-float-union.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/integer-float-union.schema/default/TopLevel.ts
index e7ae4ea..6215c6d 100644
--- a/base/schema-typescript/test/inputs/schema/integer-float-union.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/integer-float-union.schema/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/integer-string.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/integer-string.schema/default/TopLevel.ts
index a6901be..5bf5e13 100644
--- a/base/schema-typescript/test/inputs/schema/integer-string.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/integer-string.schema/default/TopLevel.ts
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/integer-type.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/integer-type.schema/default/TopLevel.ts
index c5e5f2b..6d3a2c9 100644
--- a/base/schema-typescript/test/inputs/schema/integer-type.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/integer-type.schema/default/TopLevel.ts
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/intersection-nested.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/intersection-nested.schema/default/TopLevel.ts
index 8191580..634b387 100644
--- a/base/schema-typescript/test/inputs/schema/intersection-nested.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/intersection-nested.schema/default/TopLevel.ts
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/intersection.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/intersection.schema/default/TopLevel.ts
index 91f0663..5eb24bb 100644
--- a/base/schema-typescript/test/inputs/schema/intersection.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/intersection.schema/default/TopLevel.ts
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.ts
index 3330b94..d71c1cf 100644
--- a/base/schema-typescript/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/issue2680-top-level-array.schema/default/TopLevel.ts
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
index b8d8989..cd15e4e 100644
--- a/base/schema-typescript/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
index dc2b7f2..6deada7 100644
--- a/base/schema-typescript/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
@@ -964,7 +964,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/light.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/light.schema/default/TopLevel.ts
index 7ac5896..d1ae931 100644
--- a/base/schema-typescript/test/inputs/schema/light.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/light.schema/default/TopLevel.ts
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/list.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/list.schema/default/TopLevel.ts
index 5f1fb8b..dded0d3 100644
--- a/base/schema-typescript/test/inputs/schema/list.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/list.schema/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/min-max-items.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/min-max-items.schema/default/TopLevel.ts
index b4d074b..7f870ab 100644
--- a/base/schema-typescript/test/inputs/schema/min-max-items.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/min-max-items.schema/default/TopLevel.ts
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/minmax-integer.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/minmax-integer.schema/default/TopLevel.ts
index d489e14..6749711 100644
--- a/base/schema-typescript/test/inputs/schema/minmax-integer.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/minmax-integer.schema/default/TopLevel.ts
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/minmax.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/minmax.schema/default/TopLevel.ts
index 68930d3..7f8a3c5 100644
--- a/base/schema-typescript/test/inputs/schema/minmax.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/minmax.schema/default/TopLevel.ts
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/minmaxlength.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/minmaxlength.schema/default/TopLevel.ts
index d8f10a9..628425c 100644
--- a/base/schema-typescript/test/inputs/schema/minmaxlength.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/minmaxlength.schema/default/TopLevel.ts
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/multi-type-enum.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/multi-type-enum.schema/default/TopLevel.ts
index 4b1816f..3f048f9 100644
--- a/base/schema-typescript/test/inputs/schema/multi-type-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/multi-type-enum.schema/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/mutually-recursive.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/mutually-recursive.schema/default/TopLevel.ts
index 4f6e40f..1c0453e 100644
--- a/base/schema-typescript/test/inputs/schema/mutually-recursive.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/mutually-recursive.schema/default/TopLevel.ts
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.ts
index 5ea074f..19d7ac5 100644
--- a/base/schema-typescript/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.ts
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/non-standard-ref.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/non-standard-ref.schema/default/TopLevel.ts
index 50c058c..9cd8ae7 100644
--- a/base/schema-typescript/test/inputs/schema/non-standard-ref.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/non-standard-ref.schema/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.ts
index ad71576..4c55d54 100644
--- a/base/schema-typescript/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/object-type-required.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/object-type-required.schema/default/TopLevel.ts
index 4c5d753..3724284 100644
--- a/base/schema-typescript/test/inputs/schema/object-type-required.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/object-type-required.schema/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/optional-any.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/optional-any.schema/default/TopLevel.ts
index e88a0c8..5ff5803 100644
--- a/base/schema-typescript/test/inputs/schema/optional-any.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/optional-any.schema/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts
index d2f6bc9..8c4941a 100644
--- a/base/schema-typescript/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts
@@ -146,7 +146,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts
index d89a506..2c419b8 100644
--- a/base/schema-typescript/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/optional-date-time.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/optional-date-time.schema/default/TopLevel.ts
index 7ec824b..976447d 100644
--- a/base/schema-typescript/test/inputs/schema/optional-date-time.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/optional-date-time.schema/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/optional-enum.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/optional-enum.schema/default/TopLevel.ts
index 4f34cef..fca17e4 100644
--- a/base/schema-typescript/test/inputs/schema/optional-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/optional-enum.schema/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/pattern.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/pattern.schema/default/TopLevel.ts
index 4c4512e..f1b7115 100644
--- a/base/schema-typescript/test/inputs/schema/pattern.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/pattern.schema/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/postman-collection.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/postman-collection.schema/default/TopLevel.ts
index 6e85615..7524d1d 100644
--- a/base/schema-typescript/test/inputs/schema/postman-collection.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/postman-collection.schema/default/TopLevel.ts
@@ -146,7 +146,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/prefix-items.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/prefix-items.schema/default/TopLevel.ts
index 00c935e..96d138a 100644
--- a/base/schema-typescript/test/inputs/schema/prefix-items.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/prefix-items.schema/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.ts
index 29a676b..3c430b8 100644
--- a/base/schema-typescript/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.ts
@@ -149,7 +149,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/ref-id-files.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/ref-id-files.schema/default/TopLevel.ts
index ee0179f..85812b6 100644
--- a/base/schema-typescript/test/inputs/schema/ref-id-files.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/ref-id-files.schema/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/ref-remote.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/ref-remote.schema/default/TopLevel.ts
index 5f1fb8b..dded0d3 100644
--- a/base/schema-typescript/test/inputs/schema/ref-remote.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/ref-remote.schema/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts
index 1d5fb2f..b5ce6a4 100644
--- a/base/schema-typescript/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts
@@ -223,7 +223,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/required-draft3.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/required-draft3.schema/default/TopLevel.ts
index c0c5b44..f872b61 100644
--- a/base/schema-typescript/test/inputs/schema/required-draft3.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/required-draft3.schema/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/required-non-properties.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/required-non-properties.schema/default/TopLevel.ts
index 97f92c2..acfab75 100644
--- a/base/schema-typescript/test/inputs/schema/required-non-properties.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/required-non-properties.schema/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/required.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/required.schema/default/TopLevel.ts
index c0c5b44..f872b61 100644
--- a/base/schema-typescript/test/inputs/schema/required.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/required.schema/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.ts
index 47cdf68..e5b6bed 100644
--- a/base/schema-typescript/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.ts
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/schema-constraints.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/schema-constraints.schema/default/TopLevel.ts
index 47fe187..519be08 100644
--- a/base/schema-typescript/test/inputs/schema/schema-constraints.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/schema-constraints.schema/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/simple-ref.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/simple-ref.schema/default/TopLevel.ts
index 5f1fb8b..dded0d3 100644
--- a/base/schema-typescript/test/inputs/schema/simple-ref.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/simple-ref.schema/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/strict-optional.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/strict-optional.schema/default/TopLevel.ts
index 6dd98df..0e871be 100644
--- a/base/schema-typescript/test/inputs/schema/strict-optional.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/strict-optional.schema/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/top-level-array.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/top-level-array.schema/default/TopLevel.ts
index ad232b8..d01ef11 100644
--- a/base/schema-typescript/test/inputs/schema/top-level-array.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/top-level-array.schema/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/top-level-enum.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/top-level-enum.schema/default/TopLevel.ts
index 46411b3..0e4a929 100644
--- a/base/schema-typescript/test/inputs/schema/top-level-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/top-level-enum.schema/default/TopLevel.ts
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.ts
index 27a04b8..682ca22 100644
--- a/base/schema-typescript/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/top-level-primitive-array.schema/default/TopLevel.ts
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/top-level-primitive.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/top-level-primitive.schema/default/TopLevel.ts
index f76aabb..5bbe39c 100644
--- a/base/schema-typescript/test/inputs/schema/top-level-primitive.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/top-level-primitive.schema/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/tuple.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/tuple.schema/default/TopLevel.ts
index f87fd01..8b57de6 100644
--- a/base/schema-typescript/test/inputs/schema/tuple.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/tuple.schema/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.ts
index c17365e..208f2bd 100644
--- a/base/schema-typescript/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.ts
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/union-int-double.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/union-int-double.schema/default/TopLevel.ts
index 997f78e..b9e11c7 100644
--- a/base/schema-typescript/test/inputs/schema/union-int-double.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/union-int-double.schema/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/union-list.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/union-list.schema/default/TopLevel.ts
index 0a104e9..40bf2a3 100644
--- a/base/schema-typescript/test/inputs/schema/union-list.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/union-list.schema/default/TopLevel.ts
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/union.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/union.schema/default/TopLevel.ts
index 05e0ba0..81b4ba7 100644
--- a/base/schema-typescript/test/inputs/schema/union.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/union.schema/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/uuid.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/uuid.schema/default/TopLevel.ts
index 93183ff..81bc80b 100644
--- a/base/schema-typescript/test/inputs/schema/uuid.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/uuid.schema/default/TopLevel.ts
@@ -146,7 +146,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/schema-typescript/test/inputs/schema/vega-lite.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/vega-lite.schema/default/TopLevel.ts
index 130c5a4..6c560e2 100644
--- a/base/schema-typescript/test/inputs/schema/vega-lite.schema/default/TopLevel.ts
+++ b/head/schema-typescript/test/inputs/schema/vega-lite.schema/default/TopLevel.ts
@@ -5984,7 +5984,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/schema-typescript-effect-schema/test/inputs/regressions/unicode-codepoint-length.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/regressions/unicode-codepoint-length.schema/default/TopLevel.ts
new file mode 100644
index 0000000..9730f77
--- /dev/null
+++ b/head/schema-typescript-effect-schema/test/inputs/regressions/unicode-codepoint-length.schema/default/TopLevel.ts
@@ -0,0 +1,8 @@
+import * as S from "effect/Schema";
+
+
+export class TopLevel extends S.Class<TopLevel>("TopLevel")({
+    "exact": S.String.pipe(S.filter(value => Array.from(value).length >= 2)).pipe(S.filter(value => Array.from(value).length <= 2)).pipe(S.pattern(new RegExp("^[^!]+$"))),
+    "maximum": S.String.pipe(S.filter(value => Array.from(value).length <= 1)),
+    "minimum": S.String.pipe(S.filter(value => Array.from(value).length >= 2)),
+}) {}
diff --git a/head/schema-typescript-effect-schema/test/inputs/schema/fractional-bounds.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/fractional-bounds.schema/default/TopLevel.ts
new file mode 100644
index 0000000..b5e12e0
--- /dev/null
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/fractional-bounds.schema/default/TopLevel.ts
@@ -0,0 +1,6 @@
+import * as S from "effect/Schema";
+
+
+export class TopLevel extends S.Class<TopLevel>("TopLevel")({
+    "value": S.Number.pipe(S.greaterThanOrEqualTo(0.1)).pipe(S.lessThanOrEqualTo(0.9)),
+}) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/minmaxlength.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/minmaxlength.schema/default/TopLevel.ts
index efb94ee..6faae36 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/minmaxlength.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/minmaxlength.schema/default/TopLevel.ts
@@ -2,12 +2,12 @@ import * as S from "effect/Schema";
 
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "intersection": S.String.pipe(S.minLength(4)).pipe(S.maxLength(5)),
-    "inUnion": S.Union(S.Number, S.String.pipe(S.minLength(3)).pipe(S.maxLength(5))),
-    "maxlength": S.String.pipe(S.maxLength(5)),
-    "minlength": S.String.pipe(S.minLength(3)),
-    "minMaxIntersection": S.String.pipe(S.minLength(3)).pipe(S.maxLength(5)),
-    "minmaxlength": S.String.pipe(S.minLength(3)).pipe(S.maxLength(5)),
+    "intersection": S.String.pipe(S.filter(value => Array.from(value).length >= 4)).pipe(S.filter(value => Array.from(value).length <= 5)),
+    "inUnion": S.Union(S.Number, S.String.pipe(S.filter(value => Array.from(value).length >= 3)).pipe(S.filter(value => Array.from(value).length <= 5))),
+    "maxlength": S.String.pipe(S.filter(value => Array.from(value).length <= 5)),
+    "minlength": S.String.pipe(S.filter(value => Array.from(value).length >= 3)),
+    "minMaxIntersection": S.String.pipe(S.filter(value => Array.from(value).length >= 3)).pipe(S.filter(value => Array.from(value).length <= 5)),
+    "minmaxlength": S.String.pipe(S.filter(value => Array.from(value).length >= 3)).pipe(S.filter(value => Array.from(value).length <= 5)),
     "minMaxUnion": S.String,
-    "union": S.String.pipe(S.minLength(3)).pipe(S.maxLength(6)),
+    "union": S.String.pipe(S.filter(value => Array.from(value).length >= 3)).pipe(S.filter(value => Array.from(value).length <= 6)),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts
index f45038e..c8b647c 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts
@@ -9,9 +9,9 @@ export class Coordinate extends S.Class<Coordinate>("Coordinate")({
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
     "coordinates": S.optional(S.NullOr(S.Array(Coordinate))),
     "count": S.optional(S.NullOr(S.Int.pipe(S.greaterThanOrEqualTo(1)).pipe(S.lessThanOrEqualTo(100)))),
-    "label": S.optional(S.NullOr(S.String.pipe(S.minLength(2)).pipe(S.maxLength(16)))),
+    "label": S.optional(S.NullOr(S.String.pipe(S.filter(value => Array.from(value).length >= 2)).pipe(S.filter(value => Array.from(value).length <= 16)))),
     "requiredCoordinates": S.Array(Coordinate),
     "requiredCount": S.Int.pipe(S.greaterThanOrEqualTo(1)).pipe(S.lessThanOrEqualTo(100)),
-    "requiredLabel": S.String.pipe(S.minLength(2)).pipe(S.maxLength(16)),
+    "requiredLabel": S.String.pipe(S.filter(value => Array.from(value).length >= 2)).pipe(S.filter(value => Array.from(value).length <= 16)),
     "weight": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0.5)).pipe(S.lessThanOrEqualTo(99.5)))),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts
index 4c5c8ea..725ba7f 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts
@@ -5,6 +5,6 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
     "optDouble": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0.5)).pipe(S.lessThanOrEqualTo(99.5)))),
     "optInt": S.optional(S.NullOr(S.Int.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(100)))),
     "optPattern": S.optional(S.NullOr(S.String.pipe(S.pattern(new RegExp("^[a-z]+$"))))),
-    "optString": S.optional(S.NullOr(S.String.pipe(S.minLength(3)).pipe(S.maxLength(10)))),
+    "optString": S.optional(S.NullOr(S.String.pipe(S.filter(value => Array.from(value).length >= 3)).pipe(S.filter(value => Array.from(value).length <= 10)))),
     "reqZeroMin": S.Int.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(100)),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts
index a0c3b07..2437c9f 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts
@@ -42,7 +42,7 @@ export class Speed extends S.Class<Speed>("Speed")({
 
 export class Vehicle extends S.Class<Vehicle>("Vehicle")({
     "brand": S.optional(S.NullOr(S.String)),
-    "id": S.optional(S.NullOr(S.String.pipe(S.minLength(1)))),
+    "id": S.optional(S.NullOr(S.String.pipe(S.filter(value => Array.from(value).length >= 1)))),
     "speed": S.optional(S.NullOr(Speed)),
     "subModule": S.optional(S.NullOr(S.Boolean)),
     "type": S.optional(S.NullOr(VehicleType)),
@@ -83,7 +83,7 @@ export class Color extends S.Class<Color>("Color")({
 
 export class Berry extends S.Class<Berry>("Berry")({
     "color": S.optional(S.NullOr(Color)),
-    "name": S.optional(S.NullOr(S.String.pipe(S.minLength(1)))),
+    "name": S.optional(S.NullOr(S.String.pipe(S.filter(value => Array.from(value).length >= 1)))),
     "shapes": S.optional(S.NullOr(S.Array(Shape))),
 }) {}
 
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/schema-constraints.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/schema-constraints.schema/default/TopLevel.ts
index 3e74d87..e9864b8 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/schema-constraints.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/schema-constraints.schema/default/TopLevel.ts
@@ -2,6 +2,6 @@ import * as S from "effect/Schema";
 
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "minMaxLength": S.String.pipe(S.minLength(5)).pipe(S.maxLength(5)),
+    "minMaxLength": S.String.pipe(S.filter(value => Array.from(value).length >= 5)).pipe(S.filter(value => Array.from(value).length <= 5)),
     "percent": S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)),
 }) {}
diff --git a/head/schema-typescript-zod/test/inputs/regressions/unicode-codepoint-length.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/regressions/unicode-codepoint-length.schema/default/TopLevel.ts
new file mode 100644
index 0000000..927a5f4
--- /dev/null
+++ b/head/schema-typescript-zod/test/inputs/regressions/unicode-codepoint-length.schema/default/TopLevel.ts
@@ -0,0 +1,9 @@
+import * as z from "zod";
+
+
+export const TopLevelSchema = z.object({
+    "exact": z.string().regex(new RegExp("^[^!]+$")).refine(value => Array.from(value).length >= 2).refine(value => Array.from(value).length <= 2),
+    "maximum": z.string().refine(value => Array.from(value).length <= 1),
+    "minimum": z.string().refine(value => Array.from(value).length >= 2),
+});
+export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/head/schema-typescript-zod/test/inputs/schema/fractional-bounds.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/fractional-bounds.schema/default/TopLevel.ts
new file mode 100644
index 0000000..644464e
--- /dev/null
+++ b/head/schema-typescript-zod/test/inputs/schema/fractional-bounds.schema/default/TopLevel.ts
@@ -0,0 +1,7 @@
+import * as z from "zod";
+
+
+export const TopLevelSchema = z.object({
+    "value": z.number().min(0.1).max(0.9),
+});
+export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/schema-typescript-zod/test/inputs/schema/minmaxlength.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/minmaxlength.schema/default/TopLevel.ts
index 0a16cef..e51d521 100644
--- a/base/schema-typescript-zod/test/inputs/schema/minmaxlength.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/minmaxlength.schema/default/TopLevel.ts
@@ -2,13 +2,13 @@ import * as z from "zod";
 
 
 export const TopLevelSchema = z.object({
-    "intersection": z.string().min(4).max(5),
-    "inUnion": z.union([z.number(), z.string().min(3).max(5)]),
-    "maxlength": z.string().max(5),
-    "minlength": z.string().min(3),
-    "minMaxIntersection": z.string().min(3).max(5),
-    "minmaxlength": z.string().min(3).max(5),
+    "intersection": z.string().refine(value => Array.from(value).length >= 4).refine(value => Array.from(value).length <= 5),
+    "inUnion": z.union([z.number(), z.string().refine(value => Array.from(value).length >= 3).refine(value => Array.from(value).length <= 5)]),
+    "maxlength": z.string().refine(value => Array.from(value).length <= 5),
+    "minlength": z.string().refine(value => Array.from(value).length >= 3),
+    "minMaxIntersection": z.string().refine(value => Array.from(value).length >= 3).refine(value => Array.from(value).length <= 5),
+    "minmaxlength": z.string().refine(value => Array.from(value).length >= 3).refine(value => Array.from(value).length <= 5),
     "minMaxUnion": z.string(),
-    "union": z.string().min(3).max(6),
+    "union": z.string().refine(value => Array.from(value).length >= 3).refine(value => Array.from(value).length <= 6),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/schema-typescript-zod/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts
index 1372ddb..b5b8d6a 100644
--- a/base/schema-typescript-zod/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts
@@ -10,10 +10,10 @@ export type Coordinate = z.infer<typeof CoordinateSchema>;
 export const TopLevelSchema = z.object({
     "coordinates": z.array(CoordinateSchema).optional(),
     "count": z.number().int().min(1).max(100).optional(),
-    "label": z.string().min(2).max(16).optional(),
+    "label": z.string().refine(value => Array.from(value).length >= 2).refine(value => Array.from(value).length <= 16).optional(),
     "requiredCoordinates": z.array(CoordinateSchema),
     "requiredCount": z.number().int().min(1).max(100),
-    "requiredLabel": z.string().min(2).max(16),
+    "requiredLabel": z.string().refine(value => Array.from(value).length >= 2).refine(value => Array.from(value).length <= 16),
     "weight": z.number().min(0.5).max(99.5).optional(),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/schema-typescript-zod/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts
index 3c40ff0..40cd92e 100644
--- a/base/schema-typescript-zod/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts
@@ -5,7 +5,7 @@ export const TopLevelSchema = z.object({
     "optDouble": z.number().min(0.5).max(99.5).optional(),
     "optInt": z.number().int().min(0).max(100).optional(),
     "optPattern": z.string().regex(new RegExp("^[a-z]+$")).optional(),
-    "optString": z.string().min(3).max(10).optional(),
+    "optString": z.string().refine(value => Array.from(value).length >= 3).refine(value => Array.from(value).length <= 10).optional(),
     "reqZeroMin": z.number().int().min(0).max(100),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/schema-typescript-zod/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts
index 040a94a..d1de348 100644
--- a/base/schema-typescript-zod/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts
@@ -78,7 +78,7 @@ export type Geometry = z.infer<typeof GeometrySchema>;
 
 export const VehicleSchema = z.object({
     "brand": z.string().optional(),
-    "id": z.string().min(1).optional(),
+    "id": z.string().refine(value => Array.from(value).length >= 1).optional(),
     "speed": SpeedSchema.optional(),
     "subModule": z.boolean().optional(),
     "type": VehicleTypeSchema.optional(),
@@ -94,7 +94,7 @@ export type Shape = z.infer<typeof ShapeSchema>;
 
 export const BerrySchema = z.object({
     "color": ColorSchema.optional(),
-    "name": z.string().min(1).optional(),
+    "name": z.string().refine(value => Array.from(value).length >= 1).optional(),
     "shapes": z.array(ShapeSchema).optional(),
 });
 export type Berry = z.infer<typeof BerrySchema>;
diff --git a/base/schema-typescript-zod/test/inputs/schema/schema-constraints.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/schema-constraints.schema/default/TopLevel.ts
index d87842a..5f84104 100644
--- a/base/schema-typescript-zod/test/inputs/schema/schema-constraints.schema/default/TopLevel.ts
+++ b/head/schema-typescript-zod/test/inputs/schema/schema-constraints.schema/default/TopLevel.ts
@@ -2,7 +2,7 @@ import * as z from "zod";
 
 
 export const TopLevelSchema = z.object({
-    "minMaxLength": z.string().min(5).max(5),
+    "minMaxLength": z.string().refine(value => Array.from(value).length >= 5).refine(value => Array.from(value).length <= 5),
     "percent": z.number().min(0).max(1),
 });
 export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/head/swift/test/inputs/json/priority/combinations1.json/final-classes-true__struct-or-class-class--d3c62ec7414d/quicktype.swift b/head/swift/test/inputs/json/priority/combinations1.json/final-classes-true__struct-or-class-class--d3c62ec7414d/quicktype.swift
new file mode 100644
index 0000000..e124cd4
--- /dev/null
+++ b/head/swift/test/inputs/json/priority/combinations1.json/final-classes-true__struct-or-class-class--d3c62ec7414d/quicktype.swift
@@ -0,0 +1,3182 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+import Foundation
+
+// MARK: - TopLevel
+final class TopLevel: Codable {
+    let centrodesmose: String
+    let cerograph: [CerographElement]
+    let chemotherapeutics: [ChemotherapeuticElement]
+    let cimelia: [CimeliaElement]
+    let citrated: Int
+    let clinodome: [Clinodome]
+    let coadjust: [CoadjustElement]
+    let consilience: [Consilience]
+    let constructor: [Constructor]
+    let continuative: [Continuative]
+    let credulity: [CredulityElement]
+    let creviced: [Creviced]
+    let cubiculum: [[Int?]]
+    let deruralize: [DeruralizeElement]
+    let diaereses: [DiaereseElement]
+    let dissolution: [[JSONNull?]?]
+    let downstroke: [Downstroke]
+    let electrotautomerism: [Double?]
+    let eleutheromania: [Eleutheromania]
+    let encrust: Encrust
+    let entomoid: [Entomoid]
+    let epipaleolithic: [Epipaleolithic]
+    let expropriable: [Expropriable]
+    let faggingly: [FagginglyElement]
+    let fenks: [FenkElement]
+    let flagmaking: [FlagmakingElement]
+    let fluorometer: [Fluorometer]
+    let fulsome: [Int?]
+    let fuzzy: [Fuzzy]
+    let gardenwards: [Gardenward]
+    let generalissimo: [Generalissimo]
+    let habeas: [[String: Int]?]
+    let hemicrystalline: [Hemicrystalline]
+    let hemocoele: [HemocoeleElement]
+    let hoister: [Hoister]
+    let hyperpiesis: [Hyperpiesi]
+    let hyppish: [Hyppish]
+    let idealizer: [Idealizer]
+    let incrustator: [Incrustator]
+    let intentiveness: [Intentiveness]
+    let interacinar: Interacinar
+    let intercorrelation: [[Int]?]
+    let jacutinga: [Jacutinga]
+
+    enum CodingKeys: String, CodingKey {
+        case centrodesmose = "centrodesmose"
+        case cerograph = "cerograph"
+        case chemotherapeutics = "chemotherapeutics"
+        case cimelia = "cimelia"
+        case citrated = "citrated"
+        case clinodome = "clinodome"
+        case coadjust = "coadjust"
+        case consilience = "consilience"
+        case constructor = "constructor"
+        case continuative = "continuative"
+        case credulity = "credulity"
+        case creviced = "creviced"
+        case cubiculum = "cubiculum"
+        case deruralize = "deruralize"
+        case diaereses = "diaereses"
+        case dissolution = "dissolution"
+        case downstroke = "downstroke"
+        case electrotautomerism = "electrotautomerism"
+        case eleutheromania = "eleutheromania"
+        case encrust = "encrust"
+        case entomoid = "entomoid"
+        case epipaleolithic = "epipaleolithic"
+        case expropriable = "expropriable"
+        case faggingly = "faggingly"
+        case fenks = "fenks"
+        case flagmaking = "flagmaking"
+        case fluorometer = "fluorometer"
+        case fulsome = "fulsome"
+        case fuzzy = "fuzzy"
+        case gardenwards = "gardenwards"
+        case generalissimo = "generalissimo"
+        case habeas = "habeas"
+        case hemicrystalline = "hemicrystalline"
+        case hemocoele = "hemocoele"
+        case hoister = "hoister"
+        case hyperpiesis = "hyperpiesis"
+        case hyppish = "hyppish"
+        case idealizer = "idealizer"
+        case incrustator = "incrustator"
+        case intentiveness = "intentiveness"
+        case interacinar = "interacinar"
+        case intercorrelation = "intercorrelation"
+        case jacutinga = "jacutinga"
+    }
+
+    init(centrodesmose: String, cerograph: [CerographElement], chemotherapeutics: [ChemotherapeuticElement], cimelia: [CimeliaElement], citrated: Int, clinodome: [Clinodome], coadjust: [CoadjustElement], consilience: [Consilience], constructor: [Constructor], continuative: [Continuative], credulity: [CredulityElement], creviced: [Creviced], cubiculum: [[Int?]], deruralize: [DeruralizeElement], diaereses: [DiaereseElement], dissolution: [[JSONNull?]?], downstroke: [Downstroke], electrotautomerism: [Double?], eleutheromania: [Eleutheromania], encrust: Encrust, entomoid: [Entomoid], epipaleolithic: [Epipaleolithic], expropriable: [Expropriable], faggingly: [FagginglyElement], fenks: [FenkElement], flagmaking: [FlagmakingElement], fluorometer: [Fluorometer], fulsome: [Int?], fuzzy: [Fuzzy], gardenwards: [Gardenward], generalissimo: [Generalissimo], habeas: [[String: Int]?], hemicrystalline: [Hemicrystalline], hemocoele: [HemocoeleElement], hoister: [Hoister], hyperpiesis: [Hyperpiesi], hyppish: [Hyppish], idealizer: [Idealizer], incrustator: [Incrustator], intentiveness: [Intentiveness], interacinar: Interacinar, intercorrelation: [[Int]?], jacutinga: [Jacutinga]) {
+        self.centrodesmose = centrodesmose
+        self.cerograph = cerograph
+        self.chemotherapeutics = chemotherapeutics
+        self.cimelia = cimelia
+        self.citrated = citrated
+        self.clinodome = clinodome
+        self.coadjust = coadjust
+        self.consilience = consilience
+        self.constructor = constructor
+        self.continuative = continuative
+        self.credulity = credulity
+        self.creviced = creviced
+        self.cubiculum = cubiculum
+        self.deruralize = deruralize
+        self.diaereses = diaereses
+        self.dissolution = dissolution
+        self.downstroke = downstroke
+        self.electrotautomerism = electrotautomerism
+        self.eleutheromania = eleutheromania
+        self.encrust = encrust
+        self.entomoid = entomoid
+        self.epipaleolithic = epipaleolithic
+        self.expropriable = expropriable
+        self.faggingly = faggingly
+        self.fenks = fenks
+        self.flagmaking = flagmaking
+        self.fluorometer = fluorometer
+        self.fulsome = fulsome
+        self.fuzzy = fuzzy
+        self.gardenwards = gardenwards
+        self.generalissimo = generalissimo
+        self.habeas = habeas
+        self.hemicrystalline = hemicrystalline
+        self.hemocoele = hemocoele
+        self.hoister = hoister
+        self.hyperpiesis = hyperpiesis
+        self.hyppish = hyppish
+        self.idealizer = idealizer
+        self.incrustator = incrustator
+        self.intentiveness = intentiveness
+        self.interacinar = interacinar
+        self.intercorrelation = intercorrelation
+        self.jacutinga = jacutinga
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(TopLevel.self, from: data)
+        self.init(centrodesmose: me.centrodesmose, cerograph: me.cerograph, chemotherapeutics: me.chemotherapeutics, cimelia: me.cimelia, citrated: me.citrated, clinodome: me.clinodome, coadjust: me.coadjust, consilience: me.consilience, constructor: me.constructor, continuative: me.continuative, credulity: me.credulity, creviced: me.creviced, cubiculum: me.cubiculum, deruralize: me.deruralize, diaereses: me.diaereses, dissolution: me.dissolution, downstroke: me.downstroke, electrotautomerism: me.electrotautomerism, eleutheromania: me.eleutheromania, encrust: me.encrust, entomoid: me.entomoid, epipaleolithic: me.epipaleolithic, expropriable: me.expropriable, faggingly: me.faggingly, fenks: me.fenks, flagmaking: me.flagmaking, fluorometer: me.fluorometer, fulsome: me.fulsome, fuzzy: me.fuzzy, gardenwards: me.gardenwards, generalissimo: me.generalissimo, habeas: me.habeas, hemicrystalline: me.hemicrystalline, hemocoele: me.hemocoele, hoister: me.hoister, hyperpiesis: me.hyperpiesis, hyppish: me.hyppish, idealizer: me.idealizer, incrustator: me.incrustator, intentiveness: me.intentiveness, interacinar: me.interacinar, intercorrelation: me.intercorrelation, jacutinga: me.jacutinga)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        centrodesmose: String? = nil,
+        cerograph: [CerographElement]? = nil,
+        chemotherapeutics: [ChemotherapeuticElement]? = nil,
+        cimelia: [CimeliaElement]? = nil,
+        citrated: Int? = nil,
+        clinodome: [Clinodome]? = nil,
+        coadjust: [CoadjustElement]? = nil,
+        consilience: [Consilience]? = nil,
+        constructor: [Constructor]? = nil,
+        continuative: [Continuative]? = nil,
+        credulity: [CredulityElement]? = nil,
+        creviced: [Creviced]? = nil,
+        cubiculum: [[Int?]]? = nil,
+        deruralize: [DeruralizeElement]? = nil,
+        diaereses: [DiaereseElement]? = nil,
+        dissolution: [[JSONNull?]?]? = nil,
+        downstroke: [Downstroke]? = nil,
+        electrotautomerism: [Double?]? = nil,
+        eleutheromania: [Eleutheromania]? = nil,
+        encrust: Encrust? = nil,
+        entomoid: [Entomoid]? = nil,
+        epipaleolithic: [Epipaleolithic]? = nil,
+        expropriable: [Expropriable]? = nil,
+        faggingly: [FagginglyElement]? = nil,
+        fenks: [FenkElement]? = nil,
+        flagmaking: [FlagmakingElement]? = nil,
+        fluorometer: [Fluorometer]? = nil,
+        fulsome: [Int?]? = nil,
+        fuzzy: [Fuzzy]? = nil,
+        gardenwards: [Gardenward]? = nil,
+        generalissimo: [Generalissimo]? = nil,
+        habeas: [[String: Int]?]? = nil,
+        hemicrystalline: [Hemicrystalline]? = nil,
+        hemocoele: [HemocoeleElement]? = nil,
+        hoister: [Hoister]? = nil,
+        hyperpiesis: [Hyperpiesi]? = nil,
+        hyppish: [Hyppish]? = nil,
+        idealizer: [Idealizer]? = nil,
+        incrustator: [Incrustator]? = nil,
+        intentiveness: [Intentiveness]? = nil,
+        interacinar: Interacinar? = nil,
+        intercorrelation: [[Int]?]? = nil,
+        jacutinga: [Jacutinga]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            centrodesmose: centrodesmose ?? self.centrodesmose,
+            cerograph: cerograph ?? self.cerograph,
+            chemotherapeutics: chemotherapeutics ?? self.chemotherapeutics,
+            cimelia: cimelia ?? self.cimelia,
+            citrated: citrated ?? self.citrated,
+            clinodome: clinodome ?? self.clinodome,
+            coadjust: coadjust ?? self.coadjust,
+            consilience: consilience ?? self.consilience,
+            constructor: constructor ?? self.constructor,
+            continuative: continuative ?? self.continuative,
+            credulity: credulity ?? self.credulity,
+            creviced: creviced ?? self.creviced,
+            cubiculum: cubiculum ?? self.cubiculum,
+            deruralize: deruralize ?? self.deruralize,
+            diaereses: diaereses ?? self.diaereses,
+            dissolution: dissolution ?? self.dissolution,
+            downstroke: downstroke ?? self.downstroke,
+            electrotautomerism: electrotautomerism ?? self.electrotautomerism,
+            eleutheromania: eleutheromania ?? self.eleutheromania,
+            encrust: encrust ?? self.encrust,
+            entomoid: entomoid ?? self.entomoid,
+            epipaleolithic: epipaleolithic ?? self.epipaleolithic,
+            expropriable: expropriable ?? self.expropriable,
+            faggingly: faggingly ?? self.faggingly,
+            fenks: fenks ?? self.fenks,
+            flagmaking: flagmaking ?? self.flagmaking,
+            fluorometer: fluorometer ?? self.fluorometer,
+            fulsome: fulsome ?? self.fulsome,
+            fuzzy: fuzzy ?? self.fuzzy,
+            gardenwards: gardenwards ?? self.gardenwards,
+            generalissimo: generalissimo ?? self.generalissimo,
+            habeas: habeas ?? self.habeas,
+            hemicrystalline: hemicrystalline ?? self.hemicrystalline,
+            hemocoele: hemocoele ?? self.hemocoele,
+            hoister: hoister ?? self.hoister,
+            hyperpiesis: hyperpiesis ?? self.hyperpiesis,
+            hyppish: hyppish ?? self.hyppish,
+            idealizer: idealizer ?? self.idealizer,
+            incrustator: incrustator ?? self.incrustator,
+            intentiveness: intentiveness ?? self.intentiveness,
+            interacinar: interacinar ?? self.interacinar,
+            intercorrelation: intercorrelation ?? self.intercorrelation,
+            jacutinga: jacutinga ?? self.jacutinga
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum CerographElement: Codable {
+    case cerographClass(CerographClass)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CerographClass.self) {
+            self = .cerographClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(CerographElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CerographElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cerographClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - CerographClass
+final class CerographClass: Codable {
+    let apotropaion: JSONNull?
+    let casuary: JSONNull?
+    let creaker: JSONNull?
+    let disqualification: JSONNull?
+    let imperatorious: JSONNull?
+    let impermeabilize: JSONNull?
+    let metastoma: JSONNull?
+    let noctidiurnal: JSONNull?
+    let nonreserve: JSONNull?
+    let ophthalmotonometry: JSONNull?
+    let pailful: JSONNull?
+    let pigfish: JSONNull?
+    let pongee: JSONNull?
+    let prosodical: JSONNull?
+    let scrofuloderm: JSONNull?
+    let storekeeping: JSONNull?
+    let therologist: JSONNull?
+    let tolowa: JSONNull?
+    let tradeful: JSONNull?
+    let unriveting: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case apotropaion = "apotropaion"
+        case casuary = "casuary"
+        case creaker = "creaker"
+        case disqualification = "disqualification"
+        case imperatorious = "imperatorious"
+        case impermeabilize = "impermeabilize"
+        case metastoma = "metastoma"
+        case noctidiurnal = "noctidiurnal"
+        case nonreserve = "nonreserve"
+        case ophthalmotonometry = "ophthalmotonometry"
+        case pailful = "pailful"
+        case pigfish = "pigfish"
+        case pongee = "pongee"
+        case prosodical = "prosodical"
+        case scrofuloderm = "scrofuloderm"
+        case storekeeping = "storekeeping"
+        case therologist = "therologist"
+        case tolowa = "Tolowa"
+        case tradeful = "tradeful"
+        case unriveting = "unriveting"
+    }
+
+    init(apotropaion: JSONNull?, casuary: JSONNull?, creaker: JSONNull?, disqualification: JSONNull?, imperatorious: JSONNull?, impermeabilize: JSONNull?, metastoma: JSONNull?, noctidiurnal: JSONNull?, nonreserve: JSONNull?, ophthalmotonometry: JSONNull?, pailful: JSONNull?, pigfish: JSONNull?, pongee: JSONNull?, prosodical: JSONNull?, scrofuloderm: JSONNull?, storekeeping: JSONNull?, therologist: JSONNull?, tolowa: JSONNull?, tradeful: JSONNull?, unriveting: JSONNull?) {
+        self.apotropaion = apotropaion
+        self.casuary = casuary
+        self.creaker = creaker
+        self.disqualification = disqualification
+        self.imperatorious = imperatorious
+        self.impermeabilize = impermeabilize
+        self.metastoma = metastoma
+        self.noctidiurnal = noctidiurnal
+        self.nonreserve = nonreserve
+        self.ophthalmotonometry = ophthalmotonometry
+        self.pailful = pailful
+        self.pigfish = pigfish
+        self.pongee = pongee
+        self.prosodical = prosodical
+        self.scrofuloderm = scrofuloderm
+        self.storekeeping = storekeeping
+        self.therologist = therologist
+        self.tolowa = tolowa
+        self.tradeful = tradeful
+        self.unriveting = unriveting
+    }
+}
+
+// MARK: CerographClass convenience initializers and mutators
+
+extension CerographClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(CerographClass.self, from: data)
+        self.init(apotropaion: me.apotropaion, casuary: me.casuary, creaker: me.creaker, disqualification: me.disqualification, imperatorious: me.imperatorious, impermeabilize: me.impermeabilize, metastoma: me.metastoma, noctidiurnal: me.noctidiurnal, nonreserve: me.nonreserve, ophthalmotonometry: me.ophthalmotonometry, pailful: me.pailful, pigfish: me.pigfish, pongee: me.pongee, prosodical: me.prosodical, scrofuloderm: me.scrofuloderm, storekeeping: me.storekeeping, therologist: me.therologist, tolowa: me.tolowa, tradeful: me.tradeful, unriveting: me.unriveting)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apotropaion: JSONNull?? = nil,
+        casuary: JSONNull?? = nil,
+        creaker: JSONNull?? = nil,
+        disqualification: JSONNull?? = nil,
+        imperatorious: JSONNull?? = nil,
+        impermeabilize: JSONNull?? = nil,
+        metastoma: JSONNull?? = nil,
+        noctidiurnal: JSONNull?? = nil,
+        nonreserve: JSONNull?? = nil,
+        ophthalmotonometry: JSONNull?? = nil,
+        pailful: JSONNull?? = nil,
+        pigfish: JSONNull?? = nil,
+        pongee: JSONNull?? = nil,
+        prosodical: JSONNull?? = nil,
+        scrofuloderm: JSONNull?? = nil,
+        storekeeping: JSONNull?? = nil,
+        therologist: JSONNull?? = nil,
+        tolowa: JSONNull?? = nil,
+        tradeful: JSONNull?? = nil,
+        unriveting: JSONNull?? = nil
+    ) -> CerographClass {
+        return CerographClass(
+            apotropaion: apotropaion ?? self.apotropaion,
+            casuary: casuary ?? self.casuary,
+            creaker: creaker ?? self.creaker,
+            disqualification: disqualification ?? self.disqualification,
+            imperatorious: imperatorious ?? self.imperatorious,
+            impermeabilize: impermeabilize ?? self.impermeabilize,
+            metastoma: metastoma ?? self.metastoma,
+            noctidiurnal: noctidiurnal ?? self.noctidiurnal,
+            nonreserve: nonreserve ?? self.nonreserve,
+            ophthalmotonometry: ophthalmotonometry ?? self.ophthalmotonometry,
+            pailful: pailful ?? self.pailful,
+            pigfish: pigfish ?? self.pigfish,
+            pongee: pongee ?? self.pongee,
+            prosodical: prosodical ?? self.prosodical,
+            scrofuloderm: scrofuloderm ?? self.scrofuloderm,
+            storekeeping: storekeeping ?? self.storekeeping,
+            therologist: therologist ?? self.therologist,
+            tolowa: tolowa ?? self.tolowa,
+            tradeful: tradeful ?? self.tradeful,
+            unriveting: unriveting ?? self.unriveting
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum ChemotherapeuticElement: Codable {
+    case chemotherapeuticClass(ChemotherapeuticClass)
+    case integer(Int)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(ChemotherapeuticClass.self) {
+            self = .chemotherapeuticClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(ChemotherapeuticElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for ChemotherapeuticElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .chemotherapeuticClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - ChemotherapeuticClass
+final class ChemotherapeuticClass: Codable {
+    let angioneurotic: JSONNull?
+    let availment: JSONNull?
+    let bladelet: JSONNull?
+    let catharticalness: Double?
+    let caulis: JSONNull?
+    let chalcus: JSONNull?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let enteradenological: JSONNull?
+    let homocerc: Bool?
+    let imporosity: JSONNull?
+    let insistently: JSONNull?
+    let intraparietal: JSONNull?
+    let ivied: JSONNull?
+    let maureen: JSONNull?
+    let nonbookish: JSONNull?
+    let nostochine: JSONNull?
+    let nutcracker: JSONNull?
+    let ofttimes: JSONNull?
+    let phenocryst: JSONNull?
+    let precoincident: JSONNull?
+    let ramiferous: JSONNull?
+    let stagmometer: JSONNull?
+    let tetherball: JSONNull?
+    let unshy: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case angioneurotic = "angioneurotic"
+        case availment = "availment"
+        case bladelet = "bladelet"
+        case catharticalness = "catharticalness"
+        case caulis = "caulis"
+        case chalcus = "chalcus"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case enteradenological = "enteradenological"
+        case homocerc = "homocerc"
+        case imporosity = "imporosity"
+        case insistently = "insistently"
+        case intraparietal = "intraparietal"
+        case ivied = "ivied"
+        case maureen = "Maureen"
+        case nonbookish = "nonbookish"
+        case nostochine = "nostochine"
+        case nutcracker = "nutcracker"
+        case ofttimes = "ofttimes"
+        case phenocryst = "phenocryst"
+        case precoincident = "precoincident"
+        case ramiferous = "ramiferous"
+        case stagmometer = "stagmometer"
+        case tetherball = "tetherball"
+        case unshy = "unshy"
+    }
+
+    init(angioneurotic: JSONNull?, availment: JSONNull?, bladelet: JSONNull?, catharticalness: Double?, caulis: JSONNull?, chalcus: JSONNull?, chirotherium: Int?, disdiapason: String?, enteradenological: JSONNull?, homocerc: Bool?, imporosity: JSONNull?, insistently: JSONNull?, intraparietal: JSONNull?, ivied: JSONNull?, maureen: JSONNull?, nonbookish: JSONNull?, nostochine: JSONNull?, nutcracker: JSONNull?, ofttimes: JSONNull?, phenocryst: JSONNull?, precoincident: JSONNull?, ramiferous: JSONNull?, stagmometer: JSONNull?, tetherball: JSONNull?, unshy: JSONNull?) {
+        self.angioneurotic = angioneurotic
+        self.availment = availment
+        self.bladelet = bladelet
+        self.catharticalness = catharticalness
+        self.caulis = caulis
+        self.chalcus = chalcus
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.enteradenological = enteradenological
+        self.homocerc = homocerc
+        self.imporosity = imporosity
+        self.insistently = insistently
+        self.intraparietal = intraparietal
+        self.ivied = ivied
+        self.maureen = maureen
+        self.nonbookish = nonbookish
+        self.nostochine = nostochine
+        self.nutcracker = nutcracker
+        self.ofttimes = ofttimes
+        self.phenocryst = phenocryst
+        self.precoincident = precoincident
+        self.ramiferous = ramiferous
+        self.stagmometer = stagmometer
+        self.tetherball = tetherball
+        self.unshy = unshy
+    }
+}
+
+// MARK: ChemotherapeuticClass convenience initializers and mutators
+
+extension ChemotherapeuticClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(ChemotherapeuticClass.self, from: data)
+        self.init(angioneurotic: me.angioneurotic, availment: me.availment, bladelet: me.bladelet, catharticalness: me.catharticalness, caulis: me.caulis, chalcus: me.chalcus, chirotherium: me.chirotherium, disdiapason: me.disdiapason, enteradenological: me.enteradenological, homocerc: me.homocerc, imporosity: me.imporosity, insistently: me.insistently, intraparietal: me.intraparietal, ivied: me.ivied, maureen: me.maureen, nonbookish: me.nonbookish, nostochine: me.nostochine, nutcracker: me.nutcracker, ofttimes: me.ofttimes, phenocryst: me.phenocryst, precoincident: me.precoincident, ramiferous: me.ramiferous, stagmometer: me.stagmometer, tetherball: me.tetherball, unshy: me.unshy)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        angioneurotic: JSONNull?? = nil,
+        availment: JSONNull?? = nil,
+        bladelet: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        caulis: JSONNull?? = nil,
+        chalcus: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        enteradenological: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        imporosity: JSONNull?? = nil,
+        insistently: JSONNull?? = nil,
+        intraparietal: JSONNull?? = nil,
+        ivied: JSONNull?? = nil,
+        maureen: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        nostochine: JSONNull?? = nil,
+        nutcracker: JSONNull?? = nil,
+        ofttimes: JSONNull?? = nil,
+        phenocryst: JSONNull?? = nil,
+        precoincident: JSONNull?? = nil,
+        ramiferous: JSONNull?? = nil,
+        stagmometer: JSONNull?? = nil,
+        tetherball: JSONNull?? = nil,
+        unshy: JSONNull?? = nil
+    ) -> ChemotherapeuticClass {
+        return ChemotherapeuticClass(
+            angioneurotic: angioneurotic ?? self.angioneurotic,
+            availment: availment ?? self.availment,
+            bladelet: bladelet ?? self.bladelet,
+            catharticalness: catharticalness ?? self.catharticalness,
+            caulis: caulis ?? self.caulis,
+            chalcus: chalcus ?? self.chalcus,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            enteradenological: enteradenological ?? self.enteradenological,
+            homocerc: homocerc ?? self.homocerc,
+            imporosity: imporosity ?? self.imporosity,
+            insistently: insistently ?? self.insistently,
+            intraparietal: intraparietal ?? self.intraparietal,
+            ivied: ivied ?? self.ivied,
+            maureen: maureen ?? self.maureen,
+            nonbookish: nonbookish ?? self.nonbookish,
+            nostochine: nostochine ?? self.nostochine,
+            nutcracker: nutcracker ?? self.nutcracker,
+            ofttimes: ofttimes ?? self.ofttimes,
+            phenocryst: phenocryst ?? self.phenocryst,
+            precoincident: precoincident ?? self.precoincident,
+            ramiferous: ramiferous ?? self.ramiferous,
+            stagmometer: stagmometer ?? self.stagmometer,
+            tetherball: tetherball ?? self.tetherball,
+            unshy: unshy ?? self.unshy
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum CimeliaElement: Codable {
+    case cimeliaClass(CimeliaClass)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(CimeliaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CimeliaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - CimeliaClass
+final class CimeliaClass: Codable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+
+    init(catharticalness: Double, chirotherium: Int, disdiapason: String, homocerc: Bool, nonbookish: JSONNull?) {
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.homocerc = homocerc
+        self.nonbookish = nonbookish
+    }
+}
+
+// MARK: CimeliaClass convenience initializers and mutators
+
+extension CimeliaClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(CimeliaClass.self, from: data)
+        self.init(catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, homocerc: me.homocerc, nonbookish: me.nonbookish)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> CimeliaClass {
+        return CimeliaClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Clinodome: Codable {
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Clinodome.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Clinodome"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum CoadjustElement: Codable {
+    case coadjustClass(CoadjustClass)
+    case double(Double)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(CoadjustClass.self) {
+            self = .coadjustClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(CoadjustElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CoadjustElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .coadjustClass(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - CoadjustClass
+final class CoadjustClass: Codable {
+    let amidosulphonal: JSONNull?
+    let benny: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let ensnare: JSONNull?
+    let homocerc: Bool?
+    let hybridizer: JSONNull?
+    let leastwise: JSONNull?
+    let lof: JSONNull?
+    let monkhood: JSONNull?
+    let netherlandish: JSONNull?
+    let nonbookish: JSONNull?
+    let peonism: JSONNull?
+    let phonelescope: JSONNull?
+    let porphyrogeniture: JSONNull?
+    let preindemnify: JSONNull?
+    let rosal: JSONNull?
+    let scalenous: JSONNull?
+    let scopine: JSONNull?
+    let sedaceae: JSONNull?
+    let suberinize: JSONNull?
+    let symbiot: JSONNull?
+    let tablefellow: JSONNull?
+    let unchargeable: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amidosulphonal = "amidosulphonal"
+        case benny = "Benny"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case ensnare = "ensnare"
+        case homocerc = "homocerc"
+        case hybridizer = "hybridizer"
+        case leastwise = "leastwise"
+        case lof = "lof"
+        case monkhood = "monkhood"
+        case netherlandish = "Netherlandish"
+        case nonbookish = "nonbookish"
+        case peonism = "peonism"
+        case phonelescope = "Phonelescope"
+        case porphyrogeniture = "porphyrogeniture"
+        case preindemnify = "preindemnify"
+        case rosal = "rosal"
+        case scalenous = "scalenous"
+        case scopine = "scopine"
+        case sedaceae = "Sedaceae"
+        case suberinize = "suberinize"
+        case symbiot = "symbiot"
+        case tablefellow = "tablefellow"
+        case unchargeable = "unchargeable"
+    }
+
+    init(amidosulphonal: JSONNull?, benny: JSONNull?, catharticalness: Double?, chirotherium: Int?, disdiapason: String?, ensnare: JSONNull?, homocerc: Bool?, hybridizer: JSONNull?, leastwise: JSONNull?, lof: JSONNull?, monkhood: JSONNull?, netherlandish: JSONNull?, nonbookish: JSONNull?, peonism: JSONNull?, phonelescope: JSONNull?, porphyrogeniture: JSONNull?, preindemnify: JSONNull?, rosal: JSONNull?, scalenous: JSONNull?, scopine: JSONNull?, sedaceae: JSONNull?, suberinize: JSONNull?, symbiot: JSONNull?, tablefellow: JSONNull?, unchargeable: JSONNull?) {
+        self.amidosulphonal = amidosulphonal
+        self.benny = benny
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.ensnare = ensnare
+        self.homocerc = homocerc
+        self.hybridizer = hybridizer
+        self.leastwise = leastwise
+        self.lof = lof
+        self.monkhood = monkhood
+        self.netherlandish = netherlandish
+        self.nonbookish = nonbookish
+        self.peonism = peonism
+        self.phonelescope = phonelescope
+        self.porphyrogeniture = porphyrogeniture
+        self.preindemnify = preindemnify
+        self.rosal = rosal
+        self.scalenous = scalenous
+        self.scopine = scopine
+        self.sedaceae = sedaceae
+        self.suberinize = suberinize
+        self.symbiot = symbiot
+        self.tablefellow = tablefellow
+        self.unchargeable = unchargeable
+    }
+}
+
+// MARK: CoadjustClass convenience initializers and mutators
+
+extension CoadjustClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(CoadjustClass.self, from: data)
+        self.init(amidosulphonal: me.amidosulphonal, benny: me.benny, catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, ensnare: me.ensnare, homocerc: me.homocerc, hybridizer: me.hybridizer, leastwise: me.leastwise, lof: me.lof, monkhood: me.monkhood, netherlandish: me.netherlandish, nonbookish: me.nonbookish, peonism: me.peonism, phonelescope: me.phonelescope, porphyrogeniture: me.porphyrogeniture, preindemnify: me.preindemnify, rosal: me.rosal, scalenous: me.scalenous, scopine: me.scopine, sedaceae: me.sedaceae, suberinize: me.suberinize, symbiot: me.symbiot, tablefellow: me.tablefellow, unchargeable: me.unchargeable)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amidosulphonal: JSONNull?? = nil,
+        benny: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        ensnare: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        hybridizer: JSONNull?? = nil,
+        leastwise: JSONNull?? = nil,
+        lof: JSONNull?? = nil,
+        monkhood: JSONNull?? = nil,
+        netherlandish: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        peonism: JSONNull?? = nil,
+        phonelescope: JSONNull?? = nil,
+        porphyrogeniture: JSONNull?? = nil,
+        preindemnify: JSONNull?? = nil,
+        rosal: JSONNull?? = nil,
+        scalenous: JSONNull?? = nil,
+        scopine: JSONNull?? = nil,
+        sedaceae: JSONNull?? = nil,
+        suberinize: JSONNull?? = nil,
+        symbiot: JSONNull?? = nil,
+        tablefellow: JSONNull?? = nil,
+        unchargeable: JSONNull?? = nil
+    ) -> CoadjustClass {
+        return CoadjustClass(
+            amidosulphonal: amidosulphonal ?? self.amidosulphonal,
+            benny: benny ?? self.benny,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ensnare: ensnare ?? self.ensnare,
+            homocerc: homocerc ?? self.homocerc,
+            hybridizer: hybridizer ?? self.hybridizer,
+            leastwise: leastwise ?? self.leastwise,
+            lof: lof ?? self.lof,
+            monkhood: monkhood ?? self.monkhood,
+            netherlandish: netherlandish ?? self.netherlandish,
+            nonbookish: nonbookish ?? self.nonbookish,
+            peonism: peonism ?? self.peonism,
+            phonelescope: phonelescope ?? self.phonelescope,
+            porphyrogeniture: porphyrogeniture ?? self.porphyrogeniture,
+            preindemnify: preindemnify ?? self.preindemnify,
+            rosal: rosal ?? self.rosal,
+            scalenous: scalenous ?? self.scalenous,
+            scopine: scopine ?? self.scopine,
+            sedaceae: sedaceae ?? self.sedaceae,
+            suberinize: suberinize ?? self.suberinize,
+            symbiot: symbiot ?? self.symbiot,
+            tablefellow: tablefellow ?? self.tablefellow,
+            unchargeable: unchargeable ?? self.unchargeable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Consilience: Codable {
+    case double(Double)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Consilience.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Consilience"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Constructor: Codable {
+    case bool(Bool)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Constructor.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Constructor"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Continuative: Codable {
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Continuative.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Continuative"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum CredulityElement: Codable {
+    case credulityClass(CredulityClass)
+    case integer(Int)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CredulityClass.self) {
+            self = .credulityClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(CredulityElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CredulityElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .credulityClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - CredulityClass
+final class CredulityClass: Codable {
+    let ammonolytic: JSONNull?
+    let bushmaster: JSONNull?
+    let considering: JSONNull?
+    let consuetudinary: JSONNull?
+    let embarras: JSONNull?
+    let fineness: JSONNull?
+    let flaithship: JSONNull?
+    let flavia: JSONNull?
+    let gruffly: JSONNull?
+    let hedychium: JSONNull?
+    let leadwort: JSONNull?
+    let overseriously: JSONNull?
+    let parabola: JSONNull?
+    let pectinatodenticulate: JSONNull?
+    let popean: JSONNull?
+    let pornocrat: JSONNull?
+    let quadrisect: JSONNull?
+    let seriality: JSONNull?
+    let vamphorn: JSONNull?
+    let wharp: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case ammonolytic = "ammonolytic"
+        case bushmaster = "bushmaster"
+        case considering = "considering"
+        case consuetudinary = "consuetudinary"
+        case embarras = "embarras"
+        case fineness = "fineness"
+        case flaithship = "flaithship"
+        case flavia = "Flavia"
+        case gruffly = "gruffly"
+        case hedychium = "Hedychium"
+        case leadwort = "leadwort"
+        case overseriously = "overseriously"
+        case parabola = "parabola"
+        case pectinatodenticulate = "pectinatodenticulate"
+        case popean = "Popean"
+        case pornocrat = "pornocrat"
+        case quadrisect = "quadrisect"
+        case seriality = "seriality"
+        case vamphorn = "vamphorn"
+        case wharp = "wharp"
+    }
+
+    init(ammonolytic: JSONNull?, bushmaster: JSONNull?, considering: JSONNull?, consuetudinary: JSONNull?, embarras: JSONNull?, fineness: JSONNull?, flaithship: JSONNull?, flavia: JSONNull?, gruffly: JSONNull?, hedychium: JSONNull?, leadwort: JSONNull?, overseriously: JSONNull?, parabola: JSONNull?, pectinatodenticulate: JSONNull?, popean: JSONNull?, pornocrat: JSONNull?, quadrisect: JSONNull?, seriality: JSONNull?, vamphorn: JSONNull?, wharp: JSONNull?) {
+        self.ammonolytic = ammonolytic
+        self.bushmaster = bushmaster
+        self.considering = considering
+        self.consuetudinary = consuetudinary
+        self.embarras = embarras
+        self.fineness = fineness
+        self.flaithship = flaithship
+        self.flavia = flavia
+        self.gruffly = gruffly
+        self.hedychium = hedychium
+        self.leadwort = leadwort
+        self.overseriously = overseriously
+        self.parabola = parabola
+        self.pectinatodenticulate = pectinatodenticulate
+        self.popean = popean
+        self.pornocrat = pornocrat
+        self.quadrisect = quadrisect
+        self.seriality = seriality
+        self.vamphorn = vamphorn
+        self.wharp = wharp
+    }
+}
+
+// MARK: CredulityClass convenience initializers and mutators
+
+extension CredulityClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(CredulityClass.self, from: data)
+        self.init(ammonolytic: me.ammonolytic, bushmaster: me.bushmaster, considering: me.considering, consuetudinary: me.consuetudinary, embarras: me.embarras, fineness: me.fineness, flaithship: me.flaithship, flavia: me.flavia, gruffly: me.gruffly, hedychium: me.hedychium, leadwort: me.leadwort, overseriously: me.overseriously, parabola: me.parabola, pectinatodenticulate: me.pectinatodenticulate, popean: me.popean, pornocrat: me.pornocrat, quadrisect: me.quadrisect, seriality: me.seriality, vamphorn: me.vamphorn, wharp: me.wharp)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        ammonolytic: JSONNull?? = nil,
+        bushmaster: JSONNull?? = nil,
+        considering: JSONNull?? = nil,
+        consuetudinary: JSONNull?? = nil,
+        embarras: JSONNull?? = nil,
+        fineness: JSONNull?? = nil,
+        flaithship: JSONNull?? = nil,
+        flavia: JSONNull?? = nil,
+        gruffly: JSONNull?? = nil,
+        hedychium: JSONNull?? = nil,
+        leadwort: JSONNull?? = nil,
+        overseriously: JSONNull?? = nil,
+        parabola: JSONNull?? = nil,
+        pectinatodenticulate: JSONNull?? = nil,
+        popean: JSONNull?? = nil,
+        pornocrat: JSONNull?? = nil,
+        quadrisect: JSONNull?? = nil,
+        seriality: JSONNull?? = nil,
+        vamphorn: JSONNull?? = nil,
+        wharp: JSONNull?? = nil
+    ) -> CredulityClass {
+        return CredulityClass(
+            ammonolytic: ammonolytic ?? self.ammonolytic,
+            bushmaster: bushmaster ?? self.bushmaster,
+            considering: considering ?? self.considering,
+            consuetudinary: consuetudinary ?? self.consuetudinary,
+            embarras: embarras ?? self.embarras,
+            fineness: fineness ?? self.fineness,
+            flaithship: flaithship ?? self.flaithship,
+            flavia: flavia ?? self.flavia,
+            gruffly: gruffly ?? self.gruffly,
+            hedychium: hedychium ?? self.hedychium,
+            leadwort: leadwort ?? self.leadwort,
+            overseriously: overseriously ?? self.overseriously,
+            parabola: parabola ?? self.parabola,
+            pectinatodenticulate: pectinatodenticulate ?? self.pectinatodenticulate,
+            popean: popean ?? self.popean,
+            pornocrat: pornocrat ?? self.pornocrat,
+            quadrisect: quadrisect ?? self.quadrisect,
+            seriality: seriality ?? self.seriality,
+            vamphorn: vamphorn ?? self.vamphorn,
+            wharp: wharp ?? self.wharp
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Creviced: Codable {
+    case bool(Bool)
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Creviced.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Creviced"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum DeruralizeElement: Codable {
+    case bool(Bool)
+    case deruralizeClass(DeruralizeClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(DeruralizeClass.self) {
+            self = .deruralizeClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(DeruralizeElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for DeruralizeElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .deruralizeClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - DeruralizeClass
+final class DeruralizeClass: Codable {
+    let bockerel: JSONNull?
+    let boulder: JSONNull?
+    let churrus: JSONNull?
+    let counterdigged: JSONNull?
+    let dialogite: JSONNull?
+    let digenic: JSONNull?
+    let dunbird: JSONNull?
+    let ergatogyne: JSONNull?
+    let fiendful: JSONNull?
+    let jackrod: JSONNull?
+    let jehovistic: JSONNull?
+    let paninean: JSONNull?
+    let panther: JSONNull?
+    let placentigerous: JSONNull?
+    let romney: JSONNull?
+    let sparm: JSONNull?
+    let tocsin: JSONNull?
+    let unnicked: JSONNull?
+    let unstavable: JSONNull?
+    let windfirm: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case bockerel = "bockerel"
+        case boulder = "boulder"
+        case churrus = "churrus"
+        case counterdigged = "counterdigged"
+        case dialogite = "dialogite"
+        case digenic = "digenic"
+        case dunbird = "dunbird"
+        case ergatogyne = "ergatogyne"
+        case fiendful = "fiendful"
+        case jackrod = "jackrod"
+        case jehovistic = "Jehovistic"
+        case paninean = "Paninean"
+        case panther = "panther"
+        case placentigerous = "placentigerous"
+        case romney = "Romney"
+        case sparm = "sparm"
+        case tocsin = "tocsin"
+        case unnicked = "unnicked"
+        case unstavable = "unstavable"
+        case windfirm = "windfirm"
+    }
+
+    init(bockerel: JSONNull?, boulder: JSONNull?, churrus: JSONNull?, counterdigged: JSONNull?, dialogite: JSONNull?, digenic: JSONNull?, dunbird: JSONNull?, ergatogyne: JSONNull?, fiendful: JSONNull?, jackrod: JSONNull?, jehovistic: JSONNull?, paninean: JSONNull?, panther: JSONNull?, placentigerous: JSONNull?, romney: JSONNull?, sparm: JSONNull?, tocsin: JSONNull?, unnicked: JSONNull?, unstavable: JSONNull?, windfirm: JSONNull?) {
+        self.bockerel = bockerel
+        self.boulder = boulder
+        self.churrus = churrus
+        self.counterdigged = counterdigged
+        self.dialogite = dialogite
+        self.digenic = digenic
+        self.dunbird = dunbird
+        self.ergatogyne = ergatogyne
+        self.fiendful = fiendful
+        self.jackrod = jackrod
+        self.jehovistic = jehovistic
+        self.paninean = paninean
+        self.panther = panther
+        self.placentigerous = placentigerous
+        self.romney = romney
+        self.sparm = sparm
+        self.tocsin = tocsin
+        self.unnicked = unnicked
+        self.unstavable = unstavable
+        self.windfirm = windfirm
+    }
+}
+
+// MARK: DeruralizeClass convenience initializers and mutators
+
+extension DeruralizeClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(DeruralizeClass.self, from: data)
+        self.init(bockerel: me.bockerel, boulder: me.boulder, churrus: me.churrus, counterdigged: me.counterdigged, dialogite: me.dialogite, digenic: me.digenic, dunbird: me.dunbird, ergatogyne: me.ergatogyne, fiendful: me.fiendful, jackrod: me.jackrod, jehovistic: me.jehovistic, paninean: me.paninean, panther: me.panther, placentigerous: me.placentigerous, romney: me.romney, sparm: me.sparm, tocsin: me.tocsin, unnicked: me.unnicked, unstavable: me.unstavable, windfirm: me.windfirm)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        bockerel: JSONNull?? = nil,
+        boulder: JSONNull?? = nil,
+        churrus: JSONNull?? = nil,
+        counterdigged: JSONNull?? = nil,
+        dialogite: JSONNull?? = nil,
+        digenic: JSONNull?? = nil,
+        dunbird: JSONNull?? = nil,
+        ergatogyne: JSONNull?? = nil,
+        fiendful: JSONNull?? = nil,
+        jackrod: JSONNull?? = nil,
+        jehovistic: JSONNull?? = nil,
+        paninean: JSONNull?? = nil,
+        panther: JSONNull?? = nil,
+        placentigerous: JSONNull?? = nil,
+        romney: JSONNull?? = nil,
+        sparm: JSONNull?? = nil,
+        tocsin: JSONNull?? = nil,
+        unnicked: JSONNull?? = nil,
+        unstavable: JSONNull?? = nil,
+        windfirm: JSONNull?? = nil
+    ) -> DeruralizeClass {
+        return DeruralizeClass(
+            bockerel: bockerel ?? self.bockerel,
+            boulder: boulder ?? self.boulder,
+            churrus: churrus ?? self.churrus,
+            counterdigged: counterdigged ?? self.counterdigged,
+            dialogite: dialogite ?? self.dialogite,
+            digenic: digenic ?? self.digenic,
+            dunbird: dunbird ?? self.dunbird,
+            ergatogyne: ergatogyne ?? self.ergatogyne,
+            fiendful: fiendful ?? self.fiendful,
+            jackrod: jackrod ?? self.jackrod,
+            jehovistic: jehovistic ?? self.jehovistic,
+            paninean: paninean ?? self.paninean,
+            panther: panther ?? self.panther,
+            placentigerous: placentigerous ?? self.placentigerous,
+            romney: romney ?? self.romney,
+            sparm: sparm ?? self.sparm,
+            tocsin: tocsin ?? self.tocsin,
+            unnicked: unnicked ?? self.unnicked,
+            unstavable: unstavable ?? self.unstavable,
+            windfirm: windfirm ?? self.windfirm
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum DiaereseElement: Codable {
+    case bool(Bool)
+    case diaereseClass(DiaereseClass)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(DiaereseClass.self) {
+            self = .diaereseClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(DiaereseElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for DiaereseElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .diaereseClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - DiaereseClass
+final class DiaereseClass: Codable {
+    let amoreuxia: JSONNull?
+    let ani: JSONNull?
+    let bernicle: JSONNull?
+    let blackwasher: JSONNull?
+    let blowhard: JSONNull?
+    let broma: JSONNull?
+    let closecross: JSONNull?
+    let congregationalism: JSONNull?
+    let grayly: JSONNull?
+    let historically: JSONNull?
+    let hoast: JSONNull?
+    let irretentive: JSONNull?
+    let parcener: JSONNull?
+    let pedder: JSONNull?
+    let pseudoanatomic: JSONNull?
+    let rhizocarpian: JSONNull?
+    let samel: JSONNull?
+    let silker: JSONNull?
+    let subdentated: JSONNull?
+    let subobscure: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amoreuxia = "Amoreuxia"
+        case ani = "ani"
+        case bernicle = "bernicle"
+        case blackwasher = "blackwasher"
+        case blowhard = "blowhard"
+        case broma = "broma"
+        case closecross = "closecross"
+        case congregationalism = "congregationalism"
+        case grayly = "grayly"
+        case historically = "historically"
+        case hoast = "hoast"
+        case irretentive = "irretentive"
+        case parcener = "parcener"
+        case pedder = "pedder"
+        case pseudoanatomic = "pseudoanatomic"
+        case rhizocarpian = "rhizocarpian"
+        case samel = "samel"
+        case silker = "silker"
+        case subdentated = "subdentated"
+        case subobscure = "subobscure"
+    }
+
+    init(amoreuxia: JSONNull?, ani: JSONNull?, bernicle: JSONNull?, blackwasher: JSONNull?, blowhard: JSONNull?, broma: JSONNull?, closecross: JSONNull?, congregationalism: JSONNull?, grayly: JSONNull?, historically: JSONNull?, hoast: JSONNull?, irretentive: JSONNull?, parcener: JSONNull?, pedder: JSONNull?, pseudoanatomic: JSONNull?, rhizocarpian: JSONNull?, samel: JSONNull?, silker: JSONNull?, subdentated: JSONNull?, subobscure: JSONNull?) {
+        self.amoreuxia = amoreuxia
+        self.ani = ani
+        self.bernicle = bernicle
+        self.blackwasher = blackwasher
+        self.blowhard = blowhard
+        self.broma = broma
+        self.closecross = closecross
+        self.congregationalism = congregationalism
+        self.grayly = grayly
+        self.historically = historically
+        self.hoast = hoast
+        self.irretentive = irretentive
+        self.parcener = parcener
+        self.pedder = pedder
+        self.pseudoanatomic = pseudoanatomic
+        self.rhizocarpian = rhizocarpian
+        self.samel = samel
+        self.silker = silker
+        self.subdentated = subdentated
+        self.subobscure = subobscure
+    }
+}
+
+// MARK: DiaereseClass convenience initializers and mutators
+
+extension DiaereseClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(DiaereseClass.self, from: data)
+        self.init(amoreuxia: me.amoreuxia, ani: me.ani, bernicle: me.bernicle, blackwasher: me.blackwasher, blowhard: me.blowhard, broma: me.broma, closecross: me.closecross, congregationalism: me.congregationalism, grayly: me.grayly, historically: me.historically, hoast: me.hoast, irretentive: me.irretentive, parcener: me.parcener, pedder: me.pedder, pseudoanatomic: me.pseudoanatomic, rhizocarpian: me.rhizocarpian, samel: me.samel, silker: me.silker, subdentated: me.subdentated, subobscure: me.subobscure)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amoreuxia: JSONNull?? = nil,
+        ani: JSONNull?? = nil,
+        bernicle: JSONNull?? = nil,
+        blackwasher: JSONNull?? = nil,
+        blowhard: JSONNull?? = nil,
+        broma: JSONNull?? = nil,
+        closecross: JSONNull?? = nil,
+        congregationalism: JSONNull?? = nil,
+        grayly: JSONNull?? = nil,
+        historically: JSONNull?? = nil,
+        hoast: JSONNull?? = nil,
+        irretentive: JSONNull?? = nil,
+        parcener: JSONNull?? = nil,
+        pedder: JSONNull?? = nil,
+        pseudoanatomic: JSONNull?? = nil,
+        rhizocarpian: JSONNull?? = nil,
+        samel: JSONNull?? = nil,
+        silker: JSONNull?? = nil,
+        subdentated: JSONNull?? = nil,
+        subobscure: JSONNull?? = nil
+    ) -> DiaereseClass {
+        return DiaereseClass(
+            amoreuxia: amoreuxia ?? self.amoreuxia,
+            ani: ani ?? self.ani,
+            bernicle: bernicle ?? self.bernicle,
+            blackwasher: blackwasher ?? self.blackwasher,
+            blowhard: blowhard ?? self.blowhard,
+            broma: broma ?? self.broma,
+            closecross: closecross ?? self.closecross,
+            congregationalism: congregationalism ?? self.congregationalism,
+            grayly: grayly ?? self.grayly,
+            historically: historically ?? self.historically,
+            hoast: hoast ?? self.hoast,
+            irretentive: irretentive ?? self.irretentive,
+            parcener: parcener ?? self.parcener,
+            pedder: pedder ?? self.pedder,
+            pseudoanatomic: pseudoanatomic ?? self.pseudoanatomic,
+            rhizocarpian: rhizocarpian ?? self.rhizocarpian,
+            samel: samel ?? self.samel,
+            silker: silker ?? self.silker,
+            subdentated: subdentated ?? self.subdentated,
+            subobscure: subobscure ?? self.subobscure
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Downstroke: Codable {
+    case bool(Bool)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Downstroke.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Downstroke"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Eleutheromania: Codable {
+    case double(Double)
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Eleutheromania.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Eleutheromania"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Encrust
+final class Encrust: Codable {
+    let comradely: JSONNull?
+    let diacanthous: JSONNull?
+    let feminineness: JSONNull?
+    let gossamered: JSONNull?
+    let hibernia: JSONNull?
+    let hibiscus: JSONNull?
+    let lepidosauria: JSONNull?
+    let lollingly: JSONNull?
+    let manager: JSONNull?
+    let mechanic: JSONNull?
+    let overminuteness: JSONNull?
+    let papelonne: JSONNull?
+    let plebification: JSONNull?
+    let pugmiller: JSONNull?
+    let recoveror: JSONNull?
+    let spermatoblastic: JSONNull?
+    let syllidae: JSONNull?
+    let ungyved: JSONNull?
+    let whirlabout: JSONNull?
+    let woodenware: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case comradely = "comradely"
+        case diacanthous = "diacanthous"
+        case feminineness = "feminineness"
+        case gossamered = "gossamered"
+        case hibernia = "Hibernia"
+        case hibiscus = "Hibiscus"
+        case lepidosauria = "Lepidosauria"
+        case lollingly = "lollingly"
+        case manager = "manager"
+        case mechanic = "mechanic"
+        case overminuteness = "overminuteness"
+        case papelonne = "papelonne"
+        case plebification = "plebification"
+        case pugmiller = "pugmiller"
+        case recoveror = "recoveror"
+        case spermatoblastic = "spermatoblastic"
+        case syllidae = "Syllidae"
+        case ungyved = "ungyved"
+        case whirlabout = "whirlabout"
+        case woodenware = "woodenware"
+    }
+
+    init(comradely: JSONNull?, diacanthous: JSONNull?, feminineness: JSONNull?, gossamered: JSONNull?, hibernia: JSONNull?, hibiscus: JSONNull?, lepidosauria: JSONNull?, lollingly: JSONNull?, manager: JSONNull?, mechanic: JSONNull?, overminuteness: JSONNull?, papelonne: JSONNull?, plebification: JSONNull?, pugmiller: JSONNull?, recoveror: JSONNull?, spermatoblastic: JSONNull?, syllidae: JSONNull?, ungyved: JSONNull?, whirlabout: JSONNull?, woodenware: JSONNull?) {
+        self.comradely = comradely
+        self.diacanthous = diacanthous
+        self.feminineness = feminineness
+        self.gossamered = gossamered
+        self.hibernia = hibernia
+        self.hibiscus = hibiscus
+        self.lepidosauria = lepidosauria
+        self.lollingly = lollingly
+        self.manager = manager
+        self.mechanic = mechanic
+        self.overminuteness = overminuteness
+        self.papelonne = papelonne
+        self.plebification = plebification
+        self.pugmiller = pugmiller
+        self.recoveror = recoveror
+        self.spermatoblastic = spermatoblastic
+        self.syllidae = syllidae
+        self.ungyved = ungyved
+        self.whirlabout = whirlabout
+        self.woodenware = woodenware
+    }
+}
+
+// MARK: Encrust convenience initializers and mutators
+
+extension Encrust {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Encrust.self, from: data)
+        self.init(comradely: me.comradely, diacanthous: me.diacanthous, feminineness: me.feminineness, gossamered: me.gossamered, hibernia: me.hibernia, hibiscus: me.hibiscus, lepidosauria: me.lepidosauria, lollingly: me.lollingly, manager: me.manager, mechanic: me.mechanic, overminuteness: me.overminuteness, papelonne: me.papelonne, plebification: me.plebification, pugmiller: me.pugmiller, recoveror: me.recoveror, spermatoblastic: me.spermatoblastic, syllidae: me.syllidae, ungyved: me.ungyved, whirlabout: me.whirlabout, woodenware: me.woodenware)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        comradely: JSONNull?? = nil,
+        diacanthous: JSONNull?? = nil,
+        feminineness: JSONNull?? = nil,
+        gossamered: JSONNull?? = nil,
+        hibernia: JSONNull?? = nil,
+        hibiscus: JSONNull?? = nil,
+        lepidosauria: JSONNull?? = nil,
+        lollingly: JSONNull?? = nil,
+        manager: JSONNull?? = nil,
+        mechanic: JSONNull?? = nil,
+        overminuteness: JSONNull?? = nil,
+        papelonne: JSONNull?? = nil,
+        plebification: JSONNull?? = nil,
+        pugmiller: JSONNull?? = nil,
+        recoveror: JSONNull?? = nil,
+        spermatoblastic: JSONNull?? = nil,
+        syllidae: JSONNull?? = nil,
+        ungyved: JSONNull?? = nil,
+        whirlabout: JSONNull?? = nil,
+        woodenware: JSONNull?? = nil
+    ) -> Encrust {
+        return Encrust(
+            comradely: comradely ?? self.comradely,
+            diacanthous: diacanthous ?? self.diacanthous,
+            feminineness: feminineness ?? self.feminineness,
+            gossamered: gossamered ?? self.gossamered,
+            hibernia: hibernia ?? self.hibernia,
+            hibiscus: hibiscus ?? self.hibiscus,
+            lepidosauria: lepidosauria ?? self.lepidosauria,
+            lollingly: lollingly ?? self.lollingly,
+            manager: manager ?? self.manager,
+            mechanic: mechanic ?? self.mechanic,
+            overminuteness: overminuteness ?? self.overminuteness,
+            papelonne: papelonne ?? self.papelonne,
+            plebification: plebification ?? self.plebification,
+            pugmiller: pugmiller ?? self.pugmiller,
+            recoveror: recoveror ?? self.recoveror,
+            spermatoblastic: spermatoblastic ?? self.spermatoblastic,
+            syllidae: syllidae ?? self.syllidae,
+            ungyved: ungyved ?? self.ungyved,
+            whirlabout: whirlabout ?? self.whirlabout,
+            woodenware: woodenware ?? self.woodenware
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Entomoid: Codable {
+    case cimeliaClass(CimeliaClass)
+    case integer(Int)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Entomoid.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Entomoid"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Epipaleolithic: Codable {
+    case double(Double)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Epipaleolithic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Epipaleolithic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Expropriable: Codable {
+    case cimeliaClass(CimeliaClass)
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Expropriable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Expropriable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum FagginglyElement: Codable {
+    case double(Double)
+    case fagginglyClass(FagginglyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(FagginglyClass.self) {
+            self = .fagginglyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(FagginglyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for FagginglyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .fagginglyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - FagginglyClass
+final class FagginglyClass: Codable {
+    let abranchian: JSONNull?
+    let aculeiform: JSONNull?
+    let adiaphoristic: JSONNull?
+    let adoptionism: JSONNull?
+    let anglic: JSONNull?
+    let antrotomy: JSONNull?
+    let coerciveness: JSONNull?
+    let decorist: JSONNull?
+    let duckhood: JSONNull?
+    let heteromeri: JSONNull?
+    let hypochnose: JSONNull?
+    let lochage: JSONNull?
+    let melee: JSONNull?
+    let nonconformitant: JSONNull?
+    let poinsettia: JSONNull?
+    let putatively: JSONNull?
+    let semivolatile: JSONNull?
+    let soleas: JSONNull?
+    let unfastenable: JSONNull?
+    let unmillinered: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case abranchian = "abranchian"
+        case aculeiform = "aculeiform"
+        case adiaphoristic = "adiaphoristic"
+        case adoptionism = "adoptionism"
+        case anglic = "Anglic"
+        case antrotomy = "antrotomy"
+        case coerciveness = "coerciveness"
+        case decorist = "decorist"
+        case duckhood = "duckhood"
+        case heteromeri = "Heteromeri"
+        case hypochnose = "hypochnose"
+        case lochage = "lochage"
+        case melee = "melee"
+        case nonconformitant = "nonconformitant"
+        case poinsettia = "Poinsettia"
+        case putatively = "putatively"
+        case semivolatile = "semivolatile"
+        case soleas = "soleas"
+        case unfastenable = "unfastenable"
+        case unmillinered = "unmillinered"
+    }
+
+    init(abranchian: JSONNull?, aculeiform: JSONNull?, adiaphoristic: JSONNull?, adoptionism: JSONNull?, anglic: JSONNull?, antrotomy: JSONNull?, coerciveness: JSONNull?, decorist: JSONNull?, duckhood: JSONNull?, heteromeri: JSONNull?, hypochnose: JSONNull?, lochage: JSONNull?, melee: JSONNull?, nonconformitant: JSONNull?, poinsettia: JSONNull?, putatively: JSONNull?, semivolatile: JSONNull?, soleas: JSONNull?, unfastenable: JSONNull?, unmillinered: JSONNull?) {
+        self.abranchian = abranchian
+        self.aculeiform = aculeiform
+        self.adiaphoristic = adiaphoristic
+        self.adoptionism = adoptionism
+        self.anglic = anglic
+        self.antrotomy = antrotomy
+        self.coerciveness = coerciveness
+        self.decorist = decorist
+        self.duckhood = duckhood
+        self.heteromeri = heteromeri
+        self.hypochnose = hypochnose
+        self.lochage = lochage
+        self.melee = melee
+        self.nonconformitant = nonconformitant
+        self.poinsettia = poinsettia
+        self.putatively = putatively
+        self.semivolatile = semivolatile
+        self.soleas = soleas
+        self.unfastenable = unfastenable
+        self.unmillinered = unmillinered
+    }
+}
+
+// MARK: FagginglyClass convenience initializers and mutators
+
+extension FagginglyClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(FagginglyClass.self, from: data)
+        self.init(abranchian: me.abranchian, aculeiform: me.aculeiform, adiaphoristic: me.adiaphoristic, adoptionism: me.adoptionism, anglic: me.anglic, antrotomy: me.antrotomy, coerciveness: me.coerciveness, decorist: me.decorist, duckhood: me.duckhood, heteromeri: me.heteromeri, hypochnose: me.hypochnose, lochage: me.lochage, melee: me.melee, nonconformitant: me.nonconformitant, poinsettia: me.poinsettia, putatively: me.putatively, semivolatile: me.semivolatile, soleas: me.soleas, unfastenable: me.unfastenable, unmillinered: me.unmillinered)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        abranchian: JSONNull?? = nil,
+        aculeiform: JSONNull?? = nil,
+        adiaphoristic: JSONNull?? = nil,
+        adoptionism: JSONNull?? = nil,
+        anglic: JSONNull?? = nil,
+        antrotomy: JSONNull?? = nil,
+        coerciveness: JSONNull?? = nil,
+        decorist: JSONNull?? = nil,
+        duckhood: JSONNull?? = nil,
+        heteromeri: JSONNull?? = nil,
+        hypochnose: JSONNull?? = nil,
+        lochage: JSONNull?? = nil,
+        melee: JSONNull?? = nil,
+        nonconformitant: JSONNull?? = nil,
+        poinsettia: JSONNull?? = nil,
+        putatively: JSONNull?? = nil,
+        semivolatile: JSONNull?? = nil,
+        soleas: JSONNull?? = nil,
+        unfastenable: JSONNull?? = nil,
+        unmillinered: JSONNull?? = nil
+    ) -> FagginglyClass {
+        return FagginglyClass(
+            abranchian: abranchian ?? self.abranchian,
+            aculeiform: aculeiform ?? self.aculeiform,
+            adiaphoristic: adiaphoristic ?? self.adiaphoristic,
+            adoptionism: adoptionism ?? self.adoptionism,
+            anglic: anglic ?? self.anglic,
+            antrotomy: antrotomy ?? self.antrotomy,
+            coerciveness: coerciveness ?? self.coerciveness,
+            decorist: decorist ?? self.decorist,
+            duckhood: duckhood ?? self.duckhood,
+            heteromeri: heteromeri ?? self.heteromeri,
+            hypochnose: hypochnose ?? self.hypochnose,
+            lochage: lochage ?? self.lochage,
+            melee: melee ?? self.melee,
+            nonconformitant: nonconformitant ?? self.nonconformitant,
+            poinsettia: poinsettia ?? self.poinsettia,
+            putatively: putatively ?? self.putatively,
+            semivolatile: semivolatile ?? self.semivolatile,
+            soleas: soleas ?? self.soleas,
+            unfastenable: unfastenable ?? self.unfastenable,
+            unmillinered: unmillinered ?? self.unmillinered
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum FenkElement: Codable {
+    case fenkClass(FenkClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(FenkClass.self) {
+            self = .fenkClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(FenkElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for FenkElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .fenkClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - FenkClass
+final class FenkClass: Codable {
+    let apoise: JSONNull?
+    let astronomize: JSONNull?
+    let cockhorse: JSONNull?
+    let copular: JSONNull?
+    let dagomba: JSONNull?
+    let draffy: JSONNull?
+    let foreigner: JSONNull?
+    let guyandot: JSONNull?
+    let neurogliosis: JSONNull?
+    let osmious: JSONNull?
+    let palpitate: JSONNull?
+    let rebukeable: JSONNull?
+    let reinwardtia: JSONNull?
+    let reservatory: JSONNull?
+    let scalt: JSONNull?
+    let scripturalize: JSONNull?
+    let tintometer: JSONNull?
+    let tritoness: JSONNull?
+    let undergrade: JSONNull?
+    let undermountain: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case apoise = "apoise"
+        case astronomize = "astronomize"
+        case cockhorse = "cockhorse"
+        case copular = "copular"
+        case dagomba = "Dagomba"
+        case draffy = "draffy"
+        case foreigner = "foreigner"
+        case guyandot = "Guyandot"
+        case neurogliosis = "neurogliosis"
+        case osmious = "osmious"
+        case palpitate = "palpitate"
+        case rebukeable = "rebukeable"
+        case reinwardtia = "Reinwardtia"
+        case reservatory = "reservatory"
+        case scalt = "scalt"
+        case scripturalize = "scripturalize"
+        case tintometer = "tintometer"
+        case tritoness = "Tritoness"
+        case undergrade = "undergrade"
+        case undermountain = "undermountain"
+    }
+
+    init(apoise: JSONNull?, astronomize: JSONNull?, cockhorse: JSONNull?, copular: JSONNull?, dagomba: JSONNull?, draffy: JSONNull?, foreigner: JSONNull?, guyandot: JSONNull?, neurogliosis: JSONNull?, osmious: JSONNull?, palpitate: JSONNull?, rebukeable: JSONNull?, reinwardtia: JSONNull?, reservatory: JSONNull?, scalt: JSONNull?, scripturalize: JSONNull?, tintometer: JSONNull?, tritoness: JSONNull?, undergrade: JSONNull?, undermountain: JSONNull?) {
+        self.apoise = apoise
+        self.astronomize = astronomize
+        self.cockhorse = cockhorse
+        self.copular = copular
+        self.dagomba = dagomba
+        self.draffy = draffy
+        self.foreigner = foreigner
+        self.guyandot = guyandot
+        self.neurogliosis = neurogliosis
+        self.osmious = osmious
+        self.palpitate = palpitate
+        self.rebukeable = rebukeable
+        self.reinwardtia = reinwardtia
+        self.reservatory = reservatory
+        self.scalt = scalt
+        self.scripturalize = scripturalize
+        self.tintometer = tintometer
+        self.tritoness = tritoness
+        self.undergrade = undergrade
+        self.undermountain = undermountain
+    }
+}
+
+// MARK: FenkClass convenience initializers and mutators
+
+extension FenkClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(FenkClass.self, from: data)
+        self.init(apoise: me.apoise, astronomize: me.astronomize, cockhorse: me.cockhorse, copular: me.copular, dagomba: me.dagomba, draffy: me.draffy, foreigner: me.foreigner, guyandot: me.guyandot, neurogliosis: me.neurogliosis, osmious: me.osmious, palpitate: me.palpitate, rebukeable: me.rebukeable, reinwardtia: me.reinwardtia, reservatory: me.reservatory, scalt: me.scalt, scripturalize: me.scripturalize, tintometer: me.tintometer, tritoness: me.tritoness, undergrade: me.undergrade, undermountain: me.undermountain)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apoise: JSONNull?? = nil,
+        astronomize: JSONNull?? = nil,
+        cockhorse: JSONNull?? = nil,
+        copular: JSONNull?? = nil,
+        dagomba: JSONNull?? = nil,
+        draffy: JSONNull?? = nil,
+        foreigner: JSONNull?? = nil,
+        guyandot: JSONNull?? = nil,
+        neurogliosis: JSONNull?? = nil,
+        osmious: JSONNull?? = nil,
+        palpitate: JSONNull?? = nil,
+        rebukeable: JSONNull?? = nil,
+        reinwardtia: JSONNull?? = nil,
+        reservatory: JSONNull?? = nil,
+        scalt: JSONNull?? = nil,
+        scripturalize: JSONNull?? = nil,
+        tintometer: JSONNull?? = nil,
+        tritoness: JSONNull?? = nil,
+        undergrade: JSONNull?? = nil,
+        undermountain: JSONNull?? = nil
+    ) -> FenkClass {
+        return FenkClass(
+            apoise: apoise ?? self.apoise,
+            astronomize: astronomize ?? self.astronomize,
+            cockhorse: cockhorse ?? self.cockhorse,
+            copular: copular ?? self.copular,
+            dagomba: dagomba ?? self.dagomba,
+            draffy: draffy ?? self.draffy,
+            foreigner: foreigner ?? self.foreigner,
+            guyandot: guyandot ?? self.guyandot,
+            neurogliosis: neurogliosis ?? self.neurogliosis,
+            osmious: osmious ?? self.osmious,
+            palpitate: palpitate ?? self.palpitate,
+            rebukeable: rebukeable ?? self.rebukeable,
+            reinwardtia: reinwardtia ?? self.reinwardtia,
+            reservatory: reservatory ?? self.reservatory,
+            scalt: scalt ?? self.scalt,
+            scripturalize: scripturalize ?? self.scripturalize,
+            tintometer: tintometer ?? self.tintometer,
+            tritoness: tritoness ?? self.tritoness,
+            undergrade: undergrade ?? self.undergrade,
+            undermountain: undermountain ?? self.undermountain
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum FlagmakingElement: Codable {
+    case bool(Bool)
+    case double(Double)
+    case flagmakingClass(FlagmakingClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(FlagmakingClass.self) {
+            self = .flagmakingClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(FlagmakingElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for FlagmakingElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .flagmakingClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - FlagmakingClass
+final class FlagmakingClass: Codable {
+    let albarco: JSONNull?
+    let bunodonta: JSONNull?
+    let hornify: JSONNull?
+    let hydrocorisae: JSONNull?
+    let hypoglossus: JSONNull?
+    let inexpiably: JSONNull?
+    let ingratitude: JSONNull?
+    let ladyfly: JSONNull?
+    let medicament: JSONNull?
+    let monogrammatic: JSONNull?
+    let nobbut: JSONNull?
+    let notacanthidae: JSONNull?
+    let polyplacophore: JSONNull?
+    let proexercise: JSONNull?
+    let protoplast: JSONNull?
+    let puzzling: JSONNull?
+    let splanchnoskeleton: JSONNull?
+    let unloveliness: JSONNull?
+    let unquarantined: JSONNull?
+    let unrenounceable: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case albarco = "albarco"
+        case bunodonta = "Bunodonta"
+        case hornify = "hornify"
+        case hydrocorisae = "Hydrocorisae"
+        case hypoglossus = "hypoglossus"
+        case inexpiably = "inexpiably"
+        case ingratitude = "ingratitude"
+        case ladyfly = "ladyfly"
+        case medicament = "medicament"
+        case monogrammatic = "monogrammatic"
+        case nobbut = "nobbut"
+        case notacanthidae = "Notacanthidae"
+        case polyplacophore = "polyplacophore"
+        case proexercise = "proexercise"
+        case protoplast = "protoplast"
+        case puzzling = "puzzling"
+        case splanchnoskeleton = "splanchnoskeleton"
+        case unloveliness = "unloveliness"
+        case unquarantined = "unquarantined"
+        case unrenounceable = "unrenounceable"
+    }
+
+    init(albarco: JSONNull?, bunodonta: JSONNull?, hornify: JSONNull?, hydrocorisae: JSONNull?, hypoglossus: JSONNull?, inexpiably: JSONNull?, ingratitude: JSONNull?, ladyfly: JSONNull?, medicament: JSONNull?, monogrammatic: JSONNull?, nobbut: JSONNull?, notacanthidae: JSONNull?, polyplacophore: JSONNull?, proexercise: JSONNull?, protoplast: JSONNull?, puzzling: JSONNull?, splanchnoskeleton: JSONNull?, unloveliness: JSONNull?, unquarantined: JSONNull?, unrenounceable: JSONNull?) {
+        self.albarco = albarco
+        self.bunodonta = bunodonta
+        self.hornify = hornify
+        self.hydrocorisae = hydrocorisae
+        self.hypoglossus = hypoglossus
+        self.inexpiably = inexpiably
+        self.ingratitude = ingratitude
+        self.ladyfly = ladyfly
+        self.medicament = medicament
+        self.monogrammatic = monogrammatic
+        self.nobbut = nobbut
+        self.notacanthidae = notacanthidae
+        self.polyplacophore = polyplacophore
+        self.proexercise = proexercise
+        self.protoplast = protoplast
+        self.puzzling = puzzling
+        self.splanchnoskeleton = splanchnoskeleton
+        self.unloveliness = unloveliness
+        self.unquarantined = unquarantined
+        self.unrenounceable = unrenounceable
+    }
+}
+
+// MARK: FlagmakingClass convenience initializers and mutators
+
+extension FlagmakingClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(FlagmakingClass.self, from: data)
+        self.init(albarco: me.albarco, bunodonta: me.bunodonta, hornify: me.hornify, hydrocorisae: me.hydrocorisae, hypoglossus: me.hypoglossus, inexpiably: me.inexpiably, ingratitude: me.ingratitude, ladyfly: me.ladyfly, medicament: me.medicament, monogrammatic: me.monogrammatic, nobbut: me.nobbut, notacanthidae: me.notacanthidae, polyplacophore: me.polyplacophore, proexercise: me.proexercise, protoplast: me.protoplast, puzzling: me.puzzling, splanchnoskeleton: me.splanchnoskeleton, unloveliness: me.unloveliness, unquarantined: me.unquarantined, unrenounceable: me.unrenounceable)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        albarco: JSONNull?? = nil,
+        bunodonta: JSONNull?? = nil,
+        hornify: JSONNull?? = nil,
+        hydrocorisae: JSONNull?? = nil,
+        hypoglossus: JSONNull?? = nil,
+        inexpiably: JSONNull?? = nil,
+        ingratitude: JSONNull?? = nil,
+        ladyfly: JSONNull?? = nil,
+        medicament: JSONNull?? = nil,
+        monogrammatic: JSONNull?? = nil,
+        nobbut: JSONNull?? = nil,
+        notacanthidae: JSONNull?? = nil,
+        polyplacophore: JSONNull?? = nil,
+        proexercise: JSONNull?? = nil,
+        protoplast: JSONNull?? = nil,
+        puzzling: JSONNull?? = nil,
+        splanchnoskeleton: JSONNull?? = nil,
+        unloveliness: JSONNull?? = nil,
+        unquarantined: JSONNull?? = nil,
+        unrenounceable: JSONNull?? = nil
+    ) -> FlagmakingClass {
+        return FlagmakingClass(
+            albarco: albarco ?? self.albarco,
+            bunodonta: bunodonta ?? self.bunodonta,
+            hornify: hornify ?? self.hornify,
+            hydrocorisae: hydrocorisae ?? self.hydrocorisae,
+            hypoglossus: hypoglossus ?? self.hypoglossus,
+            inexpiably: inexpiably ?? self.inexpiably,
+            ingratitude: ingratitude ?? self.ingratitude,
+            ladyfly: ladyfly ?? self.ladyfly,
+            medicament: medicament ?? self.medicament,
+            monogrammatic: monogrammatic ?? self.monogrammatic,
+            nobbut: nobbut ?? self.nobbut,
+            notacanthidae: notacanthidae ?? self.notacanthidae,
+            polyplacophore: polyplacophore ?? self.polyplacophore,
+            proexercise: proexercise ?? self.proexercise,
+            protoplast: protoplast ?? self.protoplast,
+            puzzling: puzzling ?? self.puzzling,
+            splanchnoskeleton: splanchnoskeleton ?? self.splanchnoskeleton,
+            unloveliness: unloveliness ?? self.unloveliness,
+            unquarantined: unquarantined ?? self.unquarantined,
+            unrenounceable: unrenounceable ?? self.unrenounceable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Fluorometer: Codable {
+    case integer(Int)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Fluorometer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Fluorometer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Fuzzy: Codable {
+    case integer(Int)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Fuzzy.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Fuzzy"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Gardenward: Codable {
+    case bool(Bool)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Gardenward.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Gardenward"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Generalissimo: Codable {
+    case bool(Bool)
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Generalissimo.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Generalissimo"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Hemicrystalline: Codable {
+    case cimeliaClass(CimeliaClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Hemicrystalline.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hemicrystalline"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum HemocoeleElement: Codable {
+    case hemocoeleClass(HemocoeleClass)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(HemocoeleClass.self) {
+            self = .hemocoeleClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(HemocoeleElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for HemocoeleElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .hemocoeleClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - HemocoeleClass
+final class HemocoeleClass: Codable {
+    let acrogamy: JSONNull?
+    let amelification: JSONNull?
+    let autobiographic: JSONNull?
+    let berat: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let disproportionably: JSONNull?
+    let erythrite: JSONNull?
+    let graphic: JSONNull?
+    let hepatological: JSONNull?
+    let homocerc: Bool?
+    let incommensurably: JSONNull?
+    let misaffirm: JSONNull?
+    let nonbookish: JSONNull?
+    let pocketbook: JSONNull?
+    let sclerometric: JSONNull?
+    let stambouline: JSONNull?
+    let stickpin: JSONNull?
+    let tubulure: JSONNull?
+    let undelated: JSONNull?
+    let unsalt: JSONNull?
+    let untutelar: JSONNull?
+    let vagrant: JSONNull?
+    let walt: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acrogamy = "acrogamy"
+        case amelification = "amelification"
+        case autobiographic = "autobiographic"
+        case berat = "berat"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case disproportionably = "disproportionably"
+        case erythrite = "erythrite"
+        case graphic = "graphic"
+        case hepatological = "hepatological"
+        case homocerc = "homocerc"
+        case incommensurably = "incommensurably"
+        case misaffirm = "misaffirm"
+        case nonbookish = "nonbookish"
+        case pocketbook = "pocketbook"
+        case sclerometric = "sclerometric"
+        case stambouline = "stambouline"
+        case stickpin = "stickpin"
+        case tubulure = "tubulure"
+        case undelated = "undelated"
+        case unsalt = "unsalt"
+        case untutelar = "untutelar"
+        case vagrant = "vagrant"
+        case walt = "Walt"
+    }
+
+    init(acrogamy: JSONNull?, amelification: JSONNull?, autobiographic: JSONNull?, berat: JSONNull?, catharticalness: Double?, chirotherium: Int?, disdiapason: String?, disproportionably: JSONNull?, erythrite: JSONNull?, graphic: JSONNull?, hepatological: JSONNull?, homocerc: Bool?, incommensurably: JSONNull?, misaffirm: JSONNull?, nonbookish: JSONNull?, pocketbook: JSONNull?, sclerometric: JSONNull?, stambouline: JSONNull?, stickpin: JSONNull?, tubulure: JSONNull?, undelated: JSONNull?, unsalt: JSONNull?, untutelar: JSONNull?, vagrant: JSONNull?, walt: JSONNull?) {
+        self.acrogamy = acrogamy
+        self.amelification = amelification
+        self.autobiographic = autobiographic
+        self.berat = berat
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.disproportionably = disproportionably
+        self.erythrite = erythrite
+        self.graphic = graphic
+        self.hepatological = hepatological
+        self.homocerc = homocerc
+        self.incommensurably = incommensurably
+        self.misaffirm = misaffirm
+        self.nonbookish = nonbookish
+        self.pocketbook = pocketbook
+        self.sclerometric = sclerometric
+        self.stambouline = stambouline
+        self.stickpin = stickpin
+        self.tubulure = tubulure
+        self.undelated = undelated
+        self.unsalt = unsalt
+        self.untutelar = untutelar
+        self.vagrant = vagrant
+        self.walt = walt
+    }
+}
+
+// MARK: HemocoeleClass convenience initializers and mutators
+
+extension HemocoeleClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(HemocoeleClass.self, from: data)
+        self.init(acrogamy: me.acrogamy, amelification: me.amelification, autobiographic: me.autobiographic, berat: me.berat, catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, disproportionably: me.disproportionably, erythrite: me.erythrite, graphic: me.graphic, hepatological: me.hepatological, homocerc: me.homocerc, incommensurably: me.incommensurably, misaffirm: me.misaffirm, nonbookish: me.nonbookish, pocketbook: me.pocketbook, sclerometric: me.sclerometric, stambouline: me.stambouline, stickpin: me.stickpin, tubulure: me.tubulure, undelated: me.undelated, unsalt: me.unsalt, untutelar: me.untutelar, vagrant: me.vagrant, walt: me.walt)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acrogamy: JSONNull?? = nil,
+        amelification: JSONNull?? = nil,
+        autobiographic: JSONNull?? = nil,
+        berat: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        disproportionably: JSONNull?? = nil,
+        erythrite: JSONNull?? = nil,
+        graphic: JSONNull?? = nil,
+        hepatological: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        incommensurably: JSONNull?? = nil,
+        misaffirm: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        pocketbook: JSONNull?? = nil,
+        sclerometric: JSONNull?? = nil,
+        stambouline: JSONNull?? = nil,
+        stickpin: JSONNull?? = nil,
+        tubulure: JSONNull?? = nil,
+        undelated: JSONNull?? = nil,
+        unsalt: JSONNull?? = nil,
+        untutelar: JSONNull?? = nil,
+        vagrant: JSONNull?? = nil,
+        walt: JSONNull?? = nil
+    ) -> HemocoeleClass {
+        return HemocoeleClass(
+            acrogamy: acrogamy ?? self.acrogamy,
+            amelification: amelification ?? self.amelification,
+            autobiographic: autobiographic ?? self.autobiographic,
+            berat: berat ?? self.berat,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            disproportionably: disproportionably ?? self.disproportionably,
+            erythrite: erythrite ?? self.erythrite,
+            graphic: graphic ?? self.graphic,
+            hepatological: hepatological ?? self.hepatological,
+            homocerc: homocerc ?? self.homocerc,
+            incommensurably: incommensurably ?? self.incommensurably,
+            misaffirm: misaffirm ?? self.misaffirm,
+            nonbookish: nonbookish ?? self.nonbookish,
+            pocketbook: pocketbook ?? self.pocketbook,
+            sclerometric: sclerometric ?? self.sclerometric,
+            stambouline: stambouline ?? self.stambouline,
+            stickpin: stickpin ?? self.stickpin,
+            tubulure: tubulure ?? self.tubulure,
+            undelated: undelated ?? self.undelated,
+            unsalt: unsalt ?? self.unsalt,
+            untutelar: untutelar ?? self.untutelar,
+            vagrant: vagrant ?? self.vagrant,
+            walt: walt ?? self.walt
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Hoister: Codable {
+    case cimeliaClass(CimeliaClass)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Hoister.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hoister"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Hyperpiesi: Codable {
+    case cimeliaClass(CimeliaClass)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Hyperpiesi.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hyperpiesi"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Hyppish: Codable {
+    case bool(Bool)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Hyppish.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hyppish"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Idealizer: Codable {
+    case cimeliaClass(CimeliaClass)
+    case integer(Int)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Idealizer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Idealizer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Incrustator: Codable {
+    case integer(Int)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Incrustator.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Incrustator"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Intentiveness: Codable {
+    case cimeliaClass(CimeliaClass)
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Intentiveness.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Intentiveness"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Interacinar
+final class Interacinar: Codable {
+    let assapan: Double
+    let benefactorship: Bool
+    let triseriatim: String
+    let tubbing: Int
+    let untrimmed: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case assapan = "assapan"
+        case benefactorship = "benefactorship"
+        case triseriatim = "triseriatim"
+        case tubbing = "tubbing"
+        case untrimmed = "untrimmed"
+    }
+
+    init(assapan: Double, benefactorship: Bool, triseriatim: String, tubbing: Int, untrimmed: JSONNull?) {
+        self.assapan = assapan
+        self.benefactorship = benefactorship
+        self.triseriatim = triseriatim
+        self.tubbing = tubbing
+        self.untrimmed = untrimmed
+    }
+}
+
+// MARK: Interacinar convenience initializers and mutators
+
+extension Interacinar {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Interacinar.self, from: data)
+        self.init(assapan: me.assapan, benefactorship: me.benefactorship, triseriatim: me.triseriatim, tubbing: me.tubbing, untrimmed: me.untrimmed)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        assapan: Double? = nil,
+        benefactorship: Bool? = nil,
+        triseriatim: String? = nil,
+        tubbing: Int? = nil,
+        untrimmed: JSONNull?? = nil
+    ) -> Interacinar {
+        return Interacinar(
+            assapan: assapan ?? self.assapan,
+            benefactorship: benefactorship ?? self.benefactorship,
+            triseriatim: triseriatim ?? self.triseriatim,
+            tubbing: tubbing ?? self.tubbing,
+            untrimmed: untrimmed ?? self.untrimmed
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Jacutinga: Codable {
+    case integerArray([Int])
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Jacutinga.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Jacutinga"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+final class JSONNull: Codable, Hashable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    public func hash(into hasher: inout Hasher) {
+        hasher.combine(0)
+    }
+
+    public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/head/swift/test/inputs/json/priority/combinations1.json/protocol-hashable--739b516c7897/quicktype.swift b/head/swift/test/inputs/json/priority/combinations1.json/protocol-hashable--739b516c7897/quicktype.swift
new file mode 100644
index 0000000..740138a
--- /dev/null
+++ b/head/swift/test/inputs/json/priority/combinations1.json/protocol-hashable--739b516c7897/quicktype.swift
@@ -0,0 +1,2922 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+import Foundation
+
+// MARK: - TopLevel
+struct TopLevel: Codable, Hashable {
+    let centrodesmose: String
+    let cerograph: [CerographElement]
+    let chemotherapeutics: [ChemotherapeuticElement]
+    let cimelia: [CimeliaElement]
+    let citrated: Int
+    let clinodome: [Clinodome]
+    let coadjust: [CoadjustElement]
+    let consilience: [Consilience]
+    let constructor: [Constructor]
+    let continuative: [Continuative]
+    let credulity: [CredulityElement]
+    let creviced: [Creviced]
+    let cubiculum: [[Int?]]
+    let deruralize: [DeruralizeElement]
+    let diaereses: [DiaereseElement]
+    let dissolution: [[JSONNull?]?]
+    let downstroke: [Downstroke]
+    let electrotautomerism: [Double?]
+    let eleutheromania: [Eleutheromania]
+    let encrust: Encrust
+    let entomoid: [Entomoid]
+    let epipaleolithic: [Epipaleolithic]
+    let expropriable: [Expropriable]
+    let faggingly: [FagginglyElement]
+    let fenks: [FenkElement]
+    let flagmaking: [FlagmakingElement]
+    let fluorometer: [Fluorometer]
+    let fulsome: [Int?]
+    let fuzzy: [Fuzzy]
+    let gardenwards: [Gardenward]
+    let generalissimo: [Generalissimo]
+    let habeas: [[String: Int]?]
+    let hemicrystalline: [Hemicrystalline]
+    let hemocoele: [HemocoeleElement]
+    let hoister: [Hoister]
+    let hyperpiesis: [Hyperpiesi]
+    let hyppish: [Hyppish]
+    let idealizer: [Idealizer]
+    let incrustator: [Incrustator]
+    let intentiveness: [Intentiveness]
+    let interacinar: Interacinar
+    let intercorrelation: [[Int]?]
+    let jacutinga: [Jacutinga]
+
+    enum CodingKeys: String, CodingKey {
+        case centrodesmose = "centrodesmose"
+        case cerograph = "cerograph"
+        case chemotherapeutics = "chemotherapeutics"
+        case cimelia = "cimelia"
+        case citrated = "citrated"
+        case clinodome = "clinodome"
+        case coadjust = "coadjust"
+        case consilience = "consilience"
+        case constructor = "constructor"
+        case continuative = "continuative"
+        case credulity = "credulity"
+        case creviced = "creviced"
+        case cubiculum = "cubiculum"
+        case deruralize = "deruralize"
+        case diaereses = "diaereses"
+        case dissolution = "dissolution"
+        case downstroke = "downstroke"
+        case electrotautomerism = "electrotautomerism"
+        case eleutheromania = "eleutheromania"
+        case encrust = "encrust"
+        case entomoid = "entomoid"
+        case epipaleolithic = "epipaleolithic"
+        case expropriable = "expropriable"
+        case faggingly = "faggingly"
+        case fenks = "fenks"
+        case flagmaking = "flagmaking"
+        case fluorometer = "fluorometer"
+        case fulsome = "fulsome"
+        case fuzzy = "fuzzy"
+        case gardenwards = "gardenwards"
+        case generalissimo = "generalissimo"
+        case habeas = "habeas"
+        case hemicrystalline = "hemicrystalline"
+        case hemocoele = "hemocoele"
+        case hoister = "hoister"
+        case hyperpiesis = "hyperpiesis"
+        case hyppish = "hyppish"
+        case idealizer = "idealizer"
+        case incrustator = "incrustator"
+        case intentiveness = "intentiveness"
+        case interacinar = "interacinar"
+        case intercorrelation = "intercorrelation"
+        case jacutinga = "jacutinga"
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(TopLevel.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        centrodesmose: String? = nil,
+        cerograph: [CerographElement]? = nil,
+        chemotherapeutics: [ChemotherapeuticElement]? = nil,
+        cimelia: [CimeliaElement]? = nil,
+        citrated: Int? = nil,
+        clinodome: [Clinodome]? = nil,
+        coadjust: [CoadjustElement]? = nil,
+        consilience: [Consilience]? = nil,
+        constructor: [Constructor]? = nil,
+        continuative: [Continuative]? = nil,
+        credulity: [CredulityElement]? = nil,
+        creviced: [Creviced]? = nil,
+        cubiculum: [[Int?]]? = nil,
+        deruralize: [DeruralizeElement]? = nil,
+        diaereses: [DiaereseElement]? = nil,
+        dissolution: [[JSONNull?]?]? = nil,
+        downstroke: [Downstroke]? = nil,
+        electrotautomerism: [Double?]? = nil,
+        eleutheromania: [Eleutheromania]? = nil,
+        encrust: Encrust? = nil,
+        entomoid: [Entomoid]? = nil,
+        epipaleolithic: [Epipaleolithic]? = nil,
+        expropriable: [Expropriable]? = nil,
+        faggingly: [FagginglyElement]? = nil,
+        fenks: [FenkElement]? = nil,
+        flagmaking: [FlagmakingElement]? = nil,
+        fluorometer: [Fluorometer]? = nil,
+        fulsome: [Int?]? = nil,
+        fuzzy: [Fuzzy]? = nil,
+        gardenwards: [Gardenward]? = nil,
+        generalissimo: [Generalissimo]? = nil,
+        habeas: [[String: Int]?]? = nil,
+        hemicrystalline: [Hemicrystalline]? = nil,
+        hemocoele: [HemocoeleElement]? = nil,
+        hoister: [Hoister]? = nil,
+        hyperpiesis: [Hyperpiesi]? = nil,
+        hyppish: [Hyppish]? = nil,
+        idealizer: [Idealizer]? = nil,
+        incrustator: [Incrustator]? = nil,
+        intentiveness: [Intentiveness]? = nil,
+        interacinar: Interacinar? = nil,
+        intercorrelation: [[Int]?]? = nil,
+        jacutinga: [Jacutinga]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            centrodesmose: centrodesmose ?? self.centrodesmose,
+            cerograph: cerograph ?? self.cerograph,
+            chemotherapeutics: chemotherapeutics ?? self.chemotherapeutics,
+            cimelia: cimelia ?? self.cimelia,
+            citrated: citrated ?? self.citrated,
+            clinodome: clinodome ?? self.clinodome,
+            coadjust: coadjust ?? self.coadjust,
+            consilience: consilience ?? self.consilience,
+            constructor: constructor ?? self.constructor,
+            continuative: continuative ?? self.continuative,
+            credulity: credulity ?? self.credulity,
+            creviced: creviced ?? self.creviced,
+            cubiculum: cubiculum ?? self.cubiculum,
+            deruralize: deruralize ?? self.deruralize,
+            diaereses: diaereses ?? self.diaereses,
+            dissolution: dissolution ?? self.dissolution,
+            downstroke: downstroke ?? self.downstroke,
+            electrotautomerism: electrotautomerism ?? self.electrotautomerism,
+            eleutheromania: eleutheromania ?? self.eleutheromania,
+            encrust: encrust ?? self.encrust,
+            entomoid: entomoid ?? self.entomoid,
+            epipaleolithic: epipaleolithic ?? self.epipaleolithic,
+            expropriable: expropriable ?? self.expropriable,
+            faggingly: faggingly ?? self.faggingly,
+            fenks: fenks ?? self.fenks,
+            flagmaking: flagmaking ?? self.flagmaking,
+            fluorometer: fluorometer ?? self.fluorometer,
+            fulsome: fulsome ?? self.fulsome,
+            fuzzy: fuzzy ?? self.fuzzy,
+            gardenwards: gardenwards ?? self.gardenwards,
+            generalissimo: generalissimo ?? self.generalissimo,
+            habeas: habeas ?? self.habeas,
+            hemicrystalline: hemicrystalline ?? self.hemicrystalline,
+            hemocoele: hemocoele ?? self.hemocoele,
+            hoister: hoister ?? self.hoister,
+            hyperpiesis: hyperpiesis ?? self.hyperpiesis,
+            hyppish: hyppish ?? self.hyppish,
+            idealizer: idealizer ?? self.idealizer,
+            incrustator: incrustator ?? self.incrustator,
+            intentiveness: intentiveness ?? self.intentiveness,
+            interacinar: interacinar ?? self.interacinar,
+            intercorrelation: intercorrelation ?? self.intercorrelation,
+            jacutinga: jacutinga ?? self.jacutinga
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum CerographElement: Codable, Hashable {
+    case cerographClass(CerographClass)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CerographClass.self) {
+            self = .cerographClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(CerographElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CerographElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cerographClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - CerographClass
+struct CerographClass: Codable, Hashable {
+    let apotropaion: JSONNull?
+    let casuary: JSONNull?
+    let creaker: JSONNull?
+    let disqualification: JSONNull?
+    let imperatorious: JSONNull?
+    let impermeabilize: JSONNull?
+    let metastoma: JSONNull?
+    let noctidiurnal: JSONNull?
+    let nonreserve: JSONNull?
+    let ophthalmotonometry: JSONNull?
+    let pailful: JSONNull?
+    let pigfish: JSONNull?
+    let pongee: JSONNull?
+    let prosodical: JSONNull?
+    let scrofuloderm: JSONNull?
+    let storekeeping: JSONNull?
+    let therologist: JSONNull?
+    let tolowa: JSONNull?
+    let tradeful: JSONNull?
+    let unriveting: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case apotropaion = "apotropaion"
+        case casuary = "casuary"
+        case creaker = "creaker"
+        case disqualification = "disqualification"
+        case imperatorious = "imperatorious"
+        case impermeabilize = "impermeabilize"
+        case metastoma = "metastoma"
+        case noctidiurnal = "noctidiurnal"
+        case nonreserve = "nonreserve"
+        case ophthalmotonometry = "ophthalmotonometry"
+        case pailful = "pailful"
+        case pigfish = "pigfish"
+        case pongee = "pongee"
+        case prosodical = "prosodical"
+        case scrofuloderm = "scrofuloderm"
+        case storekeeping = "storekeeping"
+        case therologist = "therologist"
+        case tolowa = "Tolowa"
+        case tradeful = "tradeful"
+        case unriveting = "unriveting"
+    }
+}
+
+// MARK: CerographClass convenience initializers and mutators
+
+extension CerographClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(CerographClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apotropaion: JSONNull?? = nil,
+        casuary: JSONNull?? = nil,
+        creaker: JSONNull?? = nil,
+        disqualification: JSONNull?? = nil,
+        imperatorious: JSONNull?? = nil,
+        impermeabilize: JSONNull?? = nil,
+        metastoma: JSONNull?? = nil,
+        noctidiurnal: JSONNull?? = nil,
+        nonreserve: JSONNull?? = nil,
+        ophthalmotonometry: JSONNull?? = nil,
+        pailful: JSONNull?? = nil,
+        pigfish: JSONNull?? = nil,
+        pongee: JSONNull?? = nil,
+        prosodical: JSONNull?? = nil,
+        scrofuloderm: JSONNull?? = nil,
+        storekeeping: JSONNull?? = nil,
+        therologist: JSONNull?? = nil,
+        tolowa: JSONNull?? = nil,
+        tradeful: JSONNull?? = nil,
+        unriveting: JSONNull?? = nil
+    ) -> CerographClass {
+        return CerographClass(
+            apotropaion: apotropaion ?? self.apotropaion,
+            casuary: casuary ?? self.casuary,
+            creaker: creaker ?? self.creaker,
+            disqualification: disqualification ?? self.disqualification,
+            imperatorious: imperatorious ?? self.imperatorious,
+            impermeabilize: impermeabilize ?? self.impermeabilize,
+            metastoma: metastoma ?? self.metastoma,
+            noctidiurnal: noctidiurnal ?? self.noctidiurnal,
+            nonreserve: nonreserve ?? self.nonreserve,
+            ophthalmotonometry: ophthalmotonometry ?? self.ophthalmotonometry,
+            pailful: pailful ?? self.pailful,
+            pigfish: pigfish ?? self.pigfish,
+            pongee: pongee ?? self.pongee,
+            prosodical: prosodical ?? self.prosodical,
+            scrofuloderm: scrofuloderm ?? self.scrofuloderm,
+            storekeeping: storekeeping ?? self.storekeeping,
+            therologist: therologist ?? self.therologist,
+            tolowa: tolowa ?? self.tolowa,
+            tradeful: tradeful ?? self.tradeful,
+            unriveting: unriveting ?? self.unriveting
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum ChemotherapeuticElement: Codable, Hashable {
+    case chemotherapeuticClass(ChemotherapeuticClass)
+    case integer(Int)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(ChemotherapeuticClass.self) {
+            self = .chemotherapeuticClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(ChemotherapeuticElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for ChemotherapeuticElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .chemotherapeuticClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - ChemotherapeuticClass
+struct ChemotherapeuticClass: Codable, Hashable {
+    let angioneurotic: JSONNull?
+    let availment: JSONNull?
+    let bladelet: JSONNull?
+    let catharticalness: Double?
+    let caulis: JSONNull?
+    let chalcus: JSONNull?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let enteradenological: JSONNull?
+    let homocerc: Bool?
+    let imporosity: JSONNull?
+    let insistently: JSONNull?
+    let intraparietal: JSONNull?
+    let ivied: JSONNull?
+    let maureen: JSONNull?
+    let nonbookish: JSONNull?
+    let nostochine: JSONNull?
+    let nutcracker: JSONNull?
+    let ofttimes: JSONNull?
+    let phenocryst: JSONNull?
+    let precoincident: JSONNull?
+    let ramiferous: JSONNull?
+    let stagmometer: JSONNull?
+    let tetherball: JSONNull?
+    let unshy: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case angioneurotic = "angioneurotic"
+        case availment = "availment"
+        case bladelet = "bladelet"
+        case catharticalness = "catharticalness"
+        case caulis = "caulis"
+        case chalcus = "chalcus"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case enteradenological = "enteradenological"
+        case homocerc = "homocerc"
+        case imporosity = "imporosity"
+        case insistently = "insistently"
+        case intraparietal = "intraparietal"
+        case ivied = "ivied"
+        case maureen = "Maureen"
+        case nonbookish = "nonbookish"
+        case nostochine = "nostochine"
+        case nutcracker = "nutcracker"
+        case ofttimes = "ofttimes"
+        case phenocryst = "phenocryst"
+        case precoincident = "precoincident"
+        case ramiferous = "ramiferous"
+        case stagmometer = "stagmometer"
+        case tetherball = "tetherball"
+        case unshy = "unshy"
+    }
+}
+
+// MARK: ChemotherapeuticClass convenience initializers and mutators
+
+extension ChemotherapeuticClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(ChemotherapeuticClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        angioneurotic: JSONNull?? = nil,
+        availment: JSONNull?? = nil,
+        bladelet: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        caulis: JSONNull?? = nil,
+        chalcus: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        enteradenological: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        imporosity: JSONNull?? = nil,
+        insistently: JSONNull?? = nil,
+        intraparietal: JSONNull?? = nil,
+        ivied: JSONNull?? = nil,
+        maureen: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        nostochine: JSONNull?? = nil,
+        nutcracker: JSONNull?? = nil,
+        ofttimes: JSONNull?? = nil,
+        phenocryst: JSONNull?? = nil,
+        precoincident: JSONNull?? = nil,
+        ramiferous: JSONNull?? = nil,
+        stagmometer: JSONNull?? = nil,
+        tetherball: JSONNull?? = nil,
+        unshy: JSONNull?? = nil
+    ) -> ChemotherapeuticClass {
+        return ChemotherapeuticClass(
+            angioneurotic: angioneurotic ?? self.angioneurotic,
+            availment: availment ?? self.availment,
+            bladelet: bladelet ?? self.bladelet,
+            catharticalness: catharticalness ?? self.catharticalness,
+            caulis: caulis ?? self.caulis,
+            chalcus: chalcus ?? self.chalcus,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            enteradenological: enteradenological ?? self.enteradenological,
+            homocerc: homocerc ?? self.homocerc,
+            imporosity: imporosity ?? self.imporosity,
+            insistently: insistently ?? self.insistently,
+            intraparietal: intraparietal ?? self.intraparietal,
+            ivied: ivied ?? self.ivied,
+            maureen: maureen ?? self.maureen,
+            nonbookish: nonbookish ?? self.nonbookish,
+            nostochine: nostochine ?? self.nostochine,
+            nutcracker: nutcracker ?? self.nutcracker,
+            ofttimes: ofttimes ?? self.ofttimes,
+            phenocryst: phenocryst ?? self.phenocryst,
+            precoincident: precoincident ?? self.precoincident,
+            ramiferous: ramiferous ?? self.ramiferous,
+            stagmometer: stagmometer ?? self.stagmometer,
+            tetherball: tetherball ?? self.tetherball,
+            unshy: unshy ?? self.unshy
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum CimeliaElement: Codable, Hashable {
+    case cimeliaClass(CimeliaClass)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(CimeliaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CimeliaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - CimeliaClass
+struct CimeliaClass: Codable, Hashable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+}
+
+// MARK: CimeliaClass convenience initializers and mutators
+
+extension CimeliaClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(CimeliaClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> CimeliaClass {
+        return CimeliaClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Clinodome: Codable, Hashable {
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Clinodome.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Clinodome"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum CoadjustElement: Codable, Hashable {
+    case coadjustClass(CoadjustClass)
+    case double(Double)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(CoadjustClass.self) {
+            self = .coadjustClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(CoadjustElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CoadjustElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .coadjustClass(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - CoadjustClass
+struct CoadjustClass: Codable, Hashable {
+    let amidosulphonal: JSONNull?
+    let benny: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let ensnare: JSONNull?
+    let homocerc: Bool?
+    let hybridizer: JSONNull?
+    let leastwise: JSONNull?
+    let lof: JSONNull?
+    let monkhood: JSONNull?
+    let netherlandish: JSONNull?
+    let nonbookish: JSONNull?
+    let peonism: JSONNull?
+    let phonelescope: JSONNull?
+    let porphyrogeniture: JSONNull?
+    let preindemnify: JSONNull?
+    let rosal: JSONNull?
+    let scalenous: JSONNull?
+    let scopine: JSONNull?
+    let sedaceae: JSONNull?
+    let suberinize: JSONNull?
+    let symbiot: JSONNull?
+    let tablefellow: JSONNull?
+    let unchargeable: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amidosulphonal = "amidosulphonal"
+        case benny = "Benny"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case ensnare = "ensnare"
+        case homocerc = "homocerc"
+        case hybridizer = "hybridizer"
+        case leastwise = "leastwise"
+        case lof = "lof"
+        case monkhood = "monkhood"
+        case netherlandish = "Netherlandish"
+        case nonbookish = "nonbookish"
+        case peonism = "peonism"
+        case phonelescope = "Phonelescope"
+        case porphyrogeniture = "porphyrogeniture"
+        case preindemnify = "preindemnify"
+        case rosal = "rosal"
+        case scalenous = "scalenous"
+        case scopine = "scopine"
+        case sedaceae = "Sedaceae"
+        case suberinize = "suberinize"
+        case symbiot = "symbiot"
+        case tablefellow = "tablefellow"
+        case unchargeable = "unchargeable"
+    }
+}
+
+// MARK: CoadjustClass convenience initializers and mutators
+
+extension CoadjustClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(CoadjustClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amidosulphonal: JSONNull?? = nil,
+        benny: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        ensnare: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        hybridizer: JSONNull?? = nil,
+        leastwise: JSONNull?? = nil,
+        lof: JSONNull?? = nil,
+        monkhood: JSONNull?? = nil,
+        netherlandish: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        peonism: JSONNull?? = nil,
+        phonelescope: JSONNull?? = nil,
+        porphyrogeniture: JSONNull?? = nil,
+        preindemnify: JSONNull?? = nil,
+        rosal: JSONNull?? = nil,
+        scalenous: JSONNull?? = nil,
+        scopine: JSONNull?? = nil,
+        sedaceae: JSONNull?? = nil,
+        suberinize: JSONNull?? = nil,
+        symbiot: JSONNull?? = nil,
+        tablefellow: JSONNull?? = nil,
+        unchargeable: JSONNull?? = nil
+    ) -> CoadjustClass {
+        return CoadjustClass(
+            amidosulphonal: amidosulphonal ?? self.amidosulphonal,
+            benny: benny ?? self.benny,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ensnare: ensnare ?? self.ensnare,
+            homocerc: homocerc ?? self.homocerc,
+            hybridizer: hybridizer ?? self.hybridizer,
+            leastwise: leastwise ?? self.leastwise,
+            lof: lof ?? self.lof,
+            monkhood: monkhood ?? self.monkhood,
+            netherlandish: netherlandish ?? self.netherlandish,
+            nonbookish: nonbookish ?? self.nonbookish,
+            peonism: peonism ?? self.peonism,
+            phonelescope: phonelescope ?? self.phonelescope,
+            porphyrogeniture: porphyrogeniture ?? self.porphyrogeniture,
+            preindemnify: preindemnify ?? self.preindemnify,
+            rosal: rosal ?? self.rosal,
+            scalenous: scalenous ?? self.scalenous,
+            scopine: scopine ?? self.scopine,
+            sedaceae: sedaceae ?? self.sedaceae,
+            suberinize: suberinize ?? self.suberinize,
+            symbiot: symbiot ?? self.symbiot,
+            tablefellow: tablefellow ?? self.tablefellow,
+            unchargeable: unchargeable ?? self.unchargeable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Consilience: Codable, Hashable {
+    case double(Double)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Consilience.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Consilience"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Constructor: Codable, Hashable {
+    case bool(Bool)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Constructor.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Constructor"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Continuative: Codable, Hashable {
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Continuative.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Continuative"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum CredulityElement: Codable, Hashable {
+    case credulityClass(CredulityClass)
+    case integer(Int)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CredulityClass.self) {
+            self = .credulityClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(CredulityElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CredulityElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .credulityClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - CredulityClass
+struct CredulityClass: Codable, Hashable {
+    let ammonolytic: JSONNull?
+    let bushmaster: JSONNull?
+    let considering: JSONNull?
+    let consuetudinary: JSONNull?
+    let embarras: JSONNull?
+    let fineness: JSONNull?
+    let flaithship: JSONNull?
+    let flavia: JSONNull?
+    let gruffly: JSONNull?
+    let hedychium: JSONNull?
+    let leadwort: JSONNull?
+    let overseriously: JSONNull?
+    let parabola: JSONNull?
+    let pectinatodenticulate: JSONNull?
+    let popean: JSONNull?
+    let pornocrat: JSONNull?
+    let quadrisect: JSONNull?
+    let seriality: JSONNull?
+    let vamphorn: JSONNull?
+    let wharp: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case ammonolytic = "ammonolytic"
+        case bushmaster = "bushmaster"
+        case considering = "considering"
+        case consuetudinary = "consuetudinary"
+        case embarras = "embarras"
+        case fineness = "fineness"
+        case flaithship = "flaithship"
+        case flavia = "Flavia"
+        case gruffly = "gruffly"
+        case hedychium = "Hedychium"
+        case leadwort = "leadwort"
+        case overseriously = "overseriously"
+        case parabola = "parabola"
+        case pectinatodenticulate = "pectinatodenticulate"
+        case popean = "Popean"
+        case pornocrat = "pornocrat"
+        case quadrisect = "quadrisect"
+        case seriality = "seriality"
+        case vamphorn = "vamphorn"
+        case wharp = "wharp"
+    }
+}
+
+// MARK: CredulityClass convenience initializers and mutators
+
+extension CredulityClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(CredulityClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        ammonolytic: JSONNull?? = nil,
+        bushmaster: JSONNull?? = nil,
+        considering: JSONNull?? = nil,
+        consuetudinary: JSONNull?? = nil,
+        embarras: JSONNull?? = nil,
+        fineness: JSONNull?? = nil,
+        flaithship: JSONNull?? = nil,
+        flavia: JSONNull?? = nil,
+        gruffly: JSONNull?? = nil,
+        hedychium: JSONNull?? = nil,
+        leadwort: JSONNull?? = nil,
+        overseriously: JSONNull?? = nil,
+        parabola: JSONNull?? = nil,
+        pectinatodenticulate: JSONNull?? = nil,
+        popean: JSONNull?? = nil,
+        pornocrat: JSONNull?? = nil,
+        quadrisect: JSONNull?? = nil,
+        seriality: JSONNull?? = nil,
+        vamphorn: JSONNull?? = nil,
+        wharp: JSONNull?? = nil
+    ) -> CredulityClass {
+        return CredulityClass(
+            ammonolytic: ammonolytic ?? self.ammonolytic,
+            bushmaster: bushmaster ?? self.bushmaster,
+            considering: considering ?? self.considering,
+            consuetudinary: consuetudinary ?? self.consuetudinary,
+            embarras: embarras ?? self.embarras,
+            fineness: fineness ?? self.fineness,
+            flaithship: flaithship ?? self.flaithship,
+            flavia: flavia ?? self.flavia,
+            gruffly: gruffly ?? self.gruffly,
+            hedychium: hedychium ?? self.hedychium,
+            leadwort: leadwort ?? self.leadwort,
+            overseriously: overseriously ?? self.overseriously,
+            parabola: parabola ?? self.parabola,
+            pectinatodenticulate: pectinatodenticulate ?? self.pectinatodenticulate,
+            popean: popean ?? self.popean,
+            pornocrat: pornocrat ?? self.pornocrat,
+            quadrisect: quadrisect ?? self.quadrisect,
+            seriality: seriality ?? self.seriality,
+            vamphorn: vamphorn ?? self.vamphorn,
+            wharp: wharp ?? self.wharp
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Creviced: Codable, Hashable {
+    case bool(Bool)
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Creviced.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Creviced"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum DeruralizeElement: Codable, Hashable {
+    case bool(Bool)
+    case deruralizeClass(DeruralizeClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(DeruralizeClass.self) {
+            self = .deruralizeClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(DeruralizeElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for DeruralizeElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .deruralizeClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - DeruralizeClass
+struct DeruralizeClass: Codable, Hashable {
+    let bockerel: JSONNull?
+    let boulder: JSONNull?
+    let churrus: JSONNull?
+    let counterdigged: JSONNull?
+    let dialogite: JSONNull?
+    let digenic: JSONNull?
+    let dunbird: JSONNull?
+    let ergatogyne: JSONNull?
+    let fiendful: JSONNull?
+    let jackrod: JSONNull?
+    let jehovistic: JSONNull?
+    let paninean: JSONNull?
+    let panther: JSONNull?
+    let placentigerous: JSONNull?
+    let romney: JSONNull?
+    let sparm: JSONNull?
+    let tocsin: JSONNull?
+    let unnicked: JSONNull?
+    let unstavable: JSONNull?
+    let windfirm: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case bockerel = "bockerel"
+        case boulder = "boulder"
+        case churrus = "churrus"
+        case counterdigged = "counterdigged"
+        case dialogite = "dialogite"
+        case digenic = "digenic"
+        case dunbird = "dunbird"
+        case ergatogyne = "ergatogyne"
+        case fiendful = "fiendful"
+        case jackrod = "jackrod"
+        case jehovistic = "Jehovistic"
+        case paninean = "Paninean"
+        case panther = "panther"
+        case placentigerous = "placentigerous"
+        case romney = "Romney"
+        case sparm = "sparm"
+        case tocsin = "tocsin"
+        case unnicked = "unnicked"
+        case unstavable = "unstavable"
+        case windfirm = "windfirm"
+    }
+}
+
+// MARK: DeruralizeClass convenience initializers and mutators
+
+extension DeruralizeClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(DeruralizeClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        bockerel: JSONNull?? = nil,
+        boulder: JSONNull?? = nil,
+        churrus: JSONNull?? = nil,
+        counterdigged: JSONNull?? = nil,
+        dialogite: JSONNull?? = nil,
+        digenic: JSONNull?? = nil,
+        dunbird: JSONNull?? = nil,
+        ergatogyne: JSONNull?? = nil,
+        fiendful: JSONNull?? = nil,
+        jackrod: JSONNull?? = nil,
+        jehovistic: JSONNull?? = nil,
+        paninean: JSONNull?? = nil,
+        panther: JSONNull?? = nil,
+        placentigerous: JSONNull?? = nil,
+        romney: JSONNull?? = nil,
+        sparm: JSONNull?? = nil,
+        tocsin: JSONNull?? = nil,
+        unnicked: JSONNull?? = nil,
+        unstavable: JSONNull?? = nil,
+        windfirm: JSONNull?? = nil
+    ) -> DeruralizeClass {
+        return DeruralizeClass(
+            bockerel: bockerel ?? self.bockerel,
+            boulder: boulder ?? self.boulder,
+            churrus: churrus ?? self.churrus,
+            counterdigged: counterdigged ?? self.counterdigged,
+            dialogite: dialogite ?? self.dialogite,
+            digenic: digenic ?? self.digenic,
+            dunbird: dunbird ?? self.dunbird,
+            ergatogyne: ergatogyne ?? self.ergatogyne,
+            fiendful: fiendful ?? self.fiendful,
+            jackrod: jackrod ?? self.jackrod,
+            jehovistic: jehovistic ?? self.jehovistic,
+            paninean: paninean ?? self.paninean,
+            panther: panther ?? self.panther,
+            placentigerous: placentigerous ?? self.placentigerous,
+            romney: romney ?? self.romney,
+            sparm: sparm ?? self.sparm,
+            tocsin: tocsin ?? self.tocsin,
+            unnicked: unnicked ?? self.unnicked,
+            unstavable: unstavable ?? self.unstavable,
+            windfirm: windfirm ?? self.windfirm
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum DiaereseElement: Codable, Hashable {
+    case bool(Bool)
+    case diaereseClass(DiaereseClass)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(DiaereseClass.self) {
+            self = .diaereseClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(DiaereseElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for DiaereseElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .diaereseClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - DiaereseClass
+struct DiaereseClass: Codable, Hashable {
+    let amoreuxia: JSONNull?
+    let ani: JSONNull?
+    let bernicle: JSONNull?
+    let blackwasher: JSONNull?
+    let blowhard: JSONNull?
+    let broma: JSONNull?
+    let closecross: JSONNull?
+    let congregationalism: JSONNull?
+    let grayly: JSONNull?
+    let historically: JSONNull?
+    let hoast: JSONNull?
+    let irretentive: JSONNull?
+    let parcener: JSONNull?
+    let pedder: JSONNull?
+    let pseudoanatomic: JSONNull?
+    let rhizocarpian: JSONNull?
+    let samel: JSONNull?
+    let silker: JSONNull?
+    let subdentated: JSONNull?
+    let subobscure: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amoreuxia = "Amoreuxia"
+        case ani = "ani"
+        case bernicle = "bernicle"
+        case blackwasher = "blackwasher"
+        case blowhard = "blowhard"
+        case broma = "broma"
+        case closecross = "closecross"
+        case congregationalism = "congregationalism"
+        case grayly = "grayly"
+        case historically = "historically"
+        case hoast = "hoast"
+        case irretentive = "irretentive"
+        case parcener = "parcener"
+        case pedder = "pedder"
+        case pseudoanatomic = "pseudoanatomic"
+        case rhizocarpian = "rhizocarpian"
+        case samel = "samel"
+        case silker = "silker"
+        case subdentated = "subdentated"
+        case subobscure = "subobscure"
+    }
+}
+
+// MARK: DiaereseClass convenience initializers and mutators
+
+extension DiaereseClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(DiaereseClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amoreuxia: JSONNull?? = nil,
+        ani: JSONNull?? = nil,
+        bernicle: JSONNull?? = nil,
+        blackwasher: JSONNull?? = nil,
+        blowhard: JSONNull?? = nil,
+        broma: JSONNull?? = nil,
+        closecross: JSONNull?? = nil,
+        congregationalism: JSONNull?? = nil,
+        grayly: JSONNull?? = nil,
+        historically: JSONNull?? = nil,
+        hoast: JSONNull?? = nil,
+        irretentive: JSONNull?? = nil,
+        parcener: JSONNull?? = nil,
+        pedder: JSONNull?? = nil,
+        pseudoanatomic: JSONNull?? = nil,
+        rhizocarpian: JSONNull?? = nil,
+        samel: JSONNull?? = nil,
+        silker: JSONNull?? = nil,
+        subdentated: JSONNull?? = nil,
+        subobscure: JSONNull?? = nil
+    ) -> DiaereseClass {
+        return DiaereseClass(
+            amoreuxia: amoreuxia ?? self.amoreuxia,
+            ani: ani ?? self.ani,
+            bernicle: bernicle ?? self.bernicle,
+            blackwasher: blackwasher ?? self.blackwasher,
+            blowhard: blowhard ?? self.blowhard,
+            broma: broma ?? self.broma,
+            closecross: closecross ?? self.closecross,
+            congregationalism: congregationalism ?? self.congregationalism,
+            grayly: grayly ?? self.grayly,
+            historically: historically ?? self.historically,
+            hoast: hoast ?? self.hoast,
+            irretentive: irretentive ?? self.irretentive,
+            parcener: parcener ?? self.parcener,
+            pedder: pedder ?? self.pedder,
+            pseudoanatomic: pseudoanatomic ?? self.pseudoanatomic,
+            rhizocarpian: rhizocarpian ?? self.rhizocarpian,
+            samel: samel ?? self.samel,
+            silker: silker ?? self.silker,
+            subdentated: subdentated ?? self.subdentated,
+            subobscure: subobscure ?? self.subobscure
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Downstroke: Codable, Hashable {
+    case bool(Bool)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Downstroke.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Downstroke"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Eleutheromania: Codable, Hashable {
+    case double(Double)
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Eleutheromania.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Eleutheromania"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Encrust
+struct Encrust: Codable, Hashable {
+    let comradely: JSONNull?
+    let diacanthous: JSONNull?
+    let feminineness: JSONNull?
+    let gossamered: JSONNull?
+    let hibernia: JSONNull?
+    let hibiscus: JSONNull?
+    let lepidosauria: JSONNull?
+    let lollingly: JSONNull?
+    let manager: JSONNull?
+    let mechanic: JSONNull?
+    let overminuteness: JSONNull?
+    let papelonne: JSONNull?
+    let plebification: JSONNull?
+    let pugmiller: JSONNull?
+    let recoveror: JSONNull?
+    let spermatoblastic: JSONNull?
+    let syllidae: JSONNull?
+    let ungyved: JSONNull?
+    let whirlabout: JSONNull?
+    let woodenware: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case comradely = "comradely"
+        case diacanthous = "diacanthous"
+        case feminineness = "feminineness"
+        case gossamered = "gossamered"
+        case hibernia = "Hibernia"
+        case hibiscus = "Hibiscus"
+        case lepidosauria = "Lepidosauria"
+        case lollingly = "lollingly"
+        case manager = "manager"
+        case mechanic = "mechanic"
+        case overminuteness = "overminuteness"
+        case papelonne = "papelonne"
+        case plebification = "plebification"
+        case pugmiller = "pugmiller"
+        case recoveror = "recoveror"
+        case spermatoblastic = "spermatoblastic"
+        case syllidae = "Syllidae"
+        case ungyved = "ungyved"
+        case whirlabout = "whirlabout"
+        case woodenware = "woodenware"
+    }
+}
+
+// MARK: Encrust convenience initializers and mutators
+
+extension Encrust {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Encrust.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        comradely: JSONNull?? = nil,
+        diacanthous: JSONNull?? = nil,
+        feminineness: JSONNull?? = nil,
+        gossamered: JSONNull?? = nil,
+        hibernia: JSONNull?? = nil,
+        hibiscus: JSONNull?? = nil,
+        lepidosauria: JSONNull?? = nil,
+        lollingly: JSONNull?? = nil,
+        manager: JSONNull?? = nil,
+        mechanic: JSONNull?? = nil,
+        overminuteness: JSONNull?? = nil,
+        papelonne: JSONNull?? = nil,
+        plebification: JSONNull?? = nil,
+        pugmiller: JSONNull?? = nil,
+        recoveror: JSONNull?? = nil,
+        spermatoblastic: JSONNull?? = nil,
+        syllidae: JSONNull?? = nil,
+        ungyved: JSONNull?? = nil,
+        whirlabout: JSONNull?? = nil,
+        woodenware: JSONNull?? = nil
+    ) -> Encrust {
+        return Encrust(
+            comradely: comradely ?? self.comradely,
+            diacanthous: diacanthous ?? self.diacanthous,
+            feminineness: feminineness ?? self.feminineness,
+            gossamered: gossamered ?? self.gossamered,
+            hibernia: hibernia ?? self.hibernia,
+            hibiscus: hibiscus ?? self.hibiscus,
+            lepidosauria: lepidosauria ?? self.lepidosauria,
+            lollingly: lollingly ?? self.lollingly,
+            manager: manager ?? self.manager,
+            mechanic: mechanic ?? self.mechanic,
+            overminuteness: overminuteness ?? self.overminuteness,
+            papelonne: papelonne ?? self.papelonne,
+            plebification: plebification ?? self.plebification,
+            pugmiller: pugmiller ?? self.pugmiller,
+            recoveror: recoveror ?? self.recoveror,
+            spermatoblastic: spermatoblastic ?? self.spermatoblastic,
+            syllidae: syllidae ?? self.syllidae,
+            ungyved: ungyved ?? self.ungyved,
+            whirlabout: whirlabout ?? self.whirlabout,
+            woodenware: woodenware ?? self.woodenware
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Entomoid: Codable, Hashable {
+    case cimeliaClass(CimeliaClass)
+    case integer(Int)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Entomoid.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Entomoid"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Epipaleolithic: Codable, Hashable {
+    case double(Double)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Epipaleolithic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Epipaleolithic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Expropriable: Codable, Hashable {
+    case cimeliaClass(CimeliaClass)
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Expropriable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Expropriable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum FagginglyElement: Codable, Hashable {
+    case double(Double)
+    case fagginglyClass(FagginglyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(FagginglyClass.self) {
+            self = .fagginglyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(FagginglyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for FagginglyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .fagginglyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - FagginglyClass
+struct FagginglyClass: Codable, Hashable {
+    let abranchian: JSONNull?
+    let aculeiform: JSONNull?
+    let adiaphoristic: JSONNull?
+    let adoptionism: JSONNull?
+    let anglic: JSONNull?
+    let antrotomy: JSONNull?
+    let coerciveness: JSONNull?
+    let decorist: JSONNull?
+    let duckhood: JSONNull?
+    let heteromeri: JSONNull?
+    let hypochnose: JSONNull?
+    let lochage: JSONNull?
+    let melee: JSONNull?
+    let nonconformitant: JSONNull?
+    let poinsettia: JSONNull?
+    let putatively: JSONNull?
+    let semivolatile: JSONNull?
+    let soleas: JSONNull?
+    let unfastenable: JSONNull?
+    let unmillinered: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case abranchian = "abranchian"
+        case aculeiform = "aculeiform"
+        case adiaphoristic = "adiaphoristic"
+        case adoptionism = "adoptionism"
+        case anglic = "Anglic"
+        case antrotomy = "antrotomy"
+        case coerciveness = "coerciveness"
+        case decorist = "decorist"
+        case duckhood = "duckhood"
+        case heteromeri = "Heteromeri"
+        case hypochnose = "hypochnose"
+        case lochage = "lochage"
+        case melee = "melee"
+        case nonconformitant = "nonconformitant"
+        case poinsettia = "Poinsettia"
+        case putatively = "putatively"
+        case semivolatile = "semivolatile"
+        case soleas = "soleas"
+        case unfastenable = "unfastenable"
+        case unmillinered = "unmillinered"
+    }
+}
+
+// MARK: FagginglyClass convenience initializers and mutators
+
+extension FagginglyClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(FagginglyClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        abranchian: JSONNull?? = nil,
+        aculeiform: JSONNull?? = nil,
+        adiaphoristic: JSONNull?? = nil,
+        adoptionism: JSONNull?? = nil,
+        anglic: JSONNull?? = nil,
+        antrotomy: JSONNull?? = nil,
+        coerciveness: JSONNull?? = nil,
+        decorist: JSONNull?? = nil,
+        duckhood: JSONNull?? = nil,
+        heteromeri: JSONNull?? = nil,
+        hypochnose: JSONNull?? = nil,
+        lochage: JSONNull?? = nil,
+        melee: JSONNull?? = nil,
+        nonconformitant: JSONNull?? = nil,
+        poinsettia: JSONNull?? = nil,
+        putatively: JSONNull?? = nil,
+        semivolatile: JSONNull?? = nil,
+        soleas: JSONNull?? = nil,
+        unfastenable: JSONNull?? = nil,
+        unmillinered: JSONNull?? = nil
+    ) -> FagginglyClass {
+        return FagginglyClass(
+            abranchian: abranchian ?? self.abranchian,
+            aculeiform: aculeiform ?? self.aculeiform,
+            adiaphoristic: adiaphoristic ?? self.adiaphoristic,
+            adoptionism: adoptionism ?? self.adoptionism,
+            anglic: anglic ?? self.anglic,
+            antrotomy: antrotomy ?? self.antrotomy,
+            coerciveness: coerciveness ?? self.coerciveness,
+            decorist: decorist ?? self.decorist,
+            duckhood: duckhood ?? self.duckhood,
+            heteromeri: heteromeri ?? self.heteromeri,
+            hypochnose: hypochnose ?? self.hypochnose,
+            lochage: lochage ?? self.lochage,
+            melee: melee ?? self.melee,
+            nonconformitant: nonconformitant ?? self.nonconformitant,
+            poinsettia: poinsettia ?? self.poinsettia,
+            putatively: putatively ?? self.putatively,
+            semivolatile: semivolatile ?? self.semivolatile,
+            soleas: soleas ?? self.soleas,
+            unfastenable: unfastenable ?? self.unfastenable,
+            unmillinered: unmillinered ?? self.unmillinered
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum FenkElement: Codable, Hashable {
+    case fenkClass(FenkClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(FenkClass.self) {
+            self = .fenkClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(FenkElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for FenkElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .fenkClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - FenkClass
+struct FenkClass: Codable, Hashable {
+    let apoise: JSONNull?
+    let astronomize: JSONNull?
+    let cockhorse: JSONNull?
+    let copular: JSONNull?
+    let dagomba: JSONNull?
+    let draffy: JSONNull?
+    let foreigner: JSONNull?
+    let guyandot: JSONNull?
+    let neurogliosis: JSONNull?
+    let osmious: JSONNull?
+    let palpitate: JSONNull?
+    let rebukeable: JSONNull?
+    let reinwardtia: JSONNull?
+    let reservatory: JSONNull?
+    let scalt: JSONNull?
+    let scripturalize: JSONNull?
+    let tintometer: JSONNull?
+    let tritoness: JSONNull?
+    let undergrade: JSONNull?
+    let undermountain: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case apoise = "apoise"
+        case astronomize = "astronomize"
+        case cockhorse = "cockhorse"
+        case copular = "copular"
+        case dagomba = "Dagomba"
+        case draffy = "draffy"
+        case foreigner = "foreigner"
+        case guyandot = "Guyandot"
+        case neurogliosis = "neurogliosis"
+        case osmious = "osmious"
+        case palpitate = "palpitate"
+        case rebukeable = "rebukeable"
+        case reinwardtia = "Reinwardtia"
+        case reservatory = "reservatory"
+        case scalt = "scalt"
+        case scripturalize = "scripturalize"
+        case tintometer = "tintometer"
+        case tritoness = "Tritoness"
+        case undergrade = "undergrade"
+        case undermountain = "undermountain"
+    }
+}
+
+// MARK: FenkClass convenience initializers and mutators
+
+extension FenkClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(FenkClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apoise: JSONNull?? = nil,
+        astronomize: JSONNull?? = nil,
+        cockhorse: JSONNull?? = nil,
+        copular: JSONNull?? = nil,
+        dagomba: JSONNull?? = nil,
+        draffy: JSONNull?? = nil,
+        foreigner: JSONNull?? = nil,
+        guyandot: JSONNull?? = nil,
+        neurogliosis: JSONNull?? = nil,
+        osmious: JSONNull?? = nil,
+        palpitate: JSONNull?? = nil,
+        rebukeable: JSONNull?? = nil,
+        reinwardtia: JSONNull?? = nil,
+        reservatory: JSONNull?? = nil,
+        scalt: JSONNull?? = nil,
+        scripturalize: JSONNull?? = nil,
+        tintometer: JSONNull?? = nil,
+        tritoness: JSONNull?? = nil,
+        undergrade: JSONNull?? = nil,
+        undermountain: JSONNull?? = nil
+    ) -> FenkClass {
+        return FenkClass(
+            apoise: apoise ?? self.apoise,
+            astronomize: astronomize ?? self.astronomize,
+            cockhorse: cockhorse ?? self.cockhorse,
+            copular: copular ?? self.copular,
+            dagomba: dagomba ?? self.dagomba,
+            draffy: draffy ?? self.draffy,
+            foreigner: foreigner ?? self.foreigner,
+            guyandot: guyandot ?? self.guyandot,
+            neurogliosis: neurogliosis ?? self.neurogliosis,
+            osmious: osmious ?? self.osmious,
+            palpitate: palpitate ?? self.palpitate,
+            rebukeable: rebukeable ?? self.rebukeable,
+            reinwardtia: reinwardtia ?? self.reinwardtia,
+            reservatory: reservatory ?? self.reservatory,
+            scalt: scalt ?? self.scalt,
+            scripturalize: scripturalize ?? self.scripturalize,
+            tintometer: tintometer ?? self.tintometer,
+            tritoness: tritoness ?? self.tritoness,
+            undergrade: undergrade ?? self.undergrade,
+            undermountain: undermountain ?? self.undermountain
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum FlagmakingElement: Codable, Hashable {
+    case bool(Bool)
+    case double(Double)
+    case flagmakingClass(FlagmakingClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(FlagmakingClass.self) {
+            self = .flagmakingClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(FlagmakingElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for FlagmakingElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .flagmakingClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - FlagmakingClass
+struct FlagmakingClass: Codable, Hashable {
+    let albarco: JSONNull?
+    let bunodonta: JSONNull?
+    let hornify: JSONNull?
+    let hydrocorisae: JSONNull?
+    let hypoglossus: JSONNull?
+    let inexpiably: JSONNull?
+    let ingratitude: JSONNull?
+    let ladyfly: JSONNull?
+    let medicament: JSONNull?
+    let monogrammatic: JSONNull?
+    let nobbut: JSONNull?
+    let notacanthidae: JSONNull?
+    let polyplacophore: JSONNull?
+    let proexercise: JSONNull?
+    let protoplast: JSONNull?
+    let puzzling: JSONNull?
+    let splanchnoskeleton: JSONNull?
+    let unloveliness: JSONNull?
+    let unquarantined: JSONNull?
+    let unrenounceable: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case albarco = "albarco"
+        case bunodonta = "Bunodonta"
+        case hornify = "hornify"
+        case hydrocorisae = "Hydrocorisae"
+        case hypoglossus = "hypoglossus"
+        case inexpiably = "inexpiably"
+        case ingratitude = "ingratitude"
+        case ladyfly = "ladyfly"
+        case medicament = "medicament"
+        case monogrammatic = "monogrammatic"
+        case nobbut = "nobbut"
+        case notacanthidae = "Notacanthidae"
+        case polyplacophore = "polyplacophore"
+        case proexercise = "proexercise"
+        case protoplast = "protoplast"
+        case puzzling = "puzzling"
+        case splanchnoskeleton = "splanchnoskeleton"
+        case unloveliness = "unloveliness"
+        case unquarantined = "unquarantined"
+        case unrenounceable = "unrenounceable"
+    }
+}
+
+// MARK: FlagmakingClass convenience initializers and mutators
+
+extension FlagmakingClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(FlagmakingClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        albarco: JSONNull?? = nil,
+        bunodonta: JSONNull?? = nil,
+        hornify: JSONNull?? = nil,
+        hydrocorisae: JSONNull?? = nil,
+        hypoglossus: JSONNull?? = nil,
+        inexpiably: JSONNull?? = nil,
+        ingratitude: JSONNull?? = nil,
+        ladyfly: JSONNull?? = nil,
+        medicament: JSONNull?? = nil,
+        monogrammatic: JSONNull?? = nil,
+        nobbut: JSONNull?? = nil,
+        notacanthidae: JSONNull?? = nil,
+        polyplacophore: JSONNull?? = nil,
+        proexercise: JSONNull?? = nil,
+        protoplast: JSONNull?? = nil,
+        puzzling: JSONNull?? = nil,
+        splanchnoskeleton: JSONNull?? = nil,
+        unloveliness: JSONNull?? = nil,
+        unquarantined: JSONNull?? = nil,
+        unrenounceable: JSONNull?? = nil
+    ) -> FlagmakingClass {
+        return FlagmakingClass(
+            albarco: albarco ?? self.albarco,
+            bunodonta: bunodonta ?? self.bunodonta,
+            hornify: hornify ?? self.hornify,
+            hydrocorisae: hydrocorisae ?? self.hydrocorisae,
+            hypoglossus: hypoglossus ?? self.hypoglossus,
+            inexpiably: inexpiably ?? self.inexpiably,
+            ingratitude: ingratitude ?? self.ingratitude,
+            ladyfly: ladyfly ?? self.ladyfly,
+            medicament: medicament ?? self.medicament,
+            monogrammatic: monogrammatic ?? self.monogrammatic,
+            nobbut: nobbut ?? self.nobbut,
+            notacanthidae: notacanthidae ?? self.notacanthidae,
+            polyplacophore: polyplacophore ?? self.polyplacophore,
+            proexercise: proexercise ?? self.proexercise,
+            protoplast: protoplast ?? self.protoplast,
+            puzzling: puzzling ?? self.puzzling,
+            splanchnoskeleton: splanchnoskeleton ?? self.splanchnoskeleton,
+            unloveliness: unloveliness ?? self.unloveliness,
+            unquarantined: unquarantined ?? self.unquarantined,
+            unrenounceable: unrenounceable ?? self.unrenounceable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Fluorometer: Codable, Hashable {
+    case integer(Int)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Fluorometer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Fluorometer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Fuzzy: Codable, Hashable {
+    case integer(Int)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Fuzzy.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Fuzzy"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Gardenward: Codable, Hashable {
+    case bool(Bool)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Gardenward.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Gardenward"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Generalissimo: Codable, Hashable {
+    case bool(Bool)
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Generalissimo.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Generalissimo"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Hemicrystalline: Codable, Hashable {
+    case cimeliaClass(CimeliaClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Hemicrystalline.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hemicrystalline"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum HemocoeleElement: Codable, Hashable {
+    case hemocoeleClass(HemocoeleClass)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(HemocoeleClass.self) {
+            self = .hemocoeleClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(HemocoeleElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for HemocoeleElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .hemocoeleClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - HemocoeleClass
+struct HemocoeleClass: Codable, Hashable {
+    let acrogamy: JSONNull?
+    let amelification: JSONNull?
+    let autobiographic: JSONNull?
+    let berat: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let disproportionably: JSONNull?
+    let erythrite: JSONNull?
+    let graphic: JSONNull?
+    let hepatological: JSONNull?
+    let homocerc: Bool?
+    let incommensurably: JSONNull?
+    let misaffirm: JSONNull?
+    let nonbookish: JSONNull?
+    let pocketbook: JSONNull?
+    let sclerometric: JSONNull?
+    let stambouline: JSONNull?
+    let stickpin: JSONNull?
+    let tubulure: JSONNull?
+    let undelated: JSONNull?
+    let unsalt: JSONNull?
+    let untutelar: JSONNull?
+    let vagrant: JSONNull?
+    let walt: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acrogamy = "acrogamy"
+        case amelification = "amelification"
+        case autobiographic = "autobiographic"
+        case berat = "berat"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case disproportionably = "disproportionably"
+        case erythrite = "erythrite"
+        case graphic = "graphic"
+        case hepatological = "hepatological"
+        case homocerc = "homocerc"
+        case incommensurably = "incommensurably"
+        case misaffirm = "misaffirm"
+        case nonbookish = "nonbookish"
+        case pocketbook = "pocketbook"
+        case sclerometric = "sclerometric"
+        case stambouline = "stambouline"
+        case stickpin = "stickpin"
+        case tubulure = "tubulure"
+        case undelated = "undelated"
+        case unsalt = "unsalt"
+        case untutelar = "untutelar"
+        case vagrant = "vagrant"
+        case walt = "Walt"
+    }
+}
+
+// MARK: HemocoeleClass convenience initializers and mutators
+
+extension HemocoeleClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(HemocoeleClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acrogamy: JSONNull?? = nil,
+        amelification: JSONNull?? = nil,
+        autobiographic: JSONNull?? = nil,
+        berat: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        disproportionably: JSONNull?? = nil,
+        erythrite: JSONNull?? = nil,
+        graphic: JSONNull?? = nil,
+        hepatological: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        incommensurably: JSONNull?? = nil,
+        misaffirm: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        pocketbook: JSONNull?? = nil,
+        sclerometric: JSONNull?? = nil,
+        stambouline: JSONNull?? = nil,
+        stickpin: JSONNull?? = nil,
+        tubulure: JSONNull?? = nil,
+        undelated: JSONNull?? = nil,
+        unsalt: JSONNull?? = nil,
+        untutelar: JSONNull?? = nil,
+        vagrant: JSONNull?? = nil,
+        walt: JSONNull?? = nil
+    ) -> HemocoeleClass {
+        return HemocoeleClass(
+            acrogamy: acrogamy ?? self.acrogamy,
+            amelification: amelification ?? self.amelification,
+            autobiographic: autobiographic ?? self.autobiographic,
+            berat: berat ?? self.berat,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            disproportionably: disproportionably ?? self.disproportionably,
+            erythrite: erythrite ?? self.erythrite,
+            graphic: graphic ?? self.graphic,
+            hepatological: hepatological ?? self.hepatological,
+            homocerc: homocerc ?? self.homocerc,
+            incommensurably: incommensurably ?? self.incommensurably,
+            misaffirm: misaffirm ?? self.misaffirm,
+            nonbookish: nonbookish ?? self.nonbookish,
+            pocketbook: pocketbook ?? self.pocketbook,
+            sclerometric: sclerometric ?? self.sclerometric,
+            stambouline: stambouline ?? self.stambouline,
+            stickpin: stickpin ?? self.stickpin,
+            tubulure: tubulure ?? self.tubulure,
+            undelated: undelated ?? self.undelated,
+            unsalt: unsalt ?? self.unsalt,
+            untutelar: untutelar ?? self.untutelar,
+            vagrant: vagrant ?? self.vagrant,
+            walt: walt ?? self.walt
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Hoister: Codable, Hashable {
+    case cimeliaClass(CimeliaClass)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Hoister.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hoister"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Hyperpiesi: Codable, Hashable {
+    case cimeliaClass(CimeliaClass)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Hyperpiesi.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hyperpiesi"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Hyppish: Codable, Hashable {
+    case bool(Bool)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Hyppish.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hyppish"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Idealizer: Codable, Hashable {
+    case cimeliaClass(CimeliaClass)
+    case integer(Int)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Idealizer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Idealizer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Incrustator: Codable, Hashable {
+    case integer(Int)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Incrustator.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Incrustator"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Intentiveness: Codable, Hashable {
+    case cimeliaClass(CimeliaClass)
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Intentiveness.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Intentiveness"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Interacinar
+struct Interacinar: Codable, Hashable {
+    let assapan: Double
+    let benefactorship: Bool
+    let triseriatim: String
+    let tubbing: Int
+    let untrimmed: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case assapan = "assapan"
+        case benefactorship = "benefactorship"
+        case triseriatim = "triseriatim"
+        case tubbing = "tubbing"
+        case untrimmed = "untrimmed"
+    }
+}
+
+// MARK: Interacinar convenience initializers and mutators
+
+extension Interacinar {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Interacinar.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        assapan: Double? = nil,
+        benefactorship: Bool? = nil,
+        triseriatim: String? = nil,
+        tubbing: Int? = nil,
+        untrimmed: JSONNull?? = nil
+    ) -> Interacinar {
+        return Interacinar(
+            assapan: assapan ?? self.assapan,
+            benefactorship: benefactorship ?? self.benefactorship,
+            triseriatim: triseriatim ?? self.triseriatim,
+            tubbing: tubbing ?? self.tubbing,
+            untrimmed: untrimmed ?? self.untrimmed
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Jacutinga: Codable, Hashable {
+    case integerArray([Int])
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Jacutinga.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Jacutinga"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+class JSONNull: Codable, Hashable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    public func hash(into hasher: inout Hasher) {
+        hasher.combine(0)
+    }
+
+    public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/head/swift/test/inputs/json/priority/combinations1.json/sendable-true--1c3982c78639/quicktype.swift b/head/swift/test/inputs/json/priority/combinations1.json/sendable-true--1c3982c78639/quicktype.swift
new file mode 100644
index 0000000..3bfe783
--- /dev/null
+++ b/head/swift/test/inputs/json/priority/combinations1.json/sendable-true--1c3982c78639/quicktype.swift
@@ -0,0 +1,2838 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+import Foundation
+
+// MARK: - TopLevel
+struct TopLevel: Codable, Sendable {
+    let centrodesmose: String
+    let cerograph: [CerographElement]
+    let chemotherapeutics: [ChemotherapeuticElement]
+    let cimelia: [CimeliaElement]
+    let citrated: Int
+    let clinodome: [Clinodome]
+    let coadjust: [CoadjustElement]
+    let consilience: [Consilience]
+    let constructor: [Constructor]
+    let continuative: [Continuative]
+    let credulity: [CredulityElement]
+    let creviced: [Creviced]
+    let cubiculum: [[Int?]]
+    let deruralize: [DeruralizeElement]
+    let diaereses: [DiaereseElement]
+    let dissolution: [[JSONNull?]?]
+    let downstroke: [Downstroke]
+    let electrotautomerism: [Double?]
+    let eleutheromania: [Eleutheromania]
+    let encrust: Encrust
+    let entomoid: [Entomoid]
+    let epipaleolithic: [Epipaleolithic]
+    let expropriable: [Expropriable]
+    let faggingly: [FagginglyElement]
+    let fenks: [FenkElement]
+    let flagmaking: [FlagmakingElement]
+    let fluorometer: [Fluorometer]
+    let fulsome: [Int?]
+    let fuzzy: [Fuzzy]
+    let gardenwards: [Gardenward]
+    let generalissimo: [Generalissimo]
+    let habeas: [[String: Int]?]
+    let hemicrystalline: [Hemicrystalline]
+    let hemocoele: [HemocoeleElement]
+    let hoister: [Hoister]
+    let hyperpiesis: [Hyperpiesi]
+    let hyppish: [Hyppish]
+    let idealizer: [Idealizer]
+    let incrustator: [Incrustator]
+    let intentiveness: [Intentiveness]
+    let interacinar: Interacinar
+    let intercorrelation: [[Int]?]
+    let jacutinga: [Jacutinga]
+
+    enum CodingKeys: String, CodingKey {
+        case centrodesmose = "centrodesmose"
+        case cerograph = "cerograph"
+        case chemotherapeutics = "chemotherapeutics"
+        case cimelia = "cimelia"
+        case citrated = "citrated"
+        case clinodome = "clinodome"
+        case coadjust = "coadjust"
+        case consilience = "consilience"
+        case constructor = "constructor"
+        case continuative = "continuative"
+        case credulity = "credulity"
+        case creviced = "creviced"
+        case cubiculum = "cubiculum"
+        case deruralize = "deruralize"
+        case diaereses = "diaereses"
+        case dissolution = "dissolution"
+        case downstroke = "downstroke"
+        case electrotautomerism = "electrotautomerism"
+        case eleutheromania = "eleutheromania"
+        case encrust = "encrust"
+        case entomoid = "entomoid"
+        case epipaleolithic = "epipaleolithic"
+        case expropriable = "expropriable"
+        case faggingly = "faggingly"
+        case fenks = "fenks"
+        case flagmaking = "flagmaking"
+        case fluorometer = "fluorometer"
+        case fulsome = "fulsome"
+        case fuzzy = "fuzzy"
+        case gardenwards = "gardenwards"
+        case generalissimo = "generalissimo"
+        case habeas = "habeas"
+        case hemicrystalline = "hemicrystalline"
+        case hemocoele = "hemocoele"
+        case hoister = "hoister"
+        case hyperpiesis = "hyperpiesis"
+        case hyppish = "hyppish"
+        case idealizer = "idealizer"
+        case incrustator = "incrustator"
+        case intentiveness = "intentiveness"
+        case interacinar = "interacinar"
+        case intercorrelation = "intercorrelation"
+        case jacutinga = "jacutinga"
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(TopLevel.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        centrodesmose: String? = nil,
+        cerograph: [CerographElement]? = nil,
+        chemotherapeutics: [ChemotherapeuticElement]? = nil,
+        cimelia: [CimeliaElement]? = nil,
+        citrated: Int? = nil,
+        clinodome: [Clinodome]? = nil,
+        coadjust: [CoadjustElement]? = nil,
+        consilience: [Consilience]? = nil,
+        constructor: [Constructor]? = nil,
+        continuative: [Continuative]? = nil,
+        credulity: [CredulityElement]? = nil,
+        creviced: [Creviced]? = nil,
+        cubiculum: [[Int?]]? = nil,
+        deruralize: [DeruralizeElement]? = nil,
+        diaereses: [DiaereseElement]? = nil,
+        dissolution: [[JSONNull?]?]? = nil,
+        downstroke: [Downstroke]? = nil,
+        electrotautomerism: [Double?]? = nil,
+        eleutheromania: [Eleutheromania]? = nil,
+        encrust: Encrust? = nil,
+        entomoid: [Entomoid]? = nil,
+        epipaleolithic: [Epipaleolithic]? = nil,
+        expropriable: [Expropriable]? = nil,
+        faggingly: [FagginglyElement]? = nil,
+        fenks: [FenkElement]? = nil,
+        flagmaking: [FlagmakingElement]? = nil,
+        fluorometer: [Fluorometer]? = nil,
+        fulsome: [Int?]? = nil,
+        fuzzy: [Fuzzy]? = nil,
+        gardenwards: [Gardenward]? = nil,
+        generalissimo: [Generalissimo]? = nil,
+        habeas: [[String: Int]?]? = nil,
+        hemicrystalline: [Hemicrystalline]? = nil,
+        hemocoele: [HemocoeleElement]? = nil,
+        hoister: [Hoister]? = nil,
+        hyperpiesis: [Hyperpiesi]? = nil,
+        hyppish: [Hyppish]? = nil,
+        idealizer: [Idealizer]? = nil,
+        incrustator: [Incrustator]? = nil,
+        intentiveness: [Intentiveness]? = nil,
+        interacinar: Interacinar? = nil,
+        intercorrelation: [[Int]?]? = nil,
+        jacutinga: [Jacutinga]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            centrodesmose: centrodesmose ?? self.centrodesmose,
+            cerograph: cerograph ?? self.cerograph,
+            chemotherapeutics: chemotherapeutics ?? self.chemotherapeutics,
+            cimelia: cimelia ?? self.cimelia,
+            citrated: citrated ?? self.citrated,
+            clinodome: clinodome ?? self.clinodome,
+            coadjust: coadjust ?? self.coadjust,
+            consilience: consilience ?? self.consilience,
+            constructor: constructor ?? self.constructor,
+            continuative: continuative ?? self.continuative,
+            credulity: credulity ?? self.credulity,
+            creviced: creviced ?? self.creviced,
+            cubiculum: cubiculum ?? self.cubiculum,
+            deruralize: deruralize ?? self.deruralize,
+            diaereses: diaereses ?? self.diaereses,
+            dissolution: dissolution ?? self.dissolution,
+            downstroke: downstroke ?? self.downstroke,
+            electrotautomerism: electrotautomerism ?? self.electrotautomerism,
+            eleutheromania: eleutheromania ?? self.eleutheromania,
+            encrust: encrust ?? self.encrust,
+            entomoid: entomoid ?? self.entomoid,
+            epipaleolithic: epipaleolithic ?? self.epipaleolithic,
+            expropriable: expropriable ?? self.expropriable,
+            faggingly: faggingly ?? self.faggingly,
+            fenks: fenks ?? self.fenks,
+            flagmaking: flagmaking ?? self.flagmaking,
+            fluorometer: fluorometer ?? self.fluorometer,
+            fulsome: fulsome ?? self.fulsome,
+            fuzzy: fuzzy ?? self.fuzzy,
+            gardenwards: gardenwards ?? self.gardenwards,
+            generalissimo: generalissimo ?? self.generalissimo,
+            habeas: habeas ?? self.habeas,
+            hemicrystalline: hemicrystalline ?? self.hemicrystalline,
+            hemocoele: hemocoele ?? self.hemocoele,
+            hoister: hoister ?? self.hoister,
+            hyperpiesis: hyperpiesis ?? self.hyperpiesis,
+            hyppish: hyppish ?? self.hyppish,
+            idealizer: idealizer ?? self.idealizer,
+            incrustator: incrustator ?? self.incrustator,
+            intentiveness: intentiveness ?? self.intentiveness,
+            interacinar: interacinar ?? self.interacinar,
+            intercorrelation: intercorrelation ?? self.intercorrelation,
+            jacutinga: jacutinga ?? self.jacutinga
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum CerographElement: Codable, Sendable {
+    case cerographClass(CerographClass)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CerographClass.self) {
+            self = .cerographClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(CerographElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CerographElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cerographClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - CerographClass
+struct CerographClass: Codable, Sendable {
+    let apotropaion: JSONNull?
+    let casuary: JSONNull?
+    let creaker: JSONNull?
+    let disqualification: JSONNull?
+    let imperatorious: JSONNull?
+    let impermeabilize: JSONNull?
+    let metastoma: JSONNull?
+    let noctidiurnal: JSONNull?
+    let nonreserve: JSONNull?
+    let ophthalmotonometry: JSONNull?
+    let pailful: JSONNull?
+    let pigfish: JSONNull?
+    let pongee: JSONNull?
+    let prosodical: JSONNull?
+    let scrofuloderm: JSONNull?
+    let storekeeping: JSONNull?
+    let therologist: JSONNull?
+    let tolowa: JSONNull?
+    let tradeful: JSONNull?
+    let unriveting: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case apotropaion = "apotropaion"
+        case casuary = "casuary"
+        case creaker = "creaker"
+        case disqualification = "disqualification"
+        case imperatorious = "imperatorious"
+        case impermeabilize = "impermeabilize"
+        case metastoma = "metastoma"
+        case noctidiurnal = "noctidiurnal"
+        case nonreserve = "nonreserve"
+        case ophthalmotonometry = "ophthalmotonometry"
+        case pailful = "pailful"
+        case pigfish = "pigfish"
+        case pongee = "pongee"
+        case prosodical = "prosodical"
+        case scrofuloderm = "scrofuloderm"
+        case storekeeping = "storekeeping"
+        case therologist = "therologist"
+        case tolowa = "Tolowa"
+        case tradeful = "tradeful"
+        case unriveting = "unriveting"
+    }
+}
+
+// MARK: CerographClass convenience initializers and mutators
+
+extension CerographClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(CerographClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apotropaion: JSONNull?? = nil,
+        casuary: JSONNull?? = nil,
+        creaker: JSONNull?? = nil,
+        disqualification: JSONNull?? = nil,
+        imperatorious: JSONNull?? = nil,
+        impermeabilize: JSONNull?? = nil,
+        metastoma: JSONNull?? = nil,
+        noctidiurnal: JSONNull?? = nil,
+        nonreserve: JSONNull?? = nil,
+        ophthalmotonometry: JSONNull?? = nil,
+        pailful: JSONNull?? = nil,
+        pigfish: JSONNull?? = nil,
+        pongee: JSONNull?? = nil,
+        prosodical: JSONNull?? = nil,
+        scrofuloderm: JSONNull?? = nil,
+        storekeeping: JSONNull?? = nil,
+        therologist: JSONNull?? = nil,
+        tolowa: JSONNull?? = nil,
+        tradeful: JSONNull?? = nil,
+        unriveting: JSONNull?? = nil
+    ) -> CerographClass {
+        return CerographClass(
+            apotropaion: apotropaion ?? self.apotropaion,
+            casuary: casuary ?? self.casuary,
+            creaker: creaker ?? self.creaker,
+            disqualification: disqualification ?? self.disqualification,
+            imperatorious: imperatorious ?? self.imperatorious,
+            impermeabilize: impermeabilize ?? self.impermeabilize,
+            metastoma: metastoma ?? self.metastoma,
+            noctidiurnal: noctidiurnal ?? self.noctidiurnal,
+            nonreserve: nonreserve ?? self.nonreserve,
+            ophthalmotonometry: ophthalmotonometry ?? self.ophthalmotonometry,
+            pailful: pailful ?? self.pailful,
+            pigfish: pigfish ?? self.pigfish,
+            pongee: pongee ?? self.pongee,
+            prosodical: prosodical ?? self.prosodical,
+            scrofuloderm: scrofuloderm ?? self.scrofuloderm,
+            storekeeping: storekeeping ?? self.storekeeping,
+            therologist: therologist ?? self.therologist,
+            tolowa: tolowa ?? self.tolowa,
+            tradeful: tradeful ?? self.tradeful,
+            unriveting: unriveting ?? self.unriveting
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum ChemotherapeuticElement: Codable, Sendable {
+    case chemotherapeuticClass(ChemotherapeuticClass)
+    case integer(Int)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(ChemotherapeuticClass.self) {
+            self = .chemotherapeuticClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(ChemotherapeuticElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for ChemotherapeuticElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .chemotherapeuticClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - ChemotherapeuticClass
+struct ChemotherapeuticClass: Codable, Sendable {
+    let angioneurotic: JSONNull?
+    let availment: JSONNull?
+    let bladelet: JSONNull?
+    let catharticalness: Double?
+    let caulis: JSONNull?
+    let chalcus: JSONNull?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let enteradenological: JSONNull?
+    let homocerc: Bool?
+    let imporosity: JSONNull?
+    let insistently: JSONNull?
+    let intraparietal: JSONNull?
+    let ivied: JSONNull?
+    let maureen: JSONNull?
+    let nonbookish: JSONNull?
+    let nostochine: JSONNull?
+    let nutcracker: JSONNull?
+    let ofttimes: JSONNull?
+    let phenocryst: JSONNull?
+    let precoincident: JSONNull?
+    let ramiferous: JSONNull?
+    let stagmometer: JSONNull?
+    let tetherball: JSONNull?
+    let unshy: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case angioneurotic = "angioneurotic"
+        case availment = "availment"
+        case bladelet = "bladelet"
+        case catharticalness = "catharticalness"
+        case caulis = "caulis"
+        case chalcus = "chalcus"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case enteradenological = "enteradenological"
+        case homocerc = "homocerc"
+        case imporosity = "imporosity"
+        case insistently = "insistently"
+        case intraparietal = "intraparietal"
+        case ivied = "ivied"
+        case maureen = "Maureen"
+        case nonbookish = "nonbookish"
+        case nostochine = "nostochine"
+        case nutcracker = "nutcracker"
+        case ofttimes = "ofttimes"
+        case phenocryst = "phenocryst"
+        case precoincident = "precoincident"
+        case ramiferous = "ramiferous"
+        case stagmometer = "stagmometer"
+        case tetherball = "tetherball"
+        case unshy = "unshy"
+    }
+}
+
+// MARK: ChemotherapeuticClass convenience initializers and mutators
+
+extension ChemotherapeuticClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(ChemotherapeuticClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        angioneurotic: JSONNull?? = nil,
+        availment: JSONNull?? = nil,
+        bladelet: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        caulis: JSONNull?? = nil,
+        chalcus: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        enteradenological: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        imporosity: JSONNull?? = nil,
+        insistently: JSONNull?? = nil,
+        intraparietal: JSONNull?? = nil,
+        ivied: JSONNull?? = nil,
+        maureen: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        nostochine: JSONNull?? = nil,
+        nutcracker: JSONNull?? = nil,
+        ofttimes: JSONNull?? = nil,
+        phenocryst: JSONNull?? = nil,
+        precoincident: JSONNull?? = nil,
+        ramiferous: JSONNull?? = nil,
+        stagmometer: JSONNull?? = nil,
+        tetherball: JSONNull?? = nil,
+        unshy: JSONNull?? = nil
+    ) -> ChemotherapeuticClass {
+        return ChemotherapeuticClass(
+            angioneurotic: angioneurotic ?? self.angioneurotic,
+            availment: availment ?? self.availment,
+            bladelet: bladelet ?? self.bladelet,
+            catharticalness: catharticalness ?? self.catharticalness,
+            caulis: caulis ?? self.caulis,
+            chalcus: chalcus ?? self.chalcus,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            enteradenological: enteradenological ?? self.enteradenological,
+            homocerc: homocerc ?? self.homocerc,
+            imporosity: imporosity ?? self.imporosity,
+            insistently: insistently ?? self.insistently,
+            intraparietal: intraparietal ?? self.intraparietal,
+            ivied: ivied ?? self.ivied,
+            maureen: maureen ?? self.maureen,
+            nonbookish: nonbookish ?? self.nonbookish,
+            nostochine: nostochine ?? self.nostochine,
+            nutcracker: nutcracker ?? self.nutcracker,
+            ofttimes: ofttimes ?? self.ofttimes,
+            phenocryst: phenocryst ?? self.phenocryst,
+            precoincident: precoincident ?? self.precoincident,
+            ramiferous: ramiferous ?? self.ramiferous,
+            stagmometer: stagmometer ?? self.stagmometer,
+            tetherball: tetherball ?? self.tetherball,
+            unshy: unshy ?? self.unshy
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum CimeliaElement: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(CimeliaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CimeliaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - CimeliaClass
+struct CimeliaClass: Codable, Sendable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+}
+
+// MARK: CimeliaClass convenience initializers and mutators
+
+extension CimeliaClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(CimeliaClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> CimeliaClass {
+        return CimeliaClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Clinodome: Codable, Sendable {
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Clinodome.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Clinodome"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum CoadjustElement: Codable, Sendable {
+    case coadjustClass(CoadjustClass)
+    case double(Double)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(CoadjustClass.self) {
+            self = .coadjustClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(CoadjustElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CoadjustElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .coadjustClass(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - CoadjustClass
+struct CoadjustClass: Codable, Sendable {
+    let amidosulphonal: JSONNull?
+    let benny: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let ensnare: JSONNull?
+    let homocerc: Bool?
+    let hybridizer: JSONNull?
+    let leastwise: JSONNull?
+    let lof: JSONNull?
+    let monkhood: JSONNull?
+    let netherlandish: JSONNull?
+    let nonbookish: JSONNull?
+    let peonism: JSONNull?
+    let phonelescope: JSONNull?
+    let porphyrogeniture: JSONNull?
+    let preindemnify: JSONNull?
+    let rosal: JSONNull?
+    let scalenous: JSONNull?
+    let scopine: JSONNull?
+    let sedaceae: JSONNull?
+    let suberinize: JSONNull?
+    let symbiot: JSONNull?
+    let tablefellow: JSONNull?
+    let unchargeable: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amidosulphonal = "amidosulphonal"
+        case benny = "Benny"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case ensnare = "ensnare"
+        case homocerc = "homocerc"
+        case hybridizer = "hybridizer"
+        case leastwise = "leastwise"
+        case lof = "lof"
+        case monkhood = "monkhood"
+        case netherlandish = "Netherlandish"
+        case nonbookish = "nonbookish"
+        case peonism = "peonism"
+        case phonelescope = "Phonelescope"
+        case porphyrogeniture = "porphyrogeniture"
+        case preindemnify = "preindemnify"
+        case rosal = "rosal"
+        case scalenous = "scalenous"
+        case scopine = "scopine"
+        case sedaceae = "Sedaceae"
+        case suberinize = "suberinize"
+        case symbiot = "symbiot"
+        case tablefellow = "tablefellow"
+        case unchargeable = "unchargeable"
+    }
+}
+
+// MARK: CoadjustClass convenience initializers and mutators
+
+extension CoadjustClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(CoadjustClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amidosulphonal: JSONNull?? = nil,
+        benny: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        ensnare: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        hybridizer: JSONNull?? = nil,
+        leastwise: JSONNull?? = nil,
+        lof: JSONNull?? = nil,
+        monkhood: JSONNull?? = nil,
+        netherlandish: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        peonism: JSONNull?? = nil,
+        phonelescope: JSONNull?? = nil,
+        porphyrogeniture: JSONNull?? = nil,
+        preindemnify: JSONNull?? = nil,
+        rosal: JSONNull?? = nil,
+        scalenous: JSONNull?? = nil,
+        scopine: JSONNull?? = nil,
+        sedaceae: JSONNull?? = nil,
+        suberinize: JSONNull?? = nil,
+        symbiot: JSONNull?? = nil,
+        tablefellow: JSONNull?? = nil,
+        unchargeable: JSONNull?? = nil
+    ) -> CoadjustClass {
+        return CoadjustClass(
+            amidosulphonal: amidosulphonal ?? self.amidosulphonal,
+            benny: benny ?? self.benny,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ensnare: ensnare ?? self.ensnare,
+            homocerc: homocerc ?? self.homocerc,
+            hybridizer: hybridizer ?? self.hybridizer,
+            leastwise: leastwise ?? self.leastwise,
+            lof: lof ?? self.lof,
+            monkhood: monkhood ?? self.monkhood,
+            netherlandish: netherlandish ?? self.netherlandish,
+            nonbookish: nonbookish ?? self.nonbookish,
+            peonism: peonism ?? self.peonism,
+            phonelescope: phonelescope ?? self.phonelescope,
+            porphyrogeniture: porphyrogeniture ?? self.porphyrogeniture,
+            preindemnify: preindemnify ?? self.preindemnify,
+            rosal: rosal ?? self.rosal,
+            scalenous: scalenous ?? self.scalenous,
+            scopine: scopine ?? self.scopine,
+            sedaceae: sedaceae ?? self.sedaceae,
+            suberinize: suberinize ?? self.suberinize,
+            symbiot: symbiot ?? self.symbiot,
+            tablefellow: tablefellow ?? self.tablefellow,
+            unchargeable: unchargeable ?? self.unchargeable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Consilience: Codable, Sendable {
+    case double(Double)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Consilience.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Consilience"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Constructor: Codable, Sendable {
+    case bool(Bool)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Constructor.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Constructor"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Continuative: Codable, Sendable {
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Continuative.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Continuative"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum CredulityElement: Codable, Sendable {
+    case credulityClass(CredulityClass)
+    case integer(Int)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CredulityClass.self) {
+            self = .credulityClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(CredulityElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CredulityElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .credulityClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - CredulityClass
+struct CredulityClass: Codable, Sendable {
+    let ammonolytic: JSONNull?
+    let bushmaster: JSONNull?
+    let considering: JSONNull?
+    let consuetudinary: JSONNull?
+    let embarras: JSONNull?
+    let fineness: JSONNull?
+    let flaithship: JSONNull?
+    let flavia: JSONNull?
+    let gruffly: JSONNull?
+    let hedychium: JSONNull?
+    let leadwort: JSONNull?
+    let overseriously: JSONNull?
+    let parabola: JSONNull?
+    let pectinatodenticulate: JSONNull?
+    let popean: JSONNull?
+    let pornocrat: JSONNull?
+    let quadrisect: JSONNull?
+    let seriality: JSONNull?
+    let vamphorn: JSONNull?
+    let wharp: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case ammonolytic = "ammonolytic"
+        case bushmaster = "bushmaster"
+        case considering = "considering"
+        case consuetudinary = "consuetudinary"
+        case embarras = "embarras"
+        case fineness = "fineness"
+        case flaithship = "flaithship"
+        case flavia = "Flavia"
+        case gruffly = "gruffly"
+        case hedychium = "Hedychium"
+        case leadwort = "leadwort"
+        case overseriously = "overseriously"
+        case parabola = "parabola"
+        case pectinatodenticulate = "pectinatodenticulate"
+        case popean = "Popean"
+        case pornocrat = "pornocrat"
+        case quadrisect = "quadrisect"
+        case seriality = "seriality"
+        case vamphorn = "vamphorn"
+        case wharp = "wharp"
+    }
+}
+
+// MARK: CredulityClass convenience initializers and mutators
+
+extension CredulityClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(CredulityClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        ammonolytic: JSONNull?? = nil,
+        bushmaster: JSONNull?? = nil,
+        considering: JSONNull?? = nil,
+        consuetudinary: JSONNull?? = nil,
+        embarras: JSONNull?? = nil,
+        fineness: JSONNull?? = nil,
+        flaithship: JSONNull?? = nil,
+        flavia: JSONNull?? = nil,
+        gruffly: JSONNull?? = nil,
+        hedychium: JSONNull?? = nil,
+        leadwort: JSONNull?? = nil,
+        overseriously: JSONNull?? = nil,
+        parabola: JSONNull?? = nil,
+        pectinatodenticulate: JSONNull?? = nil,
+        popean: JSONNull?? = nil,
+        pornocrat: JSONNull?? = nil,
+        quadrisect: JSONNull?? = nil,
+        seriality: JSONNull?? = nil,
+        vamphorn: JSONNull?? = nil,
+        wharp: JSONNull?? = nil
+    ) -> CredulityClass {
+        return CredulityClass(
+            ammonolytic: ammonolytic ?? self.ammonolytic,
+            bushmaster: bushmaster ?? self.bushmaster,
+            considering: considering ?? self.considering,
+            consuetudinary: consuetudinary ?? self.consuetudinary,
+            embarras: embarras ?? self.embarras,
+            fineness: fineness ?? self.fineness,
+            flaithship: flaithship ?? self.flaithship,
+            flavia: flavia ?? self.flavia,
+            gruffly: gruffly ?? self.gruffly,
+            hedychium: hedychium ?? self.hedychium,
+            leadwort: leadwort ?? self.leadwort,
+            overseriously: overseriously ?? self.overseriously,
+            parabola: parabola ?? self.parabola,
+            pectinatodenticulate: pectinatodenticulate ?? self.pectinatodenticulate,
+            popean: popean ?? self.popean,
+            pornocrat: pornocrat ?? self.pornocrat,
+            quadrisect: quadrisect ?? self.quadrisect,
+            seriality: seriality ?? self.seriality,
+            vamphorn: vamphorn ?? self.vamphorn,
+            wharp: wharp ?? self.wharp
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Creviced: Codable, Sendable {
+    case bool(Bool)
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Creviced.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Creviced"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum DeruralizeElement: Codable, Sendable {
+    case bool(Bool)
+    case deruralizeClass(DeruralizeClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(DeruralizeClass.self) {
+            self = .deruralizeClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(DeruralizeElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for DeruralizeElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .deruralizeClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - DeruralizeClass
+struct DeruralizeClass: Codable, Sendable {
+    let bockerel: JSONNull?
+    let boulder: JSONNull?
+    let churrus: JSONNull?
+    let counterdigged: JSONNull?
+    let dialogite: JSONNull?
+    let digenic: JSONNull?
+    let dunbird: JSONNull?
+    let ergatogyne: JSONNull?
+    let fiendful: JSONNull?
+    let jackrod: JSONNull?
+    let jehovistic: JSONNull?
+    let paninean: JSONNull?
+    let panther: JSONNull?
+    let placentigerous: JSONNull?
+    let romney: JSONNull?
+    let sparm: JSONNull?
+    let tocsin: JSONNull?
+    let unnicked: JSONNull?
+    let unstavable: JSONNull?
+    let windfirm: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case bockerel = "bockerel"
+        case boulder = "boulder"
+        case churrus = "churrus"
+        case counterdigged = "counterdigged"
+        case dialogite = "dialogite"
+        case digenic = "digenic"
+        case dunbird = "dunbird"
+        case ergatogyne = "ergatogyne"
+        case fiendful = "fiendful"
+        case jackrod = "jackrod"
+        case jehovistic = "Jehovistic"
+        case paninean = "Paninean"
+        case panther = "panther"
+        case placentigerous = "placentigerous"
+        case romney = "Romney"
+        case sparm = "sparm"
+        case tocsin = "tocsin"
+        case unnicked = "unnicked"
+        case unstavable = "unstavable"
+        case windfirm = "windfirm"
+    }
+}
+
+// MARK: DeruralizeClass convenience initializers and mutators
+
+extension DeruralizeClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(DeruralizeClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        bockerel: JSONNull?? = nil,
+        boulder: JSONNull?? = nil,
+        churrus: JSONNull?? = nil,
+        counterdigged: JSONNull?? = nil,
+        dialogite: JSONNull?? = nil,
+        digenic: JSONNull?? = nil,
+        dunbird: JSONNull?? = nil,
+        ergatogyne: JSONNull?? = nil,
+        fiendful: JSONNull?? = nil,
+        jackrod: JSONNull?? = nil,
+        jehovistic: JSONNull?? = nil,
+        paninean: JSONNull?? = nil,
+        panther: JSONNull?? = nil,
+        placentigerous: JSONNull?? = nil,
+        romney: JSONNull?? = nil,
+        sparm: JSONNull?? = nil,
+        tocsin: JSONNull?? = nil,
+        unnicked: JSONNull?? = nil,
+        unstavable: JSONNull?? = nil,
+        windfirm: JSONNull?? = nil
+    ) -> DeruralizeClass {
+        return DeruralizeClass(
+            bockerel: bockerel ?? self.bockerel,
+            boulder: boulder ?? self.boulder,
+            churrus: churrus ?? self.churrus,
+            counterdigged: counterdigged ?? self.counterdigged,
+            dialogite: dialogite ?? self.dialogite,
+            digenic: digenic ?? self.digenic,
+            dunbird: dunbird ?? self.dunbird,
+            ergatogyne: ergatogyne ?? self.ergatogyne,
+            fiendful: fiendful ?? self.fiendful,
+            jackrod: jackrod ?? self.jackrod,
+            jehovistic: jehovistic ?? self.jehovistic,
+            paninean: paninean ?? self.paninean,
+            panther: panther ?? self.panther,
+            placentigerous: placentigerous ?? self.placentigerous,
+            romney: romney ?? self.romney,
+            sparm: sparm ?? self.sparm,
+            tocsin: tocsin ?? self.tocsin,
+            unnicked: unnicked ?? self.unnicked,
+            unstavable: unstavable ?? self.unstavable,
+            windfirm: windfirm ?? self.windfirm
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum DiaereseElement: Codable, Sendable {
+    case bool(Bool)
+    case diaereseClass(DiaereseClass)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(DiaereseClass.self) {
+            self = .diaereseClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(DiaereseElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for DiaereseElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .diaereseClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - DiaereseClass
+struct DiaereseClass: Codable, Sendable {
+    let amoreuxia: JSONNull?
+    let ani: JSONNull?
+    let bernicle: JSONNull?
+    let blackwasher: JSONNull?
+    let blowhard: JSONNull?
+    let broma: JSONNull?
+    let closecross: JSONNull?
+    let congregationalism: JSONNull?
+    let grayly: JSONNull?
+    let historically: JSONNull?
+    let hoast: JSONNull?
+    let irretentive: JSONNull?
+    let parcener: JSONNull?
+    let pedder: JSONNull?
+    let pseudoanatomic: JSONNull?
+    let rhizocarpian: JSONNull?
+    let samel: JSONNull?
+    let silker: JSONNull?
+    let subdentated: JSONNull?
+    let subobscure: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amoreuxia = "Amoreuxia"
+        case ani = "ani"
+        case bernicle = "bernicle"
+        case blackwasher = "blackwasher"
+        case blowhard = "blowhard"
+        case broma = "broma"
+        case closecross = "closecross"
+        case congregationalism = "congregationalism"
+        case grayly = "grayly"
+        case historically = "historically"
+        case hoast = "hoast"
+        case irretentive = "irretentive"
+        case parcener = "parcener"
+        case pedder = "pedder"
+        case pseudoanatomic = "pseudoanatomic"
+        case rhizocarpian = "rhizocarpian"
+        case samel = "samel"
+        case silker = "silker"
+        case subdentated = "subdentated"
+        case subobscure = "subobscure"
+    }
+}
+
+// MARK: DiaereseClass convenience initializers and mutators
+
+extension DiaereseClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(DiaereseClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amoreuxia: JSONNull?? = nil,
+        ani: JSONNull?? = nil,
+        bernicle: JSONNull?? = nil,
+        blackwasher: JSONNull?? = nil,
+        blowhard: JSONNull?? = nil,
+        broma: JSONNull?? = nil,
+        closecross: JSONNull?? = nil,
+        congregationalism: JSONNull?? = nil,
+        grayly: JSONNull?? = nil,
+        historically: JSONNull?? = nil,
+        hoast: JSONNull?? = nil,
+        irretentive: JSONNull?? = nil,
+        parcener: JSONNull?? = nil,
+        pedder: JSONNull?? = nil,
+        pseudoanatomic: JSONNull?? = nil,
+        rhizocarpian: JSONNull?? = nil,
+        samel: JSONNull?? = nil,
+        silker: JSONNull?? = nil,
+        subdentated: JSONNull?? = nil,
+        subobscure: JSONNull?? = nil
+    ) -> DiaereseClass {
+        return DiaereseClass(
+            amoreuxia: amoreuxia ?? self.amoreuxia,
+            ani: ani ?? self.ani,
+            bernicle: bernicle ?? self.bernicle,
+            blackwasher: blackwasher ?? self.blackwasher,
+            blowhard: blowhard ?? self.blowhard,
+            broma: broma ?? self.broma,
+            closecross: closecross ?? self.closecross,
+            congregationalism: congregationalism ?? self.congregationalism,
+            grayly: grayly ?? self.grayly,
+            historically: historically ?? self.historically,
+            hoast: hoast ?? self.hoast,
+            irretentive: irretentive ?? self.irretentive,
+            parcener: parcener ?? self.parcener,
+            pedder: pedder ?? self.pedder,
+            pseudoanatomic: pseudoanatomic ?? self.pseudoanatomic,
+            rhizocarpian: rhizocarpian ?? self.rhizocarpian,
+            samel: samel ?? self.samel,
+            silker: silker ?? self.silker,
+            subdentated: subdentated ?? self.subdentated,
+            subobscure: subobscure ?? self.subobscure
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Downstroke: Codable, Sendable {
+    case bool(Bool)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Downstroke.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Downstroke"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Eleutheromania: Codable, Sendable {
+    case double(Double)
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Eleutheromania.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Eleutheromania"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Encrust
+struct Encrust: Codable, Sendable {
+    let comradely: JSONNull?
+    let diacanthous: JSONNull?
+    let feminineness: JSONNull?
+    let gossamered: JSONNull?
+    let hibernia: JSONNull?
+    let hibiscus: JSONNull?
+    let lepidosauria: JSONNull?
+    let lollingly: JSONNull?
+    let manager: JSONNull?
+    let mechanic: JSONNull?
+    let overminuteness: JSONNull?
+    let papelonne: JSONNull?
+    let plebification: JSONNull?
+    let pugmiller: JSONNull?
+    let recoveror: JSONNull?
+    let spermatoblastic: JSONNull?
+    let syllidae: JSONNull?
+    let ungyved: JSONNull?
+    let whirlabout: JSONNull?
+    let woodenware: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case comradely = "comradely"
+        case diacanthous = "diacanthous"
+        case feminineness = "feminineness"
+        case gossamered = "gossamered"
+        case hibernia = "Hibernia"
+        case hibiscus = "Hibiscus"
+        case lepidosauria = "Lepidosauria"
+        case lollingly = "lollingly"
+        case manager = "manager"
+        case mechanic = "mechanic"
+        case overminuteness = "overminuteness"
+        case papelonne = "papelonne"
+        case plebification = "plebification"
+        case pugmiller = "pugmiller"
+        case recoveror = "recoveror"
+        case spermatoblastic = "spermatoblastic"
+        case syllidae = "Syllidae"
+        case ungyved = "ungyved"
+        case whirlabout = "whirlabout"
+        case woodenware = "woodenware"
+    }
+}
+
+// MARK: Encrust convenience initializers and mutators
+
+extension Encrust {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Encrust.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        comradely: JSONNull?? = nil,
+        diacanthous: JSONNull?? = nil,
+        feminineness: JSONNull?? = nil,
+        gossamered: JSONNull?? = nil,
+        hibernia: JSONNull?? = nil,
+        hibiscus: JSONNull?? = nil,
+        lepidosauria: JSONNull?? = nil,
+        lollingly: JSONNull?? = nil,
+        manager: JSONNull?? = nil,
+        mechanic: JSONNull?? = nil,
+        overminuteness: JSONNull?? = nil,
+        papelonne: JSONNull?? = nil,
+        plebification: JSONNull?? = nil,
+        pugmiller: JSONNull?? = nil,
+        recoveror: JSONNull?? = nil,
+        spermatoblastic: JSONNull?? = nil,
+        syllidae: JSONNull?? = nil,
+        ungyved: JSONNull?? = nil,
+        whirlabout: JSONNull?? = nil,
+        woodenware: JSONNull?? = nil
+    ) -> Encrust {
+        return Encrust(
+            comradely: comradely ?? self.comradely,
+            diacanthous: diacanthous ?? self.diacanthous,
+            feminineness: feminineness ?? self.feminineness,
+            gossamered: gossamered ?? self.gossamered,
+            hibernia: hibernia ?? self.hibernia,
+            hibiscus: hibiscus ?? self.hibiscus,
+            lepidosauria: lepidosauria ?? self.lepidosauria,
+            lollingly: lollingly ?? self.lollingly,
+            manager: manager ?? self.manager,
+            mechanic: mechanic ?? self.mechanic,
+            overminuteness: overminuteness ?? self.overminuteness,
+            papelonne: papelonne ?? self.papelonne,
+            plebification: plebification ?? self.plebification,
+            pugmiller: pugmiller ?? self.pugmiller,
+            recoveror: recoveror ?? self.recoveror,
+            spermatoblastic: spermatoblastic ?? self.spermatoblastic,
+            syllidae: syllidae ?? self.syllidae,
+            ungyved: ungyved ?? self.ungyved,
+            whirlabout: whirlabout ?? self.whirlabout,
+            woodenware: woodenware ?? self.woodenware
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Entomoid: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case integer(Int)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Entomoid.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Entomoid"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Epipaleolithic: Codable, Sendable {
+    case double(Double)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Epipaleolithic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Epipaleolithic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Expropriable: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Expropriable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Expropriable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum FagginglyElement: Codable, Sendable {
+    case double(Double)
+    case fagginglyClass(FagginglyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(FagginglyClass.self) {
+            self = .fagginglyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(FagginglyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for FagginglyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .fagginglyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - FagginglyClass
+struct FagginglyClass: Codable, Sendable {
+    let abranchian: JSONNull?
+    let aculeiform: JSONNull?
+    let adiaphoristic: JSONNull?
+    let adoptionism: JSONNull?
+    let anglic: JSONNull?
+    let antrotomy: JSONNull?
+    let coerciveness: JSONNull?
+    let decorist: JSONNull?
+    let duckhood: JSONNull?
+    let heteromeri: JSONNull?
+    let hypochnose: JSONNull?
+    let lochage: JSONNull?
+    let melee: JSONNull?
+    let nonconformitant: JSONNull?
+    let poinsettia: JSONNull?
+    let putatively: JSONNull?
+    let semivolatile: JSONNull?
+    let soleas: JSONNull?
+    let unfastenable: JSONNull?
+    let unmillinered: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case abranchian = "abranchian"
+        case aculeiform = "aculeiform"
+        case adiaphoristic = "adiaphoristic"
+        case adoptionism = "adoptionism"
+        case anglic = "Anglic"
+        case antrotomy = "antrotomy"
+        case coerciveness = "coerciveness"
+        case decorist = "decorist"
+        case duckhood = "duckhood"
+        case heteromeri = "Heteromeri"
+        case hypochnose = "hypochnose"
+        case lochage = "lochage"
+        case melee = "melee"
+        case nonconformitant = "nonconformitant"
+        case poinsettia = "Poinsettia"
+        case putatively = "putatively"
+        case semivolatile = "semivolatile"
+        case soleas = "soleas"
+        case unfastenable = "unfastenable"
+        case unmillinered = "unmillinered"
+    }
+}
+
+// MARK: FagginglyClass convenience initializers and mutators
+
+extension FagginglyClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(FagginglyClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        abranchian: JSONNull?? = nil,
+        aculeiform: JSONNull?? = nil,
+        adiaphoristic: JSONNull?? = nil,
+        adoptionism: JSONNull?? = nil,
+        anglic: JSONNull?? = nil,
+        antrotomy: JSONNull?? = nil,
+        coerciveness: JSONNull?? = nil,
+        decorist: JSONNull?? = nil,
+        duckhood: JSONNull?? = nil,
+        heteromeri: JSONNull?? = nil,
+        hypochnose: JSONNull?? = nil,
+        lochage: JSONNull?? = nil,
+        melee: JSONNull?? = nil,
+        nonconformitant: JSONNull?? = nil,
+        poinsettia: JSONNull?? = nil,
+        putatively: JSONNull?? = nil,
+        semivolatile: JSONNull?? = nil,
+        soleas: JSONNull?? = nil,
+        unfastenable: JSONNull?? = nil,
+        unmillinered: JSONNull?? = nil
+    ) -> FagginglyClass {
+        return FagginglyClass(
+            abranchian: abranchian ?? self.abranchian,
+            aculeiform: aculeiform ?? self.aculeiform,
+            adiaphoristic: adiaphoristic ?? self.adiaphoristic,
+            adoptionism: adoptionism ?? self.adoptionism,
+            anglic: anglic ?? self.anglic,
+            antrotomy: antrotomy ?? self.antrotomy,
+            coerciveness: coerciveness ?? self.coerciveness,
+            decorist: decorist ?? self.decorist,
+            duckhood: duckhood ?? self.duckhood,
+            heteromeri: heteromeri ?? self.heteromeri,
+            hypochnose: hypochnose ?? self.hypochnose,
+            lochage: lochage ?? self.lochage,
+            melee: melee ?? self.melee,
+            nonconformitant: nonconformitant ?? self.nonconformitant,
+            poinsettia: poinsettia ?? self.poinsettia,
+            putatively: putatively ?? self.putatively,
+            semivolatile: semivolatile ?? self.semivolatile,
+            soleas: soleas ?? self.soleas,
+            unfastenable: unfastenable ?? self.unfastenable,
+            unmillinered: unmillinered ?? self.unmillinered
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum FenkElement: Codable, Sendable {
+    case fenkClass(FenkClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(FenkClass.self) {
+            self = .fenkClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(FenkElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for FenkElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .fenkClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - FenkClass
+struct FenkClass: Codable, Sendable {
+    let apoise: JSONNull?
+    let astronomize: JSONNull?
+    let cockhorse: JSONNull?
+    let copular: JSONNull?
+    let dagomba: JSONNull?
+    let draffy: JSONNull?
+    let foreigner: JSONNull?
+    let guyandot: JSONNull?
+    let neurogliosis: JSONNull?
+    let osmious: JSONNull?
+    let palpitate: JSONNull?
+    let rebukeable: JSONNull?
+    let reinwardtia: JSONNull?
+    let reservatory: JSONNull?
+    let scalt: JSONNull?
+    let scripturalize: JSONNull?
+    let tintometer: JSONNull?
+    let tritoness: JSONNull?
+    let undergrade: JSONNull?
+    let undermountain: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case apoise = "apoise"
+        case astronomize = "astronomize"
+        case cockhorse = "cockhorse"
+        case copular = "copular"
+        case dagomba = "Dagomba"
+        case draffy = "draffy"
+        case foreigner = "foreigner"
+        case guyandot = "Guyandot"
+        case neurogliosis = "neurogliosis"
+        case osmious = "osmious"
+        case palpitate = "palpitate"
+        case rebukeable = "rebukeable"
+        case reinwardtia = "Reinwardtia"
+        case reservatory = "reservatory"
+        case scalt = "scalt"
+        case scripturalize = "scripturalize"
+        case tintometer = "tintometer"
+        case tritoness = "Tritoness"
+        case undergrade = "undergrade"
+        case undermountain = "undermountain"
+    }
+}
+
+// MARK: FenkClass convenience initializers and mutators
+
+extension FenkClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(FenkClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apoise: JSONNull?? = nil,
+        astronomize: JSONNull?? = nil,
+        cockhorse: JSONNull?? = nil,
+        copular: JSONNull?? = nil,
+        dagomba: JSONNull?? = nil,
+        draffy: JSONNull?? = nil,
+        foreigner: JSONNull?? = nil,
+        guyandot: JSONNull?? = nil,
+        neurogliosis: JSONNull?? = nil,
+        osmious: JSONNull?? = nil,
+        palpitate: JSONNull?? = nil,
+        rebukeable: JSONNull?? = nil,
+        reinwardtia: JSONNull?? = nil,
+        reservatory: JSONNull?? = nil,
+        scalt: JSONNull?? = nil,
+        scripturalize: JSONNull?? = nil,
+        tintometer: JSONNull?? = nil,
+        tritoness: JSONNull?? = nil,
+        undergrade: JSONNull?? = nil,
+        undermountain: JSONNull?? = nil
+    ) -> FenkClass {
+        return FenkClass(
+            apoise: apoise ?? self.apoise,
+            astronomize: astronomize ?? self.astronomize,
+            cockhorse: cockhorse ?? self.cockhorse,
+            copular: copular ?? self.copular,
+            dagomba: dagomba ?? self.dagomba,
+            draffy: draffy ?? self.draffy,
+            foreigner: foreigner ?? self.foreigner,
+            guyandot: guyandot ?? self.guyandot,
+            neurogliosis: neurogliosis ?? self.neurogliosis,
+            osmious: osmious ?? self.osmious,
+            palpitate: palpitate ?? self.palpitate,
+            rebukeable: rebukeable ?? self.rebukeable,
+            reinwardtia: reinwardtia ?? self.reinwardtia,
+            reservatory: reservatory ?? self.reservatory,
+            scalt: scalt ?? self.scalt,
+            scripturalize: scripturalize ?? self.scripturalize,
+            tintometer: tintometer ?? self.tintometer,
+            tritoness: tritoness ?? self.tritoness,
+            undergrade: undergrade ?? self.undergrade,
+            undermountain: undermountain ?? self.undermountain
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum FlagmakingElement: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+    case flagmakingClass(FlagmakingClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(FlagmakingClass.self) {
+            self = .flagmakingClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(FlagmakingElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for FlagmakingElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .flagmakingClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - FlagmakingClass
+struct FlagmakingClass: Codable, Sendable {
+    let albarco: JSONNull?
+    let bunodonta: JSONNull?
+    let hornify: JSONNull?
+    let hydrocorisae: JSONNull?
+    let hypoglossus: JSONNull?
+    let inexpiably: JSONNull?
+    let ingratitude: JSONNull?
+    let ladyfly: JSONNull?
+    let medicament: JSONNull?
+    let monogrammatic: JSONNull?
+    let nobbut: JSONNull?
+    let notacanthidae: JSONNull?
+    let polyplacophore: JSONNull?
+    let proexercise: JSONNull?
+    let protoplast: JSONNull?
+    let puzzling: JSONNull?
+    let splanchnoskeleton: JSONNull?
+    let unloveliness: JSONNull?
+    let unquarantined: JSONNull?
+    let unrenounceable: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case albarco = "albarco"
+        case bunodonta = "Bunodonta"
+        case hornify = "hornify"
+        case hydrocorisae = "Hydrocorisae"
+        case hypoglossus = "hypoglossus"
+        case inexpiably = "inexpiably"
+        case ingratitude = "ingratitude"
+        case ladyfly = "ladyfly"
+        case medicament = "medicament"
+        case monogrammatic = "monogrammatic"
+        case nobbut = "nobbut"
+        case notacanthidae = "Notacanthidae"
+        case polyplacophore = "polyplacophore"
+        case proexercise = "proexercise"
+        case protoplast = "protoplast"
+        case puzzling = "puzzling"
+        case splanchnoskeleton = "splanchnoskeleton"
+        case unloveliness = "unloveliness"
+        case unquarantined = "unquarantined"
+        case unrenounceable = "unrenounceable"
+    }
+}
+
+// MARK: FlagmakingClass convenience initializers and mutators
+
+extension FlagmakingClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(FlagmakingClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        albarco: JSONNull?? = nil,
+        bunodonta: JSONNull?? = nil,
+        hornify: JSONNull?? = nil,
+        hydrocorisae: JSONNull?? = nil,
+        hypoglossus: JSONNull?? = nil,
+        inexpiably: JSONNull?? = nil,
+        ingratitude: JSONNull?? = nil,
+        ladyfly: JSONNull?? = nil,
+        medicament: JSONNull?? = nil,
+        monogrammatic: JSONNull?? = nil,
+        nobbut: JSONNull?? = nil,
+        notacanthidae: JSONNull?? = nil,
+        polyplacophore: JSONNull?? = nil,
+        proexercise: JSONNull?? = nil,
+        protoplast: JSONNull?? = nil,
+        puzzling: JSONNull?? = nil,
+        splanchnoskeleton: JSONNull?? = nil,
+        unloveliness: JSONNull?? = nil,
+        unquarantined: JSONNull?? = nil,
+        unrenounceable: JSONNull?? = nil
+    ) -> FlagmakingClass {
+        return FlagmakingClass(
+            albarco: albarco ?? self.albarco,
+            bunodonta: bunodonta ?? self.bunodonta,
+            hornify: hornify ?? self.hornify,
+            hydrocorisae: hydrocorisae ?? self.hydrocorisae,
+            hypoglossus: hypoglossus ?? self.hypoglossus,
+            inexpiably: inexpiably ?? self.inexpiably,
+            ingratitude: ingratitude ?? self.ingratitude,
+            ladyfly: ladyfly ?? self.ladyfly,
+            medicament: medicament ?? self.medicament,
+            monogrammatic: monogrammatic ?? self.monogrammatic,
+            nobbut: nobbut ?? self.nobbut,
+            notacanthidae: notacanthidae ?? self.notacanthidae,
+            polyplacophore: polyplacophore ?? self.polyplacophore,
+            proexercise: proexercise ?? self.proexercise,
+            protoplast: protoplast ?? self.protoplast,
+            puzzling: puzzling ?? self.puzzling,
+            splanchnoskeleton: splanchnoskeleton ?? self.splanchnoskeleton,
+            unloveliness: unloveliness ?? self.unloveliness,
+            unquarantined: unquarantined ?? self.unquarantined,
+            unrenounceable: unrenounceable ?? self.unrenounceable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Fluorometer: Codable, Sendable {
+    case integer(Int)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Fluorometer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Fluorometer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Fuzzy: Codable, Sendable {
+    case integer(Int)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Fuzzy.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Fuzzy"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Gardenward: Codable, Sendable {
+    case bool(Bool)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Gardenward.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Gardenward"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Generalissimo: Codable, Sendable {
+    case bool(Bool)
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Generalissimo.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Generalissimo"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Hemicrystalline: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Hemicrystalline.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hemicrystalline"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum HemocoeleElement: Codable, Sendable {
+    case hemocoeleClass(HemocoeleClass)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(HemocoeleClass.self) {
+            self = .hemocoeleClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(HemocoeleElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for HemocoeleElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .hemocoeleClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - HemocoeleClass
+struct HemocoeleClass: Codable, Sendable {
+    let acrogamy: JSONNull?
+    let amelification: JSONNull?
+    let autobiographic: JSONNull?
+    let berat: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let disproportionably: JSONNull?
+    let erythrite: JSONNull?
+    let graphic: JSONNull?
+    let hepatological: JSONNull?
+    let homocerc: Bool?
+    let incommensurably: JSONNull?
+    let misaffirm: JSONNull?
+    let nonbookish: JSONNull?
+    let pocketbook: JSONNull?
+    let sclerometric: JSONNull?
+    let stambouline: JSONNull?
+    let stickpin: JSONNull?
+    let tubulure: JSONNull?
+    let undelated: JSONNull?
+    let unsalt: JSONNull?
+    let untutelar: JSONNull?
+    let vagrant: JSONNull?
+    let walt: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acrogamy = "acrogamy"
+        case amelification = "amelification"
+        case autobiographic = "autobiographic"
+        case berat = "berat"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case disproportionably = "disproportionably"
+        case erythrite = "erythrite"
+        case graphic = "graphic"
+        case hepatological = "hepatological"
+        case homocerc = "homocerc"
+        case incommensurably = "incommensurably"
+        case misaffirm = "misaffirm"
+        case nonbookish = "nonbookish"
+        case pocketbook = "pocketbook"
+        case sclerometric = "sclerometric"
+        case stambouline = "stambouline"
+        case stickpin = "stickpin"
+        case tubulure = "tubulure"
+        case undelated = "undelated"
+        case unsalt = "unsalt"
+        case untutelar = "untutelar"
+        case vagrant = "vagrant"
+        case walt = "Walt"
+    }
+}
+
+// MARK: HemocoeleClass convenience initializers and mutators
+
+extension HemocoeleClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(HemocoeleClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acrogamy: JSONNull?? = nil,
+        amelification: JSONNull?? = nil,
+        autobiographic: JSONNull?? = nil,
+        berat: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        disproportionably: JSONNull?? = nil,
+        erythrite: JSONNull?? = nil,
+        graphic: JSONNull?? = nil,
+        hepatological: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        incommensurably: JSONNull?? = nil,
+        misaffirm: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        pocketbook: JSONNull?? = nil,
+        sclerometric: JSONNull?? = nil,
+        stambouline: JSONNull?? = nil,
+        stickpin: JSONNull?? = nil,
+        tubulure: JSONNull?? = nil,
+        undelated: JSONNull?? = nil,
+        unsalt: JSONNull?? = nil,
+        untutelar: JSONNull?? = nil,
+        vagrant: JSONNull?? = nil,
+        walt: JSONNull?? = nil
+    ) -> HemocoeleClass {
+        return HemocoeleClass(
+            acrogamy: acrogamy ?? self.acrogamy,
+            amelification: amelification ?? self.amelification,
+            autobiographic: autobiographic ?? self.autobiographic,
+            berat: berat ?? self.berat,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            disproportionably: disproportionably ?? self.disproportionably,
+            erythrite: erythrite ?? self.erythrite,
+            graphic: graphic ?? self.graphic,
+            hepatological: hepatological ?? self.hepatological,
+            homocerc: homocerc ?? self.homocerc,
+            incommensurably: incommensurably ?? self.incommensurably,
+            misaffirm: misaffirm ?? self.misaffirm,
+            nonbookish: nonbookish ?? self.nonbookish,
+            pocketbook: pocketbook ?? self.pocketbook,
+            sclerometric: sclerometric ?? self.sclerometric,
+            stambouline: stambouline ?? self.stambouline,
+            stickpin: stickpin ?? self.stickpin,
+            tubulure: tubulure ?? self.tubulure,
+            undelated: undelated ?? self.undelated,
+            unsalt: unsalt ?? self.unsalt,
+            untutelar: untutelar ?? self.untutelar,
+            vagrant: vagrant ?? self.vagrant,
+            walt: walt ?? self.walt
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Hoister: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Hoister.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hoister"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Hyperpiesi: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Hyperpiesi.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hyperpiesi"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Hyppish: Codable, Sendable {
+    case bool(Bool)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Hyppish.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hyppish"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Idealizer: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case integer(Int)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Idealizer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Idealizer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Incrustator: Codable, Sendable {
+    case integer(Int)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Incrustator.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Incrustator"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Intentiveness: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Intentiveness.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Intentiveness"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Interacinar
+struct Interacinar: Codable, Sendable {
+    let assapan: Double
+    let benefactorship: Bool
+    let triseriatim: String
+    let tubbing: Int
+    let untrimmed: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case assapan = "assapan"
+        case benefactorship = "benefactorship"
+        case triseriatim = "triseriatim"
+        case tubbing = "tubbing"
+        case untrimmed = "untrimmed"
+    }
+}
+
+// MARK: Interacinar convenience initializers and mutators
+
+extension Interacinar {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Interacinar.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        assapan: Double? = nil,
+        benefactorship: Bool? = nil,
+        triseriatim: String? = nil,
+        tubbing: Int? = nil,
+        untrimmed: JSONNull?? = nil
+    ) -> Interacinar {
+        return Interacinar(
+            assapan: assapan ?? self.assapan,
+            benefactorship: benefactorship ?? self.benefactorship,
+            triseriatim: triseriatim ?? self.triseriatim,
+            tubbing: tubbing ?? self.tubbing,
+            untrimmed: untrimmed ?? self.untrimmed
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Jacutinga: Codable, Sendable {
+    case integerArray([Int])
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Jacutinga.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Jacutinga"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+final class JSONNull: Codable, Hashable, Sendable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    public func hash(into hasher: inout Hasher) {
+        hasher.combine(0)
+    }
+
+    public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/head/swift/test/inputs/json/priority/combinations1.json/sendable-true__struct-or-class-class--265b1fe2e96e/quicktype.swift b/head/swift/test/inputs/json/priority/combinations1.json/sendable-true__struct-or-class-class--265b1fe2e96e/quicktype.swift
new file mode 100644
index 0000000..0c93bd0
--- /dev/null
+++ b/head/swift/test/inputs/json/priority/combinations1.json/sendable-true__struct-or-class-class--265b1fe2e96e/quicktype.swift
@@ -0,0 +1,3182 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+import Foundation
+
+// MARK: - TopLevel
+final class TopLevel: Codable, Sendable {
+    let centrodesmose: String
+    let cerograph: [CerographElement]
+    let chemotherapeutics: [ChemotherapeuticElement]
+    let cimelia: [CimeliaElement]
+    let citrated: Int
+    let clinodome: [Clinodome]
+    let coadjust: [CoadjustElement]
+    let consilience: [Consilience]
+    let constructor: [Constructor]
+    let continuative: [Continuative]
+    let credulity: [CredulityElement]
+    let creviced: [Creviced]
+    let cubiculum: [[Int?]]
+    let deruralize: [DeruralizeElement]
+    let diaereses: [DiaereseElement]
+    let dissolution: [[JSONNull?]?]
+    let downstroke: [Downstroke]
+    let electrotautomerism: [Double?]
+    let eleutheromania: [Eleutheromania]
+    let encrust: Encrust
+    let entomoid: [Entomoid]
+    let epipaleolithic: [Epipaleolithic]
+    let expropriable: [Expropriable]
+    let faggingly: [FagginglyElement]
+    let fenks: [FenkElement]
+    let flagmaking: [FlagmakingElement]
+    let fluorometer: [Fluorometer]
+    let fulsome: [Int?]
+    let fuzzy: [Fuzzy]
+    let gardenwards: [Gardenward]
+    let generalissimo: [Generalissimo]
+    let habeas: [[String: Int]?]
+    let hemicrystalline: [Hemicrystalline]
+    let hemocoele: [HemocoeleElement]
+    let hoister: [Hoister]
+    let hyperpiesis: [Hyperpiesi]
+    let hyppish: [Hyppish]
+    let idealizer: [Idealizer]
+    let incrustator: [Incrustator]
+    let intentiveness: [Intentiveness]
+    let interacinar: Interacinar
+    let intercorrelation: [[Int]?]
+    let jacutinga: [Jacutinga]
+
+    enum CodingKeys: String, CodingKey {
+        case centrodesmose = "centrodesmose"
+        case cerograph = "cerograph"
+        case chemotherapeutics = "chemotherapeutics"
+        case cimelia = "cimelia"
+        case citrated = "citrated"
+        case clinodome = "clinodome"
+        case coadjust = "coadjust"
+        case consilience = "consilience"
+        case constructor = "constructor"
+        case continuative = "continuative"
+        case credulity = "credulity"
+        case creviced = "creviced"
+        case cubiculum = "cubiculum"
+        case deruralize = "deruralize"
+        case diaereses = "diaereses"
+        case dissolution = "dissolution"
+        case downstroke = "downstroke"
+        case electrotautomerism = "electrotautomerism"
+        case eleutheromania = "eleutheromania"
+        case encrust = "encrust"
+        case entomoid = "entomoid"
+        case epipaleolithic = "epipaleolithic"
+        case expropriable = "expropriable"
+        case faggingly = "faggingly"
+        case fenks = "fenks"
+        case flagmaking = "flagmaking"
+        case fluorometer = "fluorometer"
+        case fulsome = "fulsome"
+        case fuzzy = "fuzzy"
+        case gardenwards = "gardenwards"
+        case generalissimo = "generalissimo"
+        case habeas = "habeas"
+        case hemicrystalline = "hemicrystalline"
+        case hemocoele = "hemocoele"
+        case hoister = "hoister"
+        case hyperpiesis = "hyperpiesis"
+        case hyppish = "hyppish"
+        case idealizer = "idealizer"
+        case incrustator = "incrustator"
+        case intentiveness = "intentiveness"
+        case interacinar = "interacinar"
+        case intercorrelation = "intercorrelation"
+        case jacutinga = "jacutinga"
+    }
+
+    init(centrodesmose: String, cerograph: [CerographElement], chemotherapeutics: [ChemotherapeuticElement], cimelia: [CimeliaElement], citrated: Int, clinodome: [Clinodome], coadjust: [CoadjustElement], consilience: [Consilience], constructor: [Constructor], continuative: [Continuative], credulity: [CredulityElement], creviced: [Creviced], cubiculum: [[Int?]], deruralize: [DeruralizeElement], diaereses: [DiaereseElement], dissolution: [[JSONNull?]?], downstroke: [Downstroke], electrotautomerism: [Double?], eleutheromania: [Eleutheromania], encrust: Encrust, entomoid: [Entomoid], epipaleolithic: [Epipaleolithic], expropriable: [Expropriable], faggingly: [FagginglyElement], fenks: [FenkElement], flagmaking: [FlagmakingElement], fluorometer: [Fluorometer], fulsome: [Int?], fuzzy: [Fuzzy], gardenwards: [Gardenward], generalissimo: [Generalissimo], habeas: [[String: Int]?], hemicrystalline: [Hemicrystalline], hemocoele: [HemocoeleElement], hoister: [Hoister], hyperpiesis: [Hyperpiesi], hyppish: [Hyppish], idealizer: [Idealizer], incrustator: [Incrustator], intentiveness: [Intentiveness], interacinar: Interacinar, intercorrelation: [[Int]?], jacutinga: [Jacutinga]) {
+        self.centrodesmose = centrodesmose
+        self.cerograph = cerograph
+        self.chemotherapeutics = chemotherapeutics
+        self.cimelia = cimelia
+        self.citrated = citrated
+        self.clinodome = clinodome
+        self.coadjust = coadjust
+        self.consilience = consilience
+        self.constructor = constructor
+        self.continuative = continuative
+        self.credulity = credulity
+        self.creviced = creviced
+        self.cubiculum = cubiculum
+        self.deruralize = deruralize
+        self.diaereses = diaereses
+        self.dissolution = dissolution
+        self.downstroke = downstroke
+        self.electrotautomerism = electrotautomerism
+        self.eleutheromania = eleutheromania
+        self.encrust = encrust
+        self.entomoid = entomoid
+        self.epipaleolithic = epipaleolithic
+        self.expropriable = expropriable
+        self.faggingly = faggingly
+        self.fenks = fenks
+        self.flagmaking = flagmaking
+        self.fluorometer = fluorometer
+        self.fulsome = fulsome
+        self.fuzzy = fuzzy
+        self.gardenwards = gardenwards
+        self.generalissimo = generalissimo
+        self.habeas = habeas
+        self.hemicrystalline = hemicrystalline
+        self.hemocoele = hemocoele
+        self.hoister = hoister
+        self.hyperpiesis = hyperpiesis
+        self.hyppish = hyppish
+        self.idealizer = idealizer
+        self.incrustator = incrustator
+        self.intentiveness = intentiveness
+        self.interacinar = interacinar
+        self.intercorrelation = intercorrelation
+        self.jacutinga = jacutinga
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(TopLevel.self, from: data)
+        self.init(centrodesmose: me.centrodesmose, cerograph: me.cerograph, chemotherapeutics: me.chemotherapeutics, cimelia: me.cimelia, citrated: me.citrated, clinodome: me.clinodome, coadjust: me.coadjust, consilience: me.consilience, constructor: me.constructor, continuative: me.continuative, credulity: me.credulity, creviced: me.creviced, cubiculum: me.cubiculum, deruralize: me.deruralize, diaereses: me.diaereses, dissolution: me.dissolution, downstroke: me.downstroke, electrotautomerism: me.electrotautomerism, eleutheromania: me.eleutheromania, encrust: me.encrust, entomoid: me.entomoid, epipaleolithic: me.epipaleolithic, expropriable: me.expropriable, faggingly: me.faggingly, fenks: me.fenks, flagmaking: me.flagmaking, fluorometer: me.fluorometer, fulsome: me.fulsome, fuzzy: me.fuzzy, gardenwards: me.gardenwards, generalissimo: me.generalissimo, habeas: me.habeas, hemicrystalline: me.hemicrystalline, hemocoele: me.hemocoele, hoister: me.hoister, hyperpiesis: me.hyperpiesis, hyppish: me.hyppish, idealizer: me.idealizer, incrustator: me.incrustator, intentiveness: me.intentiveness, interacinar: me.interacinar, intercorrelation: me.intercorrelation, jacutinga: me.jacutinga)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        centrodesmose: String? = nil,
+        cerograph: [CerographElement]? = nil,
+        chemotherapeutics: [ChemotherapeuticElement]? = nil,
+        cimelia: [CimeliaElement]? = nil,
+        citrated: Int? = nil,
+        clinodome: [Clinodome]? = nil,
+        coadjust: [CoadjustElement]? = nil,
+        consilience: [Consilience]? = nil,
+        constructor: [Constructor]? = nil,
+        continuative: [Continuative]? = nil,
+        credulity: [CredulityElement]? = nil,
+        creviced: [Creviced]? = nil,
+        cubiculum: [[Int?]]? = nil,
+        deruralize: [DeruralizeElement]? = nil,
+        diaereses: [DiaereseElement]? = nil,
+        dissolution: [[JSONNull?]?]? = nil,
+        downstroke: [Downstroke]? = nil,
+        electrotautomerism: [Double?]? = nil,
+        eleutheromania: [Eleutheromania]? = nil,
+        encrust: Encrust? = nil,
+        entomoid: [Entomoid]? = nil,
+        epipaleolithic: [Epipaleolithic]? = nil,
+        expropriable: [Expropriable]? = nil,
+        faggingly: [FagginglyElement]? = nil,
+        fenks: [FenkElement]? = nil,
+        flagmaking: [FlagmakingElement]? = nil,
+        fluorometer: [Fluorometer]? = nil,
+        fulsome: [Int?]? = nil,
+        fuzzy: [Fuzzy]? = nil,
+        gardenwards: [Gardenward]? = nil,
+        generalissimo: [Generalissimo]? = nil,
+        habeas: [[String: Int]?]? = nil,
+        hemicrystalline: [Hemicrystalline]? = nil,
+        hemocoele: [HemocoeleElement]? = nil,
+        hoister: [Hoister]? = nil,
+        hyperpiesis: [Hyperpiesi]? = nil,
+        hyppish: [Hyppish]? = nil,
+        idealizer: [Idealizer]? = nil,
+        incrustator: [Incrustator]? = nil,
+        intentiveness: [Intentiveness]? = nil,
+        interacinar: Interacinar? = nil,
+        intercorrelation: [[Int]?]? = nil,
+        jacutinga: [Jacutinga]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            centrodesmose: centrodesmose ?? self.centrodesmose,
+            cerograph: cerograph ?? self.cerograph,
+            chemotherapeutics: chemotherapeutics ?? self.chemotherapeutics,
+            cimelia: cimelia ?? self.cimelia,
+            citrated: citrated ?? self.citrated,
+            clinodome: clinodome ?? self.clinodome,
+            coadjust: coadjust ?? self.coadjust,
+            consilience: consilience ?? self.consilience,
+            constructor: constructor ?? self.constructor,
+            continuative: continuative ?? self.continuative,
+            credulity: credulity ?? self.credulity,
+            creviced: creviced ?? self.creviced,
+            cubiculum: cubiculum ?? self.cubiculum,
+            deruralize: deruralize ?? self.deruralize,
+            diaereses: diaereses ?? self.diaereses,
+            dissolution: dissolution ?? self.dissolution,
+            downstroke: downstroke ?? self.downstroke,
+            electrotautomerism: electrotautomerism ?? self.electrotautomerism,
+            eleutheromania: eleutheromania ?? self.eleutheromania,
+            encrust: encrust ?? self.encrust,
+            entomoid: entomoid ?? self.entomoid,
+            epipaleolithic: epipaleolithic ?? self.epipaleolithic,
+            expropriable: expropriable ?? self.expropriable,
+            faggingly: faggingly ?? self.faggingly,
+            fenks: fenks ?? self.fenks,
+            flagmaking: flagmaking ?? self.flagmaking,
+            fluorometer: fluorometer ?? self.fluorometer,
+            fulsome: fulsome ?? self.fulsome,
+            fuzzy: fuzzy ?? self.fuzzy,
+            gardenwards: gardenwards ?? self.gardenwards,
+            generalissimo: generalissimo ?? self.generalissimo,
+            habeas: habeas ?? self.habeas,
+            hemicrystalline: hemicrystalline ?? self.hemicrystalline,
+            hemocoele: hemocoele ?? self.hemocoele,
+            hoister: hoister ?? self.hoister,
+            hyperpiesis: hyperpiesis ?? self.hyperpiesis,
+            hyppish: hyppish ?? self.hyppish,
+            idealizer: idealizer ?? self.idealizer,
+            incrustator: incrustator ?? self.incrustator,
+            intentiveness: intentiveness ?? self.intentiveness,
+            interacinar: interacinar ?? self.interacinar,
+            intercorrelation: intercorrelation ?? self.intercorrelation,
+            jacutinga: jacutinga ?? self.jacutinga
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum CerographElement: Codable, Sendable {
+    case cerographClass(CerographClass)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CerographClass.self) {
+            self = .cerographClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(CerographElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CerographElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cerographClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - CerographClass
+final class CerographClass: Codable, Sendable {
+    let apotropaion: JSONNull?
+    let casuary: JSONNull?
+    let creaker: JSONNull?
+    let disqualification: JSONNull?
+    let imperatorious: JSONNull?
+    let impermeabilize: JSONNull?
+    let metastoma: JSONNull?
+    let noctidiurnal: JSONNull?
+    let nonreserve: JSONNull?
+    let ophthalmotonometry: JSONNull?
+    let pailful: JSONNull?
+    let pigfish: JSONNull?
+    let pongee: JSONNull?
+    let prosodical: JSONNull?
+    let scrofuloderm: JSONNull?
+    let storekeeping: JSONNull?
+    let therologist: JSONNull?
+    let tolowa: JSONNull?
+    let tradeful: JSONNull?
+    let unriveting: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case apotropaion = "apotropaion"
+        case casuary = "casuary"
+        case creaker = "creaker"
+        case disqualification = "disqualification"
+        case imperatorious = "imperatorious"
+        case impermeabilize = "impermeabilize"
+        case metastoma = "metastoma"
+        case noctidiurnal = "noctidiurnal"
+        case nonreserve = "nonreserve"
+        case ophthalmotonometry = "ophthalmotonometry"
+        case pailful = "pailful"
+        case pigfish = "pigfish"
+        case pongee = "pongee"
+        case prosodical = "prosodical"
+        case scrofuloderm = "scrofuloderm"
+        case storekeeping = "storekeeping"
+        case therologist = "therologist"
+        case tolowa = "Tolowa"
+        case tradeful = "tradeful"
+        case unriveting = "unriveting"
+    }
+
+    init(apotropaion: JSONNull?, casuary: JSONNull?, creaker: JSONNull?, disqualification: JSONNull?, imperatorious: JSONNull?, impermeabilize: JSONNull?, metastoma: JSONNull?, noctidiurnal: JSONNull?, nonreserve: JSONNull?, ophthalmotonometry: JSONNull?, pailful: JSONNull?, pigfish: JSONNull?, pongee: JSONNull?, prosodical: JSONNull?, scrofuloderm: JSONNull?, storekeeping: JSONNull?, therologist: JSONNull?, tolowa: JSONNull?, tradeful: JSONNull?, unriveting: JSONNull?) {
+        self.apotropaion = apotropaion
+        self.casuary = casuary
+        self.creaker = creaker
+        self.disqualification = disqualification
+        self.imperatorious = imperatorious
+        self.impermeabilize = impermeabilize
+        self.metastoma = metastoma
+        self.noctidiurnal = noctidiurnal
+        self.nonreserve = nonreserve
+        self.ophthalmotonometry = ophthalmotonometry
+        self.pailful = pailful
+        self.pigfish = pigfish
+        self.pongee = pongee
+        self.prosodical = prosodical
+        self.scrofuloderm = scrofuloderm
+        self.storekeeping = storekeeping
+        self.therologist = therologist
+        self.tolowa = tolowa
+        self.tradeful = tradeful
+        self.unriveting = unriveting
+    }
+}
+
+// MARK: CerographClass convenience initializers and mutators
+
+extension CerographClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(CerographClass.self, from: data)
+        self.init(apotropaion: me.apotropaion, casuary: me.casuary, creaker: me.creaker, disqualification: me.disqualification, imperatorious: me.imperatorious, impermeabilize: me.impermeabilize, metastoma: me.metastoma, noctidiurnal: me.noctidiurnal, nonreserve: me.nonreserve, ophthalmotonometry: me.ophthalmotonometry, pailful: me.pailful, pigfish: me.pigfish, pongee: me.pongee, prosodical: me.prosodical, scrofuloderm: me.scrofuloderm, storekeeping: me.storekeeping, therologist: me.therologist, tolowa: me.tolowa, tradeful: me.tradeful, unriveting: me.unriveting)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apotropaion: JSONNull?? = nil,
+        casuary: JSONNull?? = nil,
+        creaker: JSONNull?? = nil,
+        disqualification: JSONNull?? = nil,
+        imperatorious: JSONNull?? = nil,
+        impermeabilize: JSONNull?? = nil,
+        metastoma: JSONNull?? = nil,
+        noctidiurnal: JSONNull?? = nil,
+        nonreserve: JSONNull?? = nil,
+        ophthalmotonometry: JSONNull?? = nil,
+        pailful: JSONNull?? = nil,
+        pigfish: JSONNull?? = nil,
+        pongee: JSONNull?? = nil,
+        prosodical: JSONNull?? = nil,
+        scrofuloderm: JSONNull?? = nil,
+        storekeeping: JSONNull?? = nil,
+        therologist: JSONNull?? = nil,
+        tolowa: JSONNull?? = nil,
+        tradeful: JSONNull?? = nil,
+        unriveting: JSONNull?? = nil
+    ) -> CerographClass {
+        return CerographClass(
+            apotropaion: apotropaion ?? self.apotropaion,
+            casuary: casuary ?? self.casuary,
+            creaker: creaker ?? self.creaker,
+            disqualification: disqualification ?? self.disqualification,
+            imperatorious: imperatorious ?? self.imperatorious,
+            impermeabilize: impermeabilize ?? self.impermeabilize,
+            metastoma: metastoma ?? self.metastoma,
+            noctidiurnal: noctidiurnal ?? self.noctidiurnal,
+            nonreserve: nonreserve ?? self.nonreserve,
+            ophthalmotonometry: ophthalmotonometry ?? self.ophthalmotonometry,
+            pailful: pailful ?? self.pailful,
+            pigfish: pigfish ?? self.pigfish,
+            pongee: pongee ?? self.pongee,
+            prosodical: prosodical ?? self.prosodical,
+            scrofuloderm: scrofuloderm ?? self.scrofuloderm,
+            storekeeping: storekeeping ?? self.storekeeping,
+            therologist: therologist ?? self.therologist,
+            tolowa: tolowa ?? self.tolowa,
+            tradeful: tradeful ?? self.tradeful,
+            unriveting: unriveting ?? self.unriveting
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum ChemotherapeuticElement: Codable, Sendable {
+    case chemotherapeuticClass(ChemotherapeuticClass)
+    case integer(Int)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(ChemotherapeuticClass.self) {
+            self = .chemotherapeuticClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(ChemotherapeuticElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for ChemotherapeuticElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .chemotherapeuticClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - ChemotherapeuticClass
+final class ChemotherapeuticClass: Codable, Sendable {
+    let angioneurotic: JSONNull?
+    let availment: JSONNull?
+    let bladelet: JSONNull?
+    let catharticalness: Double?
+    let caulis: JSONNull?
+    let chalcus: JSONNull?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let enteradenological: JSONNull?
+    let homocerc: Bool?
+    let imporosity: JSONNull?
+    let insistently: JSONNull?
+    let intraparietal: JSONNull?
+    let ivied: JSONNull?
+    let maureen: JSONNull?
+    let nonbookish: JSONNull?
+    let nostochine: JSONNull?
+    let nutcracker: JSONNull?
+    let ofttimes: JSONNull?
+    let phenocryst: JSONNull?
+    let precoincident: JSONNull?
+    let ramiferous: JSONNull?
+    let stagmometer: JSONNull?
+    let tetherball: JSONNull?
+    let unshy: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case angioneurotic = "angioneurotic"
+        case availment = "availment"
+        case bladelet = "bladelet"
+        case catharticalness = "catharticalness"
+        case caulis = "caulis"
+        case chalcus = "chalcus"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case enteradenological = "enteradenological"
+        case homocerc = "homocerc"
+        case imporosity = "imporosity"
+        case insistently = "insistently"
+        case intraparietal = "intraparietal"
+        case ivied = "ivied"
+        case maureen = "Maureen"
+        case nonbookish = "nonbookish"
+        case nostochine = "nostochine"
+        case nutcracker = "nutcracker"
+        case ofttimes = "ofttimes"
+        case phenocryst = "phenocryst"
+        case precoincident = "precoincident"
+        case ramiferous = "ramiferous"
+        case stagmometer = "stagmometer"
+        case tetherball = "tetherball"
+        case unshy = "unshy"
+    }
+
+    init(angioneurotic: JSONNull?, availment: JSONNull?, bladelet: JSONNull?, catharticalness: Double?, caulis: JSONNull?, chalcus: JSONNull?, chirotherium: Int?, disdiapason: String?, enteradenological: JSONNull?, homocerc: Bool?, imporosity: JSONNull?, insistently: JSONNull?, intraparietal: JSONNull?, ivied: JSONNull?, maureen: JSONNull?, nonbookish: JSONNull?, nostochine: JSONNull?, nutcracker: JSONNull?, ofttimes: JSONNull?, phenocryst: JSONNull?, precoincident: JSONNull?, ramiferous: JSONNull?, stagmometer: JSONNull?, tetherball: JSONNull?, unshy: JSONNull?) {
+        self.angioneurotic = angioneurotic
+        self.availment = availment
+        self.bladelet = bladelet
+        self.catharticalness = catharticalness
+        self.caulis = caulis
+        self.chalcus = chalcus
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.enteradenological = enteradenological
+        self.homocerc = homocerc
+        self.imporosity = imporosity
+        self.insistently = insistently
+        self.intraparietal = intraparietal
+        self.ivied = ivied
+        self.maureen = maureen
+        self.nonbookish = nonbookish
+        self.nostochine = nostochine
+        self.nutcracker = nutcracker
+        self.ofttimes = ofttimes
+        self.phenocryst = phenocryst
+        self.precoincident = precoincident
+        self.ramiferous = ramiferous
+        self.stagmometer = stagmometer
+        self.tetherball = tetherball
+        self.unshy = unshy
+    }
+}
+
+// MARK: ChemotherapeuticClass convenience initializers and mutators
+
+extension ChemotherapeuticClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(ChemotherapeuticClass.self, from: data)
+        self.init(angioneurotic: me.angioneurotic, availment: me.availment, bladelet: me.bladelet, catharticalness: me.catharticalness, caulis: me.caulis, chalcus: me.chalcus, chirotherium: me.chirotherium, disdiapason: me.disdiapason, enteradenological: me.enteradenological, homocerc: me.homocerc, imporosity: me.imporosity, insistently: me.insistently, intraparietal: me.intraparietal, ivied: me.ivied, maureen: me.maureen, nonbookish: me.nonbookish, nostochine: me.nostochine, nutcracker: me.nutcracker, ofttimes: me.ofttimes, phenocryst: me.phenocryst, precoincident: me.precoincident, ramiferous: me.ramiferous, stagmometer: me.stagmometer, tetherball: me.tetherball, unshy: me.unshy)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        angioneurotic: JSONNull?? = nil,
+        availment: JSONNull?? = nil,
+        bladelet: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        caulis: JSONNull?? = nil,
+        chalcus: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        enteradenological: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        imporosity: JSONNull?? = nil,
+        insistently: JSONNull?? = nil,
+        intraparietal: JSONNull?? = nil,
+        ivied: JSONNull?? = nil,
+        maureen: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        nostochine: JSONNull?? = nil,
+        nutcracker: JSONNull?? = nil,
+        ofttimes: JSONNull?? = nil,
+        phenocryst: JSONNull?? = nil,
+        precoincident: JSONNull?? = nil,
+        ramiferous: JSONNull?? = nil,
+        stagmometer: JSONNull?? = nil,
+        tetherball: JSONNull?? = nil,
+        unshy: JSONNull?? = nil
+    ) -> ChemotherapeuticClass {
+        return ChemotherapeuticClass(
+            angioneurotic: angioneurotic ?? self.angioneurotic,
+            availment: availment ?? self.availment,
+            bladelet: bladelet ?? self.bladelet,
+            catharticalness: catharticalness ?? self.catharticalness,
+            caulis: caulis ?? self.caulis,
+            chalcus: chalcus ?? self.chalcus,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            enteradenological: enteradenological ?? self.enteradenological,
+            homocerc: homocerc ?? self.homocerc,
+            imporosity: imporosity ?? self.imporosity,
+            insistently: insistently ?? self.insistently,
+            intraparietal: intraparietal ?? self.intraparietal,
+            ivied: ivied ?? self.ivied,
+            maureen: maureen ?? self.maureen,
+            nonbookish: nonbookish ?? self.nonbookish,
+            nostochine: nostochine ?? self.nostochine,
+            nutcracker: nutcracker ?? self.nutcracker,
+            ofttimes: ofttimes ?? self.ofttimes,
+            phenocryst: phenocryst ?? self.phenocryst,
+            precoincident: precoincident ?? self.precoincident,
+            ramiferous: ramiferous ?? self.ramiferous,
+            stagmometer: stagmometer ?? self.stagmometer,
+            tetherball: tetherball ?? self.tetherball,
+            unshy: unshy ?? self.unshy
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum CimeliaElement: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(CimeliaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CimeliaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - CimeliaClass
+final class CimeliaClass: Codable, Sendable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+
+    init(catharticalness: Double, chirotherium: Int, disdiapason: String, homocerc: Bool, nonbookish: JSONNull?) {
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.homocerc = homocerc
+        self.nonbookish = nonbookish
+    }
+}
+
+// MARK: CimeliaClass convenience initializers and mutators
+
+extension CimeliaClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(CimeliaClass.self, from: data)
+        self.init(catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, homocerc: me.homocerc, nonbookish: me.nonbookish)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> CimeliaClass {
+        return CimeliaClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Clinodome: Codable, Sendable {
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Clinodome.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Clinodome"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum CoadjustElement: Codable, Sendable {
+    case coadjustClass(CoadjustClass)
+    case double(Double)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(CoadjustClass.self) {
+            self = .coadjustClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(CoadjustElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CoadjustElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .coadjustClass(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - CoadjustClass
+final class CoadjustClass: Codable, Sendable {
+    let amidosulphonal: JSONNull?
+    let benny: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let ensnare: JSONNull?
+    let homocerc: Bool?
+    let hybridizer: JSONNull?
+    let leastwise: JSONNull?
+    let lof: JSONNull?
+    let monkhood: JSONNull?
+    let netherlandish: JSONNull?
+    let nonbookish: JSONNull?
+    let peonism: JSONNull?
+    let phonelescope: JSONNull?
+    let porphyrogeniture: JSONNull?
+    let preindemnify: JSONNull?
+    let rosal: JSONNull?
+    let scalenous: JSONNull?
+    let scopine: JSONNull?
+    let sedaceae: JSONNull?
+    let suberinize: JSONNull?
+    let symbiot: JSONNull?
+    let tablefellow: JSONNull?
+    let unchargeable: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amidosulphonal = "amidosulphonal"
+        case benny = "Benny"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case ensnare = "ensnare"
+        case homocerc = "homocerc"
+        case hybridizer = "hybridizer"
+        case leastwise = "leastwise"
+        case lof = "lof"
+        case monkhood = "monkhood"
+        case netherlandish = "Netherlandish"
+        case nonbookish = "nonbookish"
+        case peonism = "peonism"
+        case phonelescope = "Phonelescope"
+        case porphyrogeniture = "porphyrogeniture"
+        case preindemnify = "preindemnify"
+        case rosal = "rosal"
+        case scalenous = "scalenous"
+        case scopine = "scopine"
+        case sedaceae = "Sedaceae"
+        case suberinize = "suberinize"
+        case symbiot = "symbiot"
+        case tablefellow = "tablefellow"
+        case unchargeable = "unchargeable"
+    }
+
+    init(amidosulphonal: JSONNull?, benny: JSONNull?, catharticalness: Double?, chirotherium: Int?, disdiapason: String?, ensnare: JSONNull?, homocerc: Bool?, hybridizer: JSONNull?, leastwise: JSONNull?, lof: JSONNull?, monkhood: JSONNull?, netherlandish: JSONNull?, nonbookish: JSONNull?, peonism: JSONNull?, phonelescope: JSONNull?, porphyrogeniture: JSONNull?, preindemnify: JSONNull?, rosal: JSONNull?, scalenous: JSONNull?, scopine: JSONNull?, sedaceae: JSONNull?, suberinize: JSONNull?, symbiot: JSONNull?, tablefellow: JSONNull?, unchargeable: JSONNull?) {
+        self.amidosulphonal = amidosulphonal
+        self.benny = benny
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.ensnare = ensnare
+        self.homocerc = homocerc
+        self.hybridizer = hybridizer
+        self.leastwise = leastwise
+        self.lof = lof
+        self.monkhood = monkhood
+        self.netherlandish = netherlandish
+        self.nonbookish = nonbookish
+        self.peonism = peonism
+        self.phonelescope = phonelescope
+        self.porphyrogeniture = porphyrogeniture
+        self.preindemnify = preindemnify
+        self.rosal = rosal
+        self.scalenous = scalenous
+        self.scopine = scopine
+        self.sedaceae = sedaceae
+        self.suberinize = suberinize
+        self.symbiot = symbiot
+        self.tablefellow = tablefellow
+        self.unchargeable = unchargeable
+    }
+}
+
+// MARK: CoadjustClass convenience initializers and mutators
+
+extension CoadjustClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(CoadjustClass.self, from: data)
+        self.init(amidosulphonal: me.amidosulphonal, benny: me.benny, catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, ensnare: me.ensnare, homocerc: me.homocerc, hybridizer: me.hybridizer, leastwise: me.leastwise, lof: me.lof, monkhood: me.monkhood, netherlandish: me.netherlandish, nonbookish: me.nonbookish, peonism: me.peonism, phonelescope: me.phonelescope, porphyrogeniture: me.porphyrogeniture, preindemnify: me.preindemnify, rosal: me.rosal, scalenous: me.scalenous, scopine: me.scopine, sedaceae: me.sedaceae, suberinize: me.suberinize, symbiot: me.symbiot, tablefellow: me.tablefellow, unchargeable: me.unchargeable)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amidosulphonal: JSONNull?? = nil,
+        benny: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        ensnare: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        hybridizer: JSONNull?? = nil,
+        leastwise: JSONNull?? = nil,
+        lof: JSONNull?? = nil,
+        monkhood: JSONNull?? = nil,
+        netherlandish: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        peonism: JSONNull?? = nil,
+        phonelescope: JSONNull?? = nil,
+        porphyrogeniture: JSONNull?? = nil,
+        preindemnify: JSONNull?? = nil,
+        rosal: JSONNull?? = nil,
+        scalenous: JSONNull?? = nil,
+        scopine: JSONNull?? = nil,
+        sedaceae: JSONNull?? = nil,
+        suberinize: JSONNull?? = nil,
+        symbiot: JSONNull?? = nil,
+        tablefellow: JSONNull?? = nil,
+        unchargeable: JSONNull?? = nil
+    ) -> CoadjustClass {
+        return CoadjustClass(
+            amidosulphonal: amidosulphonal ?? self.amidosulphonal,
+            benny: benny ?? self.benny,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ensnare: ensnare ?? self.ensnare,
+            homocerc: homocerc ?? self.homocerc,
+            hybridizer: hybridizer ?? self.hybridizer,
+            leastwise: leastwise ?? self.leastwise,
+            lof: lof ?? self.lof,
+            monkhood: monkhood ?? self.monkhood,
+            netherlandish: netherlandish ?? self.netherlandish,
+            nonbookish: nonbookish ?? self.nonbookish,
+            peonism: peonism ?? self.peonism,
+            phonelescope: phonelescope ?? self.phonelescope,
+            porphyrogeniture: porphyrogeniture ?? self.porphyrogeniture,
+            preindemnify: preindemnify ?? self.preindemnify,
+            rosal: rosal ?? self.rosal,
+            scalenous: scalenous ?? self.scalenous,
+            scopine: scopine ?? self.scopine,
+            sedaceae: sedaceae ?? self.sedaceae,
+            suberinize: suberinize ?? self.suberinize,
+            symbiot: symbiot ?? self.symbiot,
+            tablefellow: tablefellow ?? self.tablefellow,
+            unchargeable: unchargeable ?? self.unchargeable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Consilience: Codable, Sendable {
+    case double(Double)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Consilience.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Consilience"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Constructor: Codable, Sendable {
+    case bool(Bool)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Constructor.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Constructor"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Continuative: Codable, Sendable {
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Continuative.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Continuative"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum CredulityElement: Codable, Sendable {
+    case credulityClass(CredulityClass)
+    case integer(Int)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CredulityClass.self) {
+            self = .credulityClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(CredulityElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CredulityElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .credulityClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - CredulityClass
+final class CredulityClass: Codable, Sendable {
+    let ammonolytic: JSONNull?
+    let bushmaster: JSONNull?
+    let considering: JSONNull?
+    let consuetudinary: JSONNull?
+    let embarras: JSONNull?
+    let fineness: JSONNull?
+    let flaithship: JSONNull?
+    let flavia: JSONNull?
+    let gruffly: JSONNull?
+    let hedychium: JSONNull?
+    let leadwort: JSONNull?
+    let overseriously: JSONNull?
+    let parabola: JSONNull?
+    let pectinatodenticulate: JSONNull?
+    let popean: JSONNull?
+    let pornocrat: JSONNull?
+    let quadrisect: JSONNull?
+    let seriality: JSONNull?
+    let vamphorn: JSONNull?
+    let wharp: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case ammonolytic = "ammonolytic"
+        case bushmaster = "bushmaster"
+        case considering = "considering"
+        case consuetudinary = "consuetudinary"
+        case embarras = "embarras"
+        case fineness = "fineness"
+        case flaithship = "flaithship"
+        case flavia = "Flavia"
+        case gruffly = "gruffly"
+        case hedychium = "Hedychium"
+        case leadwort = "leadwort"
+        case overseriously = "overseriously"
+        case parabola = "parabola"
+        case pectinatodenticulate = "pectinatodenticulate"
+        case popean = "Popean"
+        case pornocrat = "pornocrat"
+        case quadrisect = "quadrisect"
+        case seriality = "seriality"
+        case vamphorn = "vamphorn"
+        case wharp = "wharp"
+    }
+
+    init(ammonolytic: JSONNull?, bushmaster: JSONNull?, considering: JSONNull?, consuetudinary: JSONNull?, embarras: JSONNull?, fineness: JSONNull?, flaithship: JSONNull?, flavia: JSONNull?, gruffly: JSONNull?, hedychium: JSONNull?, leadwort: JSONNull?, overseriously: JSONNull?, parabola: JSONNull?, pectinatodenticulate: JSONNull?, popean: JSONNull?, pornocrat: JSONNull?, quadrisect: JSONNull?, seriality: JSONNull?, vamphorn: JSONNull?, wharp: JSONNull?) {
+        self.ammonolytic = ammonolytic
+        self.bushmaster = bushmaster
+        self.considering = considering
+        self.consuetudinary = consuetudinary
+        self.embarras = embarras
+        self.fineness = fineness
+        self.flaithship = flaithship
+        self.flavia = flavia
+        self.gruffly = gruffly
+        self.hedychium = hedychium
+        self.leadwort = leadwort
+        self.overseriously = overseriously
+        self.parabola = parabola
+        self.pectinatodenticulate = pectinatodenticulate
+        self.popean = popean
+        self.pornocrat = pornocrat
+        self.quadrisect = quadrisect
+        self.seriality = seriality
+        self.vamphorn = vamphorn
+        self.wharp = wharp
+    }
+}
+
+// MARK: CredulityClass convenience initializers and mutators
+
+extension CredulityClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(CredulityClass.self, from: data)
+        self.init(ammonolytic: me.ammonolytic, bushmaster: me.bushmaster, considering: me.considering, consuetudinary: me.consuetudinary, embarras: me.embarras, fineness: me.fineness, flaithship: me.flaithship, flavia: me.flavia, gruffly: me.gruffly, hedychium: me.hedychium, leadwort: me.leadwort, overseriously: me.overseriously, parabola: me.parabola, pectinatodenticulate: me.pectinatodenticulate, popean: me.popean, pornocrat: me.pornocrat, quadrisect: me.quadrisect, seriality: me.seriality, vamphorn: me.vamphorn, wharp: me.wharp)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        ammonolytic: JSONNull?? = nil,
+        bushmaster: JSONNull?? = nil,
+        considering: JSONNull?? = nil,
+        consuetudinary: JSONNull?? = nil,
+        embarras: JSONNull?? = nil,
+        fineness: JSONNull?? = nil,
+        flaithship: JSONNull?? = nil,
+        flavia: JSONNull?? = nil,
+        gruffly: JSONNull?? = nil,
+        hedychium: JSONNull?? = nil,
+        leadwort: JSONNull?? = nil,
+        overseriously: JSONNull?? = nil,
+        parabola: JSONNull?? = nil,
+        pectinatodenticulate: JSONNull?? = nil,
+        popean: JSONNull?? = nil,
+        pornocrat: JSONNull?? = nil,
+        quadrisect: JSONNull?? = nil,
+        seriality: JSONNull?? = nil,
+        vamphorn: JSONNull?? = nil,
+        wharp: JSONNull?? = nil
+    ) -> CredulityClass {
+        return CredulityClass(
+            ammonolytic: ammonolytic ?? self.ammonolytic,
+            bushmaster: bushmaster ?? self.bushmaster,
+            considering: considering ?? self.considering,
+            consuetudinary: consuetudinary ?? self.consuetudinary,
+            embarras: embarras ?? self.embarras,
+            fineness: fineness ?? self.fineness,
+            flaithship: flaithship ?? self.flaithship,
+            flavia: flavia ?? self.flavia,
+            gruffly: gruffly ?? self.gruffly,
+            hedychium: hedychium ?? self.hedychium,
+            leadwort: leadwort ?? self.leadwort,
+            overseriously: overseriously ?? self.overseriously,
+            parabola: parabola ?? self.parabola,
+            pectinatodenticulate: pectinatodenticulate ?? self.pectinatodenticulate,
+            popean: popean ?? self.popean,
+            pornocrat: pornocrat ?? self.pornocrat,
+            quadrisect: quadrisect ?? self.quadrisect,
+            seriality: seriality ?? self.seriality,
+            vamphorn: vamphorn ?? self.vamphorn,
+            wharp: wharp ?? self.wharp
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Creviced: Codable, Sendable {
+    case bool(Bool)
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Creviced.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Creviced"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum DeruralizeElement: Codable, Sendable {
+    case bool(Bool)
+    case deruralizeClass(DeruralizeClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(DeruralizeClass.self) {
+            self = .deruralizeClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(DeruralizeElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for DeruralizeElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .deruralizeClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - DeruralizeClass
+final class DeruralizeClass: Codable, Sendable {
+    let bockerel: JSONNull?
+    let boulder: JSONNull?
+    let churrus: JSONNull?
+    let counterdigged: JSONNull?
+    let dialogite: JSONNull?
+    let digenic: JSONNull?
+    let dunbird: JSONNull?
+    let ergatogyne: JSONNull?
+    let fiendful: JSONNull?
+    let jackrod: JSONNull?
+    let jehovistic: JSONNull?
+    let paninean: JSONNull?
+    let panther: JSONNull?
+    let placentigerous: JSONNull?
+    let romney: JSONNull?
+    let sparm: JSONNull?
+    let tocsin: JSONNull?
+    let unnicked: JSONNull?
+    let unstavable: JSONNull?
+    let windfirm: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case bockerel = "bockerel"
+        case boulder = "boulder"
+        case churrus = "churrus"
+        case counterdigged = "counterdigged"
+        case dialogite = "dialogite"
+        case digenic = "digenic"
+        case dunbird = "dunbird"
+        case ergatogyne = "ergatogyne"
+        case fiendful = "fiendful"
+        case jackrod = "jackrod"
+        case jehovistic = "Jehovistic"
+        case paninean = "Paninean"
+        case panther = "panther"
+        case placentigerous = "placentigerous"
+        case romney = "Romney"
+        case sparm = "sparm"
+        case tocsin = "tocsin"
+        case unnicked = "unnicked"
+        case unstavable = "unstavable"
+        case windfirm = "windfirm"
+    }
+
+    init(bockerel: JSONNull?, boulder: JSONNull?, churrus: JSONNull?, counterdigged: JSONNull?, dialogite: JSONNull?, digenic: JSONNull?, dunbird: JSONNull?, ergatogyne: JSONNull?, fiendful: JSONNull?, jackrod: JSONNull?, jehovistic: JSONNull?, paninean: JSONNull?, panther: JSONNull?, placentigerous: JSONNull?, romney: JSONNull?, sparm: JSONNull?, tocsin: JSONNull?, unnicked: JSONNull?, unstavable: JSONNull?, windfirm: JSONNull?) {
+        self.bockerel = bockerel
+        self.boulder = boulder
+        self.churrus = churrus
+        self.counterdigged = counterdigged
+        self.dialogite = dialogite
+        self.digenic = digenic
+        self.dunbird = dunbird
+        self.ergatogyne = ergatogyne
+        self.fiendful = fiendful
+        self.jackrod = jackrod
+        self.jehovistic = jehovistic
+        self.paninean = paninean
+        self.panther = panther
+        self.placentigerous = placentigerous
+        self.romney = romney
+        self.sparm = sparm
+        self.tocsin = tocsin
+        self.unnicked = unnicked
+        self.unstavable = unstavable
+        self.windfirm = windfirm
+    }
+}
+
+// MARK: DeruralizeClass convenience initializers and mutators
+
+extension DeruralizeClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(DeruralizeClass.self, from: data)
+        self.init(bockerel: me.bockerel, boulder: me.boulder, churrus: me.churrus, counterdigged: me.counterdigged, dialogite: me.dialogite, digenic: me.digenic, dunbird: me.dunbird, ergatogyne: me.ergatogyne, fiendful: me.fiendful, jackrod: me.jackrod, jehovistic: me.jehovistic, paninean: me.paninean, panther: me.panther, placentigerous: me.placentigerous, romney: me.romney, sparm: me.sparm, tocsin: me.tocsin, unnicked: me.unnicked, unstavable: me.unstavable, windfirm: me.windfirm)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        bockerel: JSONNull?? = nil,
+        boulder: JSONNull?? = nil,
+        churrus: JSONNull?? = nil,
+        counterdigged: JSONNull?? = nil,
+        dialogite: JSONNull?? = nil,
+        digenic: JSONNull?? = nil,
+        dunbird: JSONNull?? = nil,
+        ergatogyne: JSONNull?? = nil,
+        fiendful: JSONNull?? = nil,
+        jackrod: JSONNull?? = nil,
+        jehovistic: JSONNull?? = nil,
+        paninean: JSONNull?? = nil,
+        panther: JSONNull?? = nil,
+        placentigerous: JSONNull?? = nil,
+        romney: JSONNull?? = nil,
+        sparm: JSONNull?? = nil,
+        tocsin: JSONNull?? = nil,
+        unnicked: JSONNull?? = nil,
+        unstavable: JSONNull?? = nil,
+        windfirm: JSONNull?? = nil
+    ) -> DeruralizeClass {
+        return DeruralizeClass(
+            bockerel: bockerel ?? self.bockerel,
+            boulder: boulder ?? self.boulder,
+            churrus: churrus ?? self.churrus,
+            counterdigged: counterdigged ?? self.counterdigged,
+            dialogite: dialogite ?? self.dialogite,
+            digenic: digenic ?? self.digenic,
+            dunbird: dunbird ?? self.dunbird,
+            ergatogyne: ergatogyne ?? self.ergatogyne,
+            fiendful: fiendful ?? self.fiendful,
+            jackrod: jackrod ?? self.jackrod,
+            jehovistic: jehovistic ?? self.jehovistic,
+            paninean: paninean ?? self.paninean,
+            panther: panther ?? self.panther,
+            placentigerous: placentigerous ?? self.placentigerous,
+            romney: romney ?? self.romney,
+            sparm: sparm ?? self.sparm,
+            tocsin: tocsin ?? self.tocsin,
+            unnicked: unnicked ?? self.unnicked,
+            unstavable: unstavable ?? self.unstavable,
+            windfirm: windfirm ?? self.windfirm
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum DiaereseElement: Codable, Sendable {
+    case bool(Bool)
+    case diaereseClass(DiaereseClass)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(DiaereseClass.self) {
+            self = .diaereseClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(DiaereseElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for DiaereseElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .diaereseClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - DiaereseClass
+final class DiaereseClass: Codable, Sendable {
+    let amoreuxia: JSONNull?
+    let ani: JSONNull?
+    let bernicle: JSONNull?
+    let blackwasher: JSONNull?
+    let blowhard: JSONNull?
+    let broma: JSONNull?
+    let closecross: JSONNull?
+    let congregationalism: JSONNull?
+    let grayly: JSONNull?
+    let historically: JSONNull?
+    let hoast: JSONNull?
+    let irretentive: JSONNull?
+    let parcener: JSONNull?
+    let pedder: JSONNull?
+    let pseudoanatomic: JSONNull?
+    let rhizocarpian: JSONNull?
+    let samel: JSONNull?
+    let silker: JSONNull?
+    let subdentated: JSONNull?
+    let subobscure: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amoreuxia = "Amoreuxia"
+        case ani = "ani"
+        case bernicle = "bernicle"
+        case blackwasher = "blackwasher"
+        case blowhard = "blowhard"
+        case broma = "broma"
+        case closecross = "closecross"
+        case congregationalism = "congregationalism"
+        case grayly = "grayly"
+        case historically = "historically"
+        case hoast = "hoast"
+        case irretentive = "irretentive"
+        case parcener = "parcener"
+        case pedder = "pedder"
+        case pseudoanatomic = "pseudoanatomic"
+        case rhizocarpian = "rhizocarpian"
+        case samel = "samel"
+        case silker = "silker"
+        case subdentated = "subdentated"
+        case subobscure = "subobscure"
+    }
+
+    init(amoreuxia: JSONNull?, ani: JSONNull?, bernicle: JSONNull?, blackwasher: JSONNull?, blowhard: JSONNull?, broma: JSONNull?, closecross: JSONNull?, congregationalism: JSONNull?, grayly: JSONNull?, historically: JSONNull?, hoast: JSONNull?, irretentive: JSONNull?, parcener: JSONNull?, pedder: JSONNull?, pseudoanatomic: JSONNull?, rhizocarpian: JSONNull?, samel: JSONNull?, silker: JSONNull?, subdentated: JSONNull?, subobscure: JSONNull?) {
+        self.amoreuxia = amoreuxia
+        self.ani = ani
+        self.bernicle = bernicle
+        self.blackwasher = blackwasher
+        self.blowhard = blowhard
+        self.broma = broma
+        self.closecross = closecross
+        self.congregationalism = congregationalism
+        self.grayly = grayly
+        self.historically = historically
+        self.hoast = hoast
+        self.irretentive = irretentive
+        self.parcener = parcener
+        self.pedder = pedder
+        self.pseudoanatomic = pseudoanatomic
+        self.rhizocarpian = rhizocarpian
+        self.samel = samel
+        self.silker = silker
+        self.subdentated = subdentated
+        self.subobscure = subobscure
+    }
+}
+
+// MARK: DiaereseClass convenience initializers and mutators
+
+extension DiaereseClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(DiaereseClass.self, from: data)
+        self.init(amoreuxia: me.amoreuxia, ani: me.ani, bernicle: me.bernicle, blackwasher: me.blackwasher, blowhard: me.blowhard, broma: me.broma, closecross: me.closecross, congregationalism: me.congregationalism, grayly: me.grayly, historically: me.historically, hoast: me.hoast, irretentive: me.irretentive, parcener: me.parcener, pedder: me.pedder, pseudoanatomic: me.pseudoanatomic, rhizocarpian: me.rhizocarpian, samel: me.samel, silker: me.silker, subdentated: me.subdentated, subobscure: me.subobscure)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amoreuxia: JSONNull?? = nil,
+        ani: JSONNull?? = nil,
+        bernicle: JSONNull?? = nil,
+        blackwasher: JSONNull?? = nil,
+        blowhard: JSONNull?? = nil,
+        broma: JSONNull?? = nil,
+        closecross: JSONNull?? = nil,
+        congregationalism: JSONNull?? = nil,
+        grayly: JSONNull?? = nil,
+        historically: JSONNull?? = nil,
+        hoast: JSONNull?? = nil,
+        irretentive: JSONNull?? = nil,
+        parcener: JSONNull?? = nil,
+        pedder: JSONNull?? = nil,
+        pseudoanatomic: JSONNull?? = nil,
+        rhizocarpian: JSONNull?? = nil,
+        samel: JSONNull?? = nil,
+        silker: JSONNull?? = nil,
+        subdentated: JSONNull?? = nil,
+        subobscure: JSONNull?? = nil
+    ) -> DiaereseClass {
+        return DiaereseClass(
+            amoreuxia: amoreuxia ?? self.amoreuxia,
+            ani: ani ?? self.ani,
+            bernicle: bernicle ?? self.bernicle,
+            blackwasher: blackwasher ?? self.blackwasher,
+            blowhard: blowhard ?? self.blowhard,
+            broma: broma ?? self.broma,
+            closecross: closecross ?? self.closecross,
+            congregationalism: congregationalism ?? self.congregationalism,
+            grayly: grayly ?? self.grayly,
+            historically: historically ?? self.historically,
+            hoast: hoast ?? self.hoast,
+            irretentive: irretentive ?? self.irretentive,
+            parcener: parcener ?? self.parcener,
+            pedder: pedder ?? self.pedder,
+            pseudoanatomic: pseudoanatomic ?? self.pseudoanatomic,
+            rhizocarpian: rhizocarpian ?? self.rhizocarpian,
+            samel: samel ?? self.samel,
+            silker: silker ?? self.silker,
+            subdentated: subdentated ?? self.subdentated,
+            subobscure: subobscure ?? self.subobscure
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Downstroke: Codable, Sendable {
+    case bool(Bool)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Downstroke.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Downstroke"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Eleutheromania: Codable, Sendable {
+    case double(Double)
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Eleutheromania.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Eleutheromania"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Encrust
+final class Encrust: Codable, Sendable {
+    let comradely: JSONNull?
+    let diacanthous: JSONNull?
+    let feminineness: JSONNull?
+    let gossamered: JSONNull?
+    let hibernia: JSONNull?
+    let hibiscus: JSONNull?
+    let lepidosauria: JSONNull?
+    let lollingly: JSONNull?
+    let manager: JSONNull?
+    let mechanic: JSONNull?
+    let overminuteness: JSONNull?
+    let papelonne: JSONNull?
+    let plebification: JSONNull?
+    let pugmiller: JSONNull?
+    let recoveror: JSONNull?
+    let spermatoblastic: JSONNull?
+    let syllidae: JSONNull?
+    let ungyved: JSONNull?
+    let whirlabout: JSONNull?
+    let woodenware: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case comradely = "comradely"
+        case diacanthous = "diacanthous"
+        case feminineness = "feminineness"
+        case gossamered = "gossamered"
+        case hibernia = "Hibernia"
+        case hibiscus = "Hibiscus"
+        case lepidosauria = "Lepidosauria"
+        case lollingly = "lollingly"
+        case manager = "manager"
+        case mechanic = "mechanic"
+        case overminuteness = "overminuteness"
+        case papelonne = "papelonne"
+        case plebification = "plebification"
+        case pugmiller = "pugmiller"
+        case recoveror = "recoveror"
+        case spermatoblastic = "spermatoblastic"
+        case syllidae = "Syllidae"
+        case ungyved = "ungyved"
+        case whirlabout = "whirlabout"
+        case woodenware = "woodenware"
+    }
+
+    init(comradely: JSONNull?, diacanthous: JSONNull?, feminineness: JSONNull?, gossamered: JSONNull?, hibernia: JSONNull?, hibiscus: JSONNull?, lepidosauria: JSONNull?, lollingly: JSONNull?, manager: JSONNull?, mechanic: JSONNull?, overminuteness: JSONNull?, papelonne: JSONNull?, plebification: JSONNull?, pugmiller: JSONNull?, recoveror: JSONNull?, spermatoblastic: JSONNull?, syllidae: JSONNull?, ungyved: JSONNull?, whirlabout: JSONNull?, woodenware: JSONNull?) {
+        self.comradely = comradely
+        self.diacanthous = diacanthous
+        self.feminineness = feminineness
+        self.gossamered = gossamered
+        self.hibernia = hibernia
+        self.hibiscus = hibiscus
+        self.lepidosauria = lepidosauria
+        self.lollingly = lollingly
+        self.manager = manager
+        self.mechanic = mechanic
+        self.overminuteness = overminuteness
+        self.papelonne = papelonne
+        self.plebification = plebification
+        self.pugmiller = pugmiller
+        self.recoveror = recoveror
+        self.spermatoblastic = spermatoblastic
+        self.syllidae = syllidae
+        self.ungyved = ungyved
+        self.whirlabout = whirlabout
+        self.woodenware = woodenware
+    }
+}
+
+// MARK: Encrust convenience initializers and mutators
+
+extension Encrust {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Encrust.self, from: data)
+        self.init(comradely: me.comradely, diacanthous: me.diacanthous, feminineness: me.feminineness, gossamered: me.gossamered, hibernia: me.hibernia, hibiscus: me.hibiscus, lepidosauria: me.lepidosauria, lollingly: me.lollingly, manager: me.manager, mechanic: me.mechanic, overminuteness: me.overminuteness, papelonne: me.papelonne, plebification: me.plebification, pugmiller: me.pugmiller, recoveror: me.recoveror, spermatoblastic: me.spermatoblastic, syllidae: me.syllidae, ungyved: me.ungyved, whirlabout: me.whirlabout, woodenware: me.woodenware)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        comradely: JSONNull?? = nil,
+        diacanthous: JSONNull?? = nil,
+        feminineness: JSONNull?? = nil,
+        gossamered: JSONNull?? = nil,
+        hibernia: JSONNull?? = nil,
+        hibiscus: JSONNull?? = nil,
+        lepidosauria: JSONNull?? = nil,
+        lollingly: JSONNull?? = nil,
+        manager: JSONNull?? = nil,
+        mechanic: JSONNull?? = nil,
+        overminuteness: JSONNull?? = nil,
+        papelonne: JSONNull?? = nil,
+        plebification: JSONNull?? = nil,
+        pugmiller: JSONNull?? = nil,
+        recoveror: JSONNull?? = nil,
+        spermatoblastic: JSONNull?? = nil,
+        syllidae: JSONNull?? = nil,
+        ungyved: JSONNull?? = nil,
+        whirlabout: JSONNull?? = nil,
+        woodenware: JSONNull?? = nil
+    ) -> Encrust {
+        return Encrust(
+            comradely: comradely ?? self.comradely,
+            diacanthous: diacanthous ?? self.diacanthous,
+            feminineness: feminineness ?? self.feminineness,
+            gossamered: gossamered ?? self.gossamered,
+            hibernia: hibernia ?? self.hibernia,
+            hibiscus: hibiscus ?? self.hibiscus,
+            lepidosauria: lepidosauria ?? self.lepidosauria,
+            lollingly: lollingly ?? self.lollingly,
+            manager: manager ?? self.manager,
+            mechanic: mechanic ?? self.mechanic,
+            overminuteness: overminuteness ?? self.overminuteness,
+            papelonne: papelonne ?? self.papelonne,
+            plebification: plebification ?? self.plebification,
+            pugmiller: pugmiller ?? self.pugmiller,
+            recoveror: recoveror ?? self.recoveror,
+            spermatoblastic: spermatoblastic ?? self.spermatoblastic,
+            syllidae: syllidae ?? self.syllidae,
+            ungyved: ungyved ?? self.ungyved,
+            whirlabout: whirlabout ?? self.whirlabout,
+            woodenware: woodenware ?? self.woodenware
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Entomoid: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case integer(Int)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Entomoid.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Entomoid"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Epipaleolithic: Codable, Sendable {
+    case double(Double)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Epipaleolithic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Epipaleolithic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Expropriable: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Expropriable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Expropriable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum FagginglyElement: Codable, Sendable {
+    case double(Double)
+    case fagginglyClass(FagginglyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(FagginglyClass.self) {
+            self = .fagginglyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(FagginglyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for FagginglyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .fagginglyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - FagginglyClass
+final class FagginglyClass: Codable, Sendable {
+    let abranchian: JSONNull?
+    let aculeiform: JSONNull?
+    let adiaphoristic: JSONNull?
+    let adoptionism: JSONNull?
+    let anglic: JSONNull?
+    let antrotomy: JSONNull?
+    let coerciveness: JSONNull?
+    let decorist: JSONNull?
+    let duckhood: JSONNull?
+    let heteromeri: JSONNull?
+    let hypochnose: JSONNull?
+    let lochage: JSONNull?
+    let melee: JSONNull?
+    let nonconformitant: JSONNull?
+    let poinsettia: JSONNull?
+    let putatively: JSONNull?
+    let semivolatile: JSONNull?
+    let soleas: JSONNull?
+    let unfastenable: JSONNull?
+    let unmillinered: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case abranchian = "abranchian"
+        case aculeiform = "aculeiform"
+        case adiaphoristic = "adiaphoristic"
+        case adoptionism = "adoptionism"
+        case anglic = "Anglic"
+        case antrotomy = "antrotomy"
+        case coerciveness = "coerciveness"
+        case decorist = "decorist"
+        case duckhood = "duckhood"
+        case heteromeri = "Heteromeri"
+        case hypochnose = "hypochnose"
+        case lochage = "lochage"
+        case melee = "melee"
+        case nonconformitant = "nonconformitant"
+        case poinsettia = "Poinsettia"
+        case putatively = "putatively"
+        case semivolatile = "semivolatile"
+        case soleas = "soleas"
+        case unfastenable = "unfastenable"
+        case unmillinered = "unmillinered"
+    }
+
+    init(abranchian: JSONNull?, aculeiform: JSONNull?, adiaphoristic: JSONNull?, adoptionism: JSONNull?, anglic: JSONNull?, antrotomy: JSONNull?, coerciveness: JSONNull?, decorist: JSONNull?, duckhood: JSONNull?, heteromeri: JSONNull?, hypochnose: JSONNull?, lochage: JSONNull?, melee: JSONNull?, nonconformitant: JSONNull?, poinsettia: JSONNull?, putatively: JSONNull?, semivolatile: JSONNull?, soleas: JSONNull?, unfastenable: JSONNull?, unmillinered: JSONNull?) {
+        self.abranchian = abranchian
+        self.aculeiform = aculeiform
+        self.adiaphoristic = adiaphoristic
+        self.adoptionism = adoptionism
+        self.anglic = anglic
+        self.antrotomy = antrotomy
+        self.coerciveness = coerciveness
+        self.decorist = decorist
+        self.duckhood = duckhood
+        self.heteromeri = heteromeri
+        self.hypochnose = hypochnose
+        self.lochage = lochage
+        self.melee = melee
+        self.nonconformitant = nonconformitant
+        self.poinsettia = poinsettia
+        self.putatively = putatively
+        self.semivolatile = semivolatile
+        self.soleas = soleas
+        self.unfastenable = unfastenable
+        self.unmillinered = unmillinered
+    }
+}
+
+// MARK: FagginglyClass convenience initializers and mutators
+
+extension FagginglyClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(FagginglyClass.self, from: data)
+        self.init(abranchian: me.abranchian, aculeiform: me.aculeiform, adiaphoristic: me.adiaphoristic, adoptionism: me.adoptionism, anglic: me.anglic, antrotomy: me.antrotomy, coerciveness: me.coerciveness, decorist: me.decorist, duckhood: me.duckhood, heteromeri: me.heteromeri, hypochnose: me.hypochnose, lochage: me.lochage, melee: me.melee, nonconformitant: me.nonconformitant, poinsettia: me.poinsettia, putatively: me.putatively, semivolatile: me.semivolatile, soleas: me.soleas, unfastenable: me.unfastenable, unmillinered: me.unmillinered)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        abranchian: JSONNull?? = nil,
+        aculeiform: JSONNull?? = nil,
+        adiaphoristic: JSONNull?? = nil,
+        adoptionism: JSONNull?? = nil,
+        anglic: JSONNull?? = nil,
+        antrotomy: JSONNull?? = nil,
+        coerciveness: JSONNull?? = nil,
+        decorist: JSONNull?? = nil,
+        duckhood: JSONNull?? = nil,
+        heteromeri: JSONNull?? = nil,
+        hypochnose: JSONNull?? = nil,
+        lochage: JSONNull?? = nil,
+        melee: JSONNull?? = nil,
+        nonconformitant: JSONNull?? = nil,
+        poinsettia: JSONNull?? = nil,
+        putatively: JSONNull?? = nil,
+        semivolatile: JSONNull?? = nil,
+        soleas: JSONNull?? = nil,
+        unfastenable: JSONNull?? = nil,
+        unmillinered: JSONNull?? = nil
+    ) -> FagginglyClass {
+        return FagginglyClass(
+            abranchian: abranchian ?? self.abranchian,
+            aculeiform: aculeiform ?? self.aculeiform,
+            adiaphoristic: adiaphoristic ?? self.adiaphoristic,
+            adoptionism: adoptionism ?? self.adoptionism,
+            anglic: anglic ?? self.anglic,
+            antrotomy: antrotomy ?? self.antrotomy,
+            coerciveness: coerciveness ?? self.coerciveness,
+            decorist: decorist ?? self.decorist,
+            duckhood: duckhood ?? self.duckhood,
+            heteromeri: heteromeri ?? self.heteromeri,
+            hypochnose: hypochnose ?? self.hypochnose,
+            lochage: lochage ?? self.lochage,
+            melee: melee ?? self.melee,
+            nonconformitant: nonconformitant ?? self.nonconformitant,
+            poinsettia: poinsettia ?? self.poinsettia,
+            putatively: putatively ?? self.putatively,
+            semivolatile: semivolatile ?? self.semivolatile,
+            soleas: soleas ?? self.soleas,
+            unfastenable: unfastenable ?? self.unfastenable,
+            unmillinered: unmillinered ?? self.unmillinered
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum FenkElement: Codable, Sendable {
+    case fenkClass(FenkClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(FenkClass.self) {
+            self = .fenkClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(FenkElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for FenkElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .fenkClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - FenkClass
+final class FenkClass: Codable, Sendable {
+    let apoise: JSONNull?
+    let astronomize: JSONNull?
+    let cockhorse: JSONNull?
+    let copular: JSONNull?
+    let dagomba: JSONNull?
+    let draffy: JSONNull?
+    let foreigner: JSONNull?
+    let guyandot: JSONNull?
+    let neurogliosis: JSONNull?
+    let osmious: JSONNull?
+    let palpitate: JSONNull?
+    let rebukeable: JSONNull?
+    let reinwardtia: JSONNull?
+    let reservatory: JSONNull?
+    let scalt: JSONNull?
+    let scripturalize: JSONNull?
+    let tintometer: JSONNull?
+    let tritoness: JSONNull?
+    let undergrade: JSONNull?
+    let undermountain: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case apoise = "apoise"
+        case astronomize = "astronomize"
+        case cockhorse = "cockhorse"
+        case copular = "copular"
+        case dagomba = "Dagomba"
+        case draffy = "draffy"
+        case foreigner = "foreigner"
+        case guyandot = "Guyandot"
+        case neurogliosis = "neurogliosis"
+        case osmious = "osmious"
+        case palpitate = "palpitate"
+        case rebukeable = "rebukeable"
+        case reinwardtia = "Reinwardtia"
+        case reservatory = "reservatory"
+        case scalt = "scalt"
+        case scripturalize = "scripturalize"
+        case tintometer = "tintometer"
+        case tritoness = "Tritoness"
+        case undergrade = "undergrade"
+        case undermountain = "undermountain"
+    }
+
+    init(apoise: JSONNull?, astronomize: JSONNull?, cockhorse: JSONNull?, copular: JSONNull?, dagomba: JSONNull?, draffy: JSONNull?, foreigner: JSONNull?, guyandot: JSONNull?, neurogliosis: JSONNull?, osmious: JSONNull?, palpitate: JSONNull?, rebukeable: JSONNull?, reinwardtia: JSONNull?, reservatory: JSONNull?, scalt: JSONNull?, scripturalize: JSONNull?, tintometer: JSONNull?, tritoness: JSONNull?, undergrade: JSONNull?, undermountain: JSONNull?) {
+        self.apoise = apoise
+        self.astronomize = astronomize
+        self.cockhorse = cockhorse
+        self.copular = copular
+        self.dagomba = dagomba
+        self.draffy = draffy
+        self.foreigner = foreigner
+        self.guyandot = guyandot
+        self.neurogliosis = neurogliosis
+        self.osmious = osmious
+        self.palpitate = palpitate
+        self.rebukeable = rebukeable
+        self.reinwardtia = reinwardtia
+        self.reservatory = reservatory
+        self.scalt = scalt
+        self.scripturalize = scripturalize
+        self.tintometer = tintometer
+        self.tritoness = tritoness
+        self.undergrade = undergrade
+        self.undermountain = undermountain
+    }
+}
+
+// MARK: FenkClass convenience initializers and mutators
+
+extension FenkClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(FenkClass.self, from: data)
+        self.init(apoise: me.apoise, astronomize: me.astronomize, cockhorse: me.cockhorse, copular: me.copular, dagomba: me.dagomba, draffy: me.draffy, foreigner: me.foreigner, guyandot: me.guyandot, neurogliosis: me.neurogliosis, osmious: me.osmious, palpitate: me.palpitate, rebukeable: me.rebukeable, reinwardtia: me.reinwardtia, reservatory: me.reservatory, scalt: me.scalt, scripturalize: me.scripturalize, tintometer: me.tintometer, tritoness: me.tritoness, undergrade: me.undergrade, undermountain: me.undermountain)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apoise: JSONNull?? = nil,
+        astronomize: JSONNull?? = nil,
+        cockhorse: JSONNull?? = nil,
+        copular: JSONNull?? = nil,
+        dagomba: JSONNull?? = nil,
+        draffy: JSONNull?? = nil,
+        foreigner: JSONNull?? = nil,
+        guyandot: JSONNull?? = nil,
+        neurogliosis: JSONNull?? = nil,
+        osmious: JSONNull?? = nil,
+        palpitate: JSONNull?? = nil,
+        rebukeable: JSONNull?? = nil,
+        reinwardtia: JSONNull?? = nil,
+        reservatory: JSONNull?? = nil,
+        scalt: JSONNull?? = nil,
+        scripturalize: JSONNull?? = nil,
+        tintometer: JSONNull?? = nil,
+        tritoness: JSONNull?? = nil,
+        undergrade: JSONNull?? = nil,
+        undermountain: JSONNull?? = nil
+    ) -> FenkClass {
+        return FenkClass(
+            apoise: apoise ?? self.apoise,
+            astronomize: astronomize ?? self.astronomize,
+            cockhorse: cockhorse ?? self.cockhorse,
+            copular: copular ?? self.copular,
+            dagomba: dagomba ?? self.dagomba,
+            draffy: draffy ?? self.draffy,
+            foreigner: foreigner ?? self.foreigner,
+            guyandot: guyandot ?? self.guyandot,
+            neurogliosis: neurogliosis ?? self.neurogliosis,
+            osmious: osmious ?? self.osmious,
+            palpitate: palpitate ?? self.palpitate,
+            rebukeable: rebukeable ?? self.rebukeable,
+            reinwardtia: reinwardtia ?? self.reinwardtia,
+            reservatory: reservatory ?? self.reservatory,
+            scalt: scalt ?? self.scalt,
+            scripturalize: scripturalize ?? self.scripturalize,
+            tintometer: tintometer ?? self.tintometer,
+            tritoness: tritoness ?? self.tritoness,
+            undergrade: undergrade ?? self.undergrade,
+            undermountain: undermountain ?? self.undermountain
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum FlagmakingElement: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+    case flagmakingClass(FlagmakingClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(FlagmakingClass.self) {
+            self = .flagmakingClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(FlagmakingElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for FlagmakingElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .flagmakingClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - FlagmakingClass
+final class FlagmakingClass: Codable, Sendable {
+    let albarco: JSONNull?
+    let bunodonta: JSONNull?
+    let hornify: JSONNull?
+    let hydrocorisae: JSONNull?
+    let hypoglossus: JSONNull?
+    let inexpiably: JSONNull?
+    let ingratitude: JSONNull?
+    let ladyfly: JSONNull?
+    let medicament: JSONNull?
+    let monogrammatic: JSONNull?
+    let nobbut: JSONNull?
+    let notacanthidae: JSONNull?
+    let polyplacophore: JSONNull?
+    let proexercise: JSONNull?
+    let protoplast: JSONNull?
+    let puzzling: JSONNull?
+    let splanchnoskeleton: JSONNull?
+    let unloveliness: JSONNull?
+    let unquarantined: JSONNull?
+    let unrenounceable: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case albarco = "albarco"
+        case bunodonta = "Bunodonta"
+        case hornify = "hornify"
+        case hydrocorisae = "Hydrocorisae"
+        case hypoglossus = "hypoglossus"
+        case inexpiably = "inexpiably"
+        case ingratitude = "ingratitude"
+        case ladyfly = "ladyfly"
+        case medicament = "medicament"
+        case monogrammatic = "monogrammatic"
+        case nobbut = "nobbut"
+        case notacanthidae = "Notacanthidae"
+        case polyplacophore = "polyplacophore"
+        case proexercise = "proexercise"
+        case protoplast = "protoplast"
+        case puzzling = "puzzling"
+        case splanchnoskeleton = "splanchnoskeleton"
+        case unloveliness = "unloveliness"
+        case unquarantined = "unquarantined"
+        case unrenounceable = "unrenounceable"
+    }
+
+    init(albarco: JSONNull?, bunodonta: JSONNull?, hornify: JSONNull?, hydrocorisae: JSONNull?, hypoglossus: JSONNull?, inexpiably: JSONNull?, ingratitude: JSONNull?, ladyfly: JSONNull?, medicament: JSONNull?, monogrammatic: JSONNull?, nobbut: JSONNull?, notacanthidae: JSONNull?, polyplacophore: JSONNull?, proexercise: JSONNull?, protoplast: JSONNull?, puzzling: JSONNull?, splanchnoskeleton: JSONNull?, unloveliness: JSONNull?, unquarantined: JSONNull?, unrenounceable: JSONNull?) {
+        self.albarco = albarco
+        self.bunodonta = bunodonta
+        self.hornify = hornify
+        self.hydrocorisae = hydrocorisae
+        self.hypoglossus = hypoglossus
+        self.inexpiably = inexpiably
+        self.ingratitude = ingratitude
+        self.ladyfly = ladyfly
+        self.medicament = medicament
+        self.monogrammatic = monogrammatic
+        self.nobbut = nobbut
+        self.notacanthidae = notacanthidae
+        self.polyplacophore = polyplacophore
+        self.proexercise = proexercise
+        self.protoplast = protoplast
+        self.puzzling = puzzling
+        self.splanchnoskeleton = splanchnoskeleton
+        self.unloveliness = unloveliness
+        self.unquarantined = unquarantined
+        self.unrenounceable = unrenounceable
+    }
+}
+
+// MARK: FlagmakingClass convenience initializers and mutators
+
+extension FlagmakingClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(FlagmakingClass.self, from: data)
+        self.init(albarco: me.albarco, bunodonta: me.bunodonta, hornify: me.hornify, hydrocorisae: me.hydrocorisae, hypoglossus: me.hypoglossus, inexpiably: me.inexpiably, ingratitude: me.ingratitude, ladyfly: me.ladyfly, medicament: me.medicament, monogrammatic: me.monogrammatic, nobbut: me.nobbut, notacanthidae: me.notacanthidae, polyplacophore: me.polyplacophore, proexercise: me.proexercise, protoplast: me.protoplast, puzzling: me.puzzling, splanchnoskeleton: me.splanchnoskeleton, unloveliness: me.unloveliness, unquarantined: me.unquarantined, unrenounceable: me.unrenounceable)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        albarco: JSONNull?? = nil,
+        bunodonta: JSONNull?? = nil,
+        hornify: JSONNull?? = nil,
+        hydrocorisae: JSONNull?? = nil,
+        hypoglossus: JSONNull?? = nil,
+        inexpiably: JSONNull?? = nil,
+        ingratitude: JSONNull?? = nil,
+        ladyfly: JSONNull?? = nil,
+        medicament: JSONNull?? = nil,
+        monogrammatic: JSONNull?? = nil,
+        nobbut: JSONNull?? = nil,
+        notacanthidae: JSONNull?? = nil,
+        polyplacophore: JSONNull?? = nil,
+        proexercise: JSONNull?? = nil,
+        protoplast: JSONNull?? = nil,
+        puzzling: JSONNull?? = nil,
+        splanchnoskeleton: JSONNull?? = nil,
+        unloveliness: JSONNull?? = nil,
+        unquarantined: JSONNull?? = nil,
+        unrenounceable: JSONNull?? = nil
+    ) -> FlagmakingClass {
+        return FlagmakingClass(
+            albarco: albarco ?? self.albarco,
+            bunodonta: bunodonta ?? self.bunodonta,
+            hornify: hornify ?? self.hornify,
+            hydrocorisae: hydrocorisae ?? self.hydrocorisae,
+            hypoglossus: hypoglossus ?? self.hypoglossus,
+            inexpiably: inexpiably ?? self.inexpiably,
+            ingratitude: ingratitude ?? self.ingratitude,
+            ladyfly: ladyfly ?? self.ladyfly,
+            medicament: medicament ?? self.medicament,
+            monogrammatic: monogrammatic ?? self.monogrammatic,
+            nobbut: nobbut ?? self.nobbut,
+            notacanthidae: notacanthidae ?? self.notacanthidae,
+            polyplacophore: polyplacophore ?? self.polyplacophore,
+            proexercise: proexercise ?? self.proexercise,
+            protoplast: protoplast ?? self.protoplast,
+            puzzling: puzzling ?? self.puzzling,
+            splanchnoskeleton: splanchnoskeleton ?? self.splanchnoskeleton,
+            unloveliness: unloveliness ?? self.unloveliness,
+            unquarantined: unquarantined ?? self.unquarantined,
+            unrenounceable: unrenounceable ?? self.unrenounceable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Fluorometer: Codable, Sendable {
+    case integer(Int)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Fluorometer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Fluorometer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Fuzzy: Codable, Sendable {
+    case integer(Int)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Fuzzy.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Fuzzy"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Gardenward: Codable, Sendable {
+    case bool(Bool)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Gardenward.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Gardenward"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Generalissimo: Codable, Sendable {
+    case bool(Bool)
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Generalissimo.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Generalissimo"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Hemicrystalline: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Hemicrystalline.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hemicrystalline"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum HemocoeleElement: Codable, Sendable {
+    case hemocoeleClass(HemocoeleClass)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(HemocoeleClass.self) {
+            self = .hemocoeleClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(HemocoeleElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for HemocoeleElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .hemocoeleClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - HemocoeleClass
+final class HemocoeleClass: Codable, Sendable {
+    let acrogamy: JSONNull?
+    let amelification: JSONNull?
+    let autobiographic: JSONNull?
+    let berat: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let disproportionably: JSONNull?
+    let erythrite: JSONNull?
+    let graphic: JSONNull?
+    let hepatological: JSONNull?
+    let homocerc: Bool?
+    let incommensurably: JSONNull?
+    let misaffirm: JSONNull?
+    let nonbookish: JSONNull?
+    let pocketbook: JSONNull?
+    let sclerometric: JSONNull?
+    let stambouline: JSONNull?
+    let stickpin: JSONNull?
+    let tubulure: JSONNull?
+    let undelated: JSONNull?
+    let unsalt: JSONNull?
+    let untutelar: JSONNull?
+    let vagrant: JSONNull?
+    let walt: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acrogamy = "acrogamy"
+        case amelification = "amelification"
+        case autobiographic = "autobiographic"
+        case berat = "berat"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case disproportionably = "disproportionably"
+        case erythrite = "erythrite"
+        case graphic = "graphic"
+        case hepatological = "hepatological"
+        case homocerc = "homocerc"
+        case incommensurably = "incommensurably"
+        case misaffirm = "misaffirm"
+        case nonbookish = "nonbookish"
+        case pocketbook = "pocketbook"
+        case sclerometric = "sclerometric"
+        case stambouline = "stambouline"
+        case stickpin = "stickpin"
+        case tubulure = "tubulure"
+        case undelated = "undelated"
+        case unsalt = "unsalt"
+        case untutelar = "untutelar"
+        case vagrant = "vagrant"
+        case walt = "Walt"
+    }
+
+    init(acrogamy: JSONNull?, amelification: JSONNull?, autobiographic: JSONNull?, berat: JSONNull?, catharticalness: Double?, chirotherium: Int?, disdiapason: String?, disproportionably: JSONNull?, erythrite: JSONNull?, graphic: JSONNull?, hepatological: JSONNull?, homocerc: Bool?, incommensurably: JSONNull?, misaffirm: JSONNull?, nonbookish: JSONNull?, pocketbook: JSONNull?, sclerometric: JSONNull?, stambouline: JSONNull?, stickpin: JSONNull?, tubulure: JSONNull?, undelated: JSONNull?, unsalt: JSONNull?, untutelar: JSONNull?, vagrant: JSONNull?, walt: JSONNull?) {
+        self.acrogamy = acrogamy
+        self.amelification = amelification
+        self.autobiographic = autobiographic
+        self.berat = berat
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.disproportionably = disproportionably
+        self.erythrite = erythrite
+        self.graphic = graphic
+        self.hepatological = hepatological
+        self.homocerc = homocerc
+        self.incommensurably = incommensurably
+        self.misaffirm = misaffirm
+        self.nonbookish = nonbookish
+        self.pocketbook = pocketbook
+        self.sclerometric = sclerometric
+        self.stambouline = stambouline
+        self.stickpin = stickpin
+        self.tubulure = tubulure
+        self.undelated = undelated
+        self.unsalt = unsalt
+        self.untutelar = untutelar
+        self.vagrant = vagrant
+        self.walt = walt
+    }
+}
+
+// MARK: HemocoeleClass convenience initializers and mutators
+
+extension HemocoeleClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(HemocoeleClass.self, from: data)
+        self.init(acrogamy: me.acrogamy, amelification: me.amelification, autobiographic: me.autobiographic, berat: me.berat, catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, disproportionably: me.disproportionably, erythrite: me.erythrite, graphic: me.graphic, hepatological: me.hepatological, homocerc: me.homocerc, incommensurably: me.incommensurably, misaffirm: me.misaffirm, nonbookish: me.nonbookish, pocketbook: me.pocketbook, sclerometric: me.sclerometric, stambouline: me.stambouline, stickpin: me.stickpin, tubulure: me.tubulure, undelated: me.undelated, unsalt: me.unsalt, untutelar: me.untutelar, vagrant: me.vagrant, walt: me.walt)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acrogamy: JSONNull?? = nil,
+        amelification: JSONNull?? = nil,
+        autobiographic: JSONNull?? = nil,
+        berat: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        disproportionably: JSONNull?? = nil,
+        erythrite: JSONNull?? = nil,
+        graphic: JSONNull?? = nil,
+        hepatological: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        incommensurably: JSONNull?? = nil,
+        misaffirm: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        pocketbook: JSONNull?? = nil,
+        sclerometric: JSONNull?? = nil,
+        stambouline: JSONNull?? = nil,
+        stickpin: JSONNull?? = nil,
+        tubulure: JSONNull?? = nil,
+        undelated: JSONNull?? = nil,
+        unsalt: JSONNull?? = nil,
+        untutelar: JSONNull?? = nil,
+        vagrant: JSONNull?? = nil,
+        walt: JSONNull?? = nil
+    ) -> HemocoeleClass {
+        return HemocoeleClass(
+            acrogamy: acrogamy ?? self.acrogamy,
+            amelification: amelification ?? self.amelification,
+            autobiographic: autobiographic ?? self.autobiographic,
+            berat: berat ?? self.berat,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            disproportionably: disproportionably ?? self.disproportionably,
+            erythrite: erythrite ?? self.erythrite,
+            graphic: graphic ?? self.graphic,
+            hepatological: hepatological ?? self.hepatological,
+            homocerc: homocerc ?? self.homocerc,
+            incommensurably: incommensurably ?? self.incommensurably,
+            misaffirm: misaffirm ?? self.misaffirm,
+            nonbookish: nonbookish ?? self.nonbookish,
+            pocketbook: pocketbook ?? self.pocketbook,
+            sclerometric: sclerometric ?? self.sclerometric,
+            stambouline: stambouline ?? self.stambouline,
+            stickpin: stickpin ?? self.stickpin,
+            tubulure: tubulure ?? self.tubulure,
+            undelated: undelated ?? self.undelated,
+            unsalt: unsalt ?? self.unsalt,
+            untutelar: untutelar ?? self.untutelar,
+            vagrant: vagrant ?? self.vagrant,
+            walt: walt ?? self.walt
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Hoister: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Hoister.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hoister"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Hyperpiesi: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Hyperpiesi.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hyperpiesi"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Hyppish: Codable, Sendable {
+    case bool(Bool)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Hyppish.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hyppish"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Idealizer: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case integer(Int)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Idealizer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Idealizer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Incrustator: Codable, Sendable {
+    case integer(Int)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Incrustator.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Incrustator"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Intentiveness: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Intentiveness.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Intentiveness"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Interacinar
+final class Interacinar: Codable, Sendable {
+    let assapan: Double
+    let benefactorship: Bool
+    let triseriatim: String
+    let tubbing: Int
+    let untrimmed: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case assapan = "assapan"
+        case benefactorship = "benefactorship"
+        case triseriatim = "triseriatim"
+        case tubbing = "tubbing"
+        case untrimmed = "untrimmed"
+    }
+
+    init(assapan: Double, benefactorship: Bool, triseriatim: String, tubbing: Int, untrimmed: JSONNull?) {
+        self.assapan = assapan
+        self.benefactorship = benefactorship
+        self.triseriatim = triseriatim
+        self.tubbing = tubbing
+        self.untrimmed = untrimmed
+    }
+}
+
+// MARK: Interacinar convenience initializers and mutators
+
+extension Interacinar {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Interacinar.self, from: data)
+        self.init(assapan: me.assapan, benefactorship: me.benefactorship, triseriatim: me.triseriatim, tubbing: me.tubbing, untrimmed: me.untrimmed)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        assapan: Double? = nil,
+        benefactorship: Bool? = nil,
+        triseriatim: String? = nil,
+        tubbing: Int? = nil,
+        untrimmed: JSONNull?? = nil
+    ) -> Interacinar {
+        return Interacinar(
+            assapan: assapan ?? self.assapan,
+            benefactorship: benefactorship ?? self.benefactorship,
+            triseriatim: triseriatim ?? self.triseriatim,
+            tubbing: tubbing ?? self.tubbing,
+            untrimmed: untrimmed ?? self.untrimmed
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Jacutinga: Codable, Sendable {
+    case integerArray([Int])
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Jacutinga.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Jacutinga"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+final class JSONNull: Codable, Hashable, Sendable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    public func hash(into hasher: inout Hasher) {
+        hasher.combine(0)
+    }
+
+    public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/head/swift/test/inputs/json/priority/combinations2.json/final-classes-true__struct-or-class-class--d3c62ec7414d/quicktype.swift b/head/swift/test/inputs/json/priority/combinations2.json/final-classes-true__struct-or-class-class--d3c62ec7414d/quicktype.swift
new file mode 100644
index 0000000..9d37c26
--- /dev/null
+++ b/head/swift/test/inputs/json/priority/combinations2.json/final-classes-true__struct-or-class-class--d3c62ec7414d/quicktype.swift
@@ -0,0 +1,2891 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+import Foundation
+
+// MARK: - TopLevel
+final class TopLevel: Codable {
+    let abranchiata: [Abranchiata]
+    let academe: [Academe]
+    let acquirable: [Acquirable]
+    let aerometry: [Aerometry]
+    let alexin: [Alexin]
+    let alleviate: [AlleviateElement]
+    let amaas: [Amaa]
+    let ambassage: [Ambassage]
+    let amphithyron: [Amphithyron?]
+    let andriana: [String?]
+    let ankee: [AnkeeElement]
+    let annihilator: [[String: Int?]?]
+    let annulose: JSONNull?
+    let ansarie: [AnsarieElement]
+    let aphasia: [Aphasia]
+    let asprawl: [Asprawl]
+    let attractive: [Bool?]
+    let barksome: [String: Int]
+    let bedesman: [Bedesman]
+    let belard: [Belard]
+    let bocking: [Bocking]
+    let brawlingly: [Brawlingly]
+    let brookie: [Brookie]
+    let bumboatman: [Bumboatman]
+    let bystreet: [JSONNull?]
+    let calaverite: [Calaverite]
+    let catallactic: [Catallactic]
+    let cemental: [Cemental]
+    let chytridiaceae: [ChytridiaceaeElement]
+    let discordia: [DiscordiaElement]
+    let endomyces: [Endomyce]
+    let epinephelidae: [Epinephelidae]
+    let eupatorium: [Eupatorium]
+    let gryphosaurus: [GryphosaurusElement]
+    let koryak: [Koryak]
+    let lavinia: [LaviniaElement]
+    let oskar: [OskarElement]
+    let rebecca: [RebeccaElement]
+    let rhomboganoidei: [Rhomboganoidei]
+    let rigsmal: Bool
+    let ruellia: [Ruellia]
+    let school: [School]
+    let shakespearolater: [Shakespearolater]
+    let svan: [Double]
+    let wayao: [String: Double]
+
+    enum CodingKeys: String, CodingKey {
+        case abranchiata = "Abranchiata"
+        case academe = "academe"
+        case acquirable = "acquirable"
+        case aerometry = "aerometry"
+        case alexin = "alexin"
+        case alleviate = "alleviate"
+        case amaas = "amaas"
+        case ambassage = "ambassage"
+        case amphithyron = "amphithyron"
+        case andriana = "Andriana"
+        case ankee = "ankee"
+        case annihilator = "annihilator"
+        case annulose = "annulose"
+        case ansarie = "Ansarie"
+        case aphasia = "aphasia"
+        case asprawl = "asprawl"
+        case attractive = "attractive"
+        case barksome = "barksome"
+        case bedesman = "bedesman"
+        case belard = "belard"
+        case bocking = "bocking"
+        case brawlingly = "brawlingly"
+        case brookie = "brookie"
+        case bumboatman = "bumboatman"
+        case bystreet = "bystreet"
+        case calaverite = "calaverite"
+        case catallactic = "catallactic"
+        case cemental = "cemental"
+        case chytridiaceae = "Chytridiaceae"
+        case discordia = "Discordia"
+        case endomyces = "Endomyces"
+        case epinephelidae = "Epinephelidae"
+        case eupatorium = "Eupatorium"
+        case gryphosaurus = "Gryphosaurus"
+        case koryak = "Koryak"
+        case lavinia = "Lavinia"
+        case oskar = "Oskar"
+        case rebecca = "Rebecca"
+        case rhomboganoidei = "Rhomboganoidei"
+        case rigsmal = "Rigsmal"
+        case ruellia = "Ruellia"
+        case school = "School"
+        case shakespearolater = "Shakespearolater"
+        case svan = "Svan"
+        case wayao = "Wayao"
+    }
+
+    init(abranchiata: [Abranchiata], academe: [Academe], acquirable: [Acquirable], aerometry: [Aerometry], alexin: [Alexin], alleviate: [AlleviateElement], amaas: [Amaa], ambassage: [Ambassage], amphithyron: [Amphithyron?], andriana: [String?], ankee: [AnkeeElement], annihilator: [[String: Int?]?], annulose: JSONNull?, ansarie: [AnsarieElement], aphasia: [Aphasia], asprawl: [Asprawl], attractive: [Bool?], barksome: [String: Int], bedesman: [Bedesman], belard: [Belard], bocking: [Bocking], brawlingly: [Brawlingly], brookie: [Brookie], bumboatman: [Bumboatman], bystreet: [JSONNull?], calaverite: [Calaverite], catallactic: [Catallactic], cemental: [Cemental], chytridiaceae: [ChytridiaceaeElement], discordia: [DiscordiaElement], endomyces: [Endomyce], epinephelidae: [Epinephelidae], eupatorium: [Eupatorium], gryphosaurus: [GryphosaurusElement], koryak: [Koryak], lavinia: [LaviniaElement], oskar: [OskarElement], rebecca: [RebeccaElement], rhomboganoidei: [Rhomboganoidei], rigsmal: Bool, ruellia: [Ruellia], school: [School], shakespearolater: [Shakespearolater], svan: [Double], wayao: [String: Double]) {
+        self.abranchiata = abranchiata
+        self.academe = academe
+        self.acquirable = acquirable
+        self.aerometry = aerometry
+        self.alexin = alexin
+        self.alleviate = alleviate
+        self.amaas = amaas
+        self.ambassage = ambassage
+        self.amphithyron = amphithyron
+        self.andriana = andriana
+        self.ankee = ankee
+        self.annihilator = annihilator
+        self.annulose = annulose
+        self.ansarie = ansarie
+        self.aphasia = aphasia
+        self.asprawl = asprawl
+        self.attractive = attractive
+        self.barksome = barksome
+        self.bedesman = bedesman
+        self.belard = belard
+        self.bocking = bocking
+        self.brawlingly = brawlingly
+        self.brookie = brookie
+        self.bumboatman = bumboatman
+        self.bystreet = bystreet
+        self.calaverite = calaverite
+        self.catallactic = catallactic
+        self.cemental = cemental
+        self.chytridiaceae = chytridiaceae
+        self.discordia = discordia
+        self.endomyces = endomyces
+        self.epinephelidae = epinephelidae
+        self.eupatorium = eupatorium
+        self.gryphosaurus = gryphosaurus
+        self.koryak = koryak
+        self.lavinia = lavinia
+        self.oskar = oskar
+        self.rebecca = rebecca
+        self.rhomboganoidei = rhomboganoidei
+        self.rigsmal = rigsmal
+        self.ruellia = ruellia
+        self.school = school
+        self.shakespearolater = shakespearolater
+        self.svan = svan
+        self.wayao = wayao
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(TopLevel.self, from: data)
+        self.init(abranchiata: me.abranchiata, academe: me.academe, acquirable: me.acquirable, aerometry: me.aerometry, alexin: me.alexin, alleviate: me.alleviate, amaas: me.amaas, ambassage: me.ambassage, amphithyron: me.amphithyron, andriana: me.andriana, ankee: me.ankee, annihilator: me.annihilator, annulose: me.annulose, ansarie: me.ansarie, aphasia: me.aphasia, asprawl: me.asprawl, attractive: me.attractive, barksome: me.barksome, bedesman: me.bedesman, belard: me.belard, bocking: me.bocking, brawlingly: me.brawlingly, brookie: me.brookie, bumboatman: me.bumboatman, bystreet: me.bystreet, calaverite: me.calaverite, catallactic: me.catallactic, cemental: me.cemental, chytridiaceae: me.chytridiaceae, discordia: me.discordia, endomyces: me.endomyces, epinephelidae: me.epinephelidae, eupatorium: me.eupatorium, gryphosaurus: me.gryphosaurus, koryak: me.koryak, lavinia: me.lavinia, oskar: me.oskar, rebecca: me.rebecca, rhomboganoidei: me.rhomboganoidei, rigsmal: me.rigsmal, ruellia: me.ruellia, school: me.school, shakespearolater: me.shakespearolater, svan: me.svan, wayao: me.wayao)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        abranchiata: [Abranchiata]? = nil,
+        academe: [Academe]? = nil,
+        acquirable: [Acquirable]? = nil,
+        aerometry: [Aerometry]? = nil,
+        alexin: [Alexin]? = nil,
+        alleviate: [AlleviateElement]? = nil,
+        amaas: [Amaa]? = nil,
+        ambassage: [Ambassage]? = nil,
+        amphithyron: [Amphithyron?]? = nil,
+        andriana: [String?]? = nil,
+        ankee: [AnkeeElement]? = nil,
+        annihilator: [[String: Int?]?]? = nil,
+        annulose: JSONNull?? = nil,
+        ansarie: [AnsarieElement]? = nil,
+        aphasia: [Aphasia]? = nil,
+        asprawl: [Asprawl]? = nil,
+        attractive: [Bool?]? = nil,
+        barksome: [String: Int]? = nil,
+        bedesman: [Bedesman]? = nil,
+        belard: [Belard]? = nil,
+        bocking: [Bocking]? = nil,
+        brawlingly: [Brawlingly]? = nil,
+        brookie: [Brookie]? = nil,
+        bumboatman: [Bumboatman]? = nil,
+        bystreet: [JSONNull?]? = nil,
+        calaverite: [Calaverite]? = nil,
+        catallactic: [Catallactic]? = nil,
+        cemental: [Cemental]? = nil,
+        chytridiaceae: [ChytridiaceaeElement]? = nil,
+        discordia: [DiscordiaElement]? = nil,
+        endomyces: [Endomyce]? = nil,
+        epinephelidae: [Epinephelidae]? = nil,
+        eupatorium: [Eupatorium]? = nil,
+        gryphosaurus: [GryphosaurusElement]? = nil,
+        koryak: [Koryak]? = nil,
+        lavinia: [LaviniaElement]? = nil,
+        oskar: [OskarElement]? = nil,
+        rebecca: [RebeccaElement]? = nil,
+        rhomboganoidei: [Rhomboganoidei]? = nil,
+        rigsmal: Bool? = nil,
+        ruellia: [Ruellia]? = nil,
+        school: [School]? = nil,
+        shakespearolater: [Shakespearolater]? = nil,
+        svan: [Double]? = nil,
+        wayao: [String: Double]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            abranchiata: abranchiata ?? self.abranchiata,
+            academe: academe ?? self.academe,
+            acquirable: acquirable ?? self.acquirable,
+            aerometry: aerometry ?? self.aerometry,
+            alexin: alexin ?? self.alexin,
+            alleviate: alleviate ?? self.alleviate,
+            amaas: amaas ?? self.amaas,
+            ambassage: ambassage ?? self.ambassage,
+            amphithyron: amphithyron ?? self.amphithyron,
+            andriana: andriana ?? self.andriana,
+            ankee: ankee ?? self.ankee,
+            annihilator: annihilator ?? self.annihilator,
+            annulose: annulose ?? self.annulose,
+            ansarie: ansarie ?? self.ansarie,
+            aphasia: aphasia ?? self.aphasia,
+            asprawl: asprawl ?? self.asprawl,
+            attractive: attractive ?? self.attractive,
+            barksome: barksome ?? self.barksome,
+            bedesman: bedesman ?? self.bedesman,
+            belard: belard ?? self.belard,
+            bocking: bocking ?? self.bocking,
+            brawlingly: brawlingly ?? self.brawlingly,
+            brookie: brookie ?? self.brookie,
+            bumboatman: bumboatman ?? self.bumboatman,
+            bystreet: bystreet ?? self.bystreet,
+            calaverite: calaverite ?? self.calaverite,
+            catallactic: catallactic ?? self.catallactic,
+            cemental: cemental ?? self.cemental,
+            chytridiaceae: chytridiaceae ?? self.chytridiaceae,
+            discordia: discordia ?? self.discordia,
+            endomyces: endomyces ?? self.endomyces,
+            epinephelidae: epinephelidae ?? self.epinephelidae,
+            eupatorium: eupatorium ?? self.eupatorium,
+            gryphosaurus: gryphosaurus ?? self.gryphosaurus,
+            koryak: koryak ?? self.koryak,
+            lavinia: lavinia ?? self.lavinia,
+            oskar: oskar ?? self.oskar,
+            rebecca: rebecca ?? self.rebecca,
+            rhomboganoidei: rhomboganoidei ?? self.rhomboganoidei,
+            rigsmal: rigsmal ?? self.rigsmal,
+            ruellia: ruellia ?? self.ruellia,
+            school: school ?? self.school,
+            shakespearolater: shakespearolater ?? self.shakespearolater,
+            svan: svan ?? self.svan,
+            wayao: wayao ?? self.wayao
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Abranchiata: Codable {
+    case integer(Int)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Abranchiata.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Abranchiata"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Academe: Codable {
+    case integer(Int)
+    case integerArray([Int])
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Academe.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Academe"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Acquirable: Codable {
+    case integerMap([String: Int])
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Acquirable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Acquirable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Aerometry: Codable {
+    case bool(Bool)
+    case double(Double)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Aerometry.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Aerometry"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Alexin: Codable {
+    case bool(Bool)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Alexin.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Alexin"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum AlleviateElement: Codable {
+    case alleviateClass(AlleviateClass)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode(AlleviateClass.self) {
+            self = .alleviateClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(AlleviateElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for AlleviateElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .alleviateClass(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - AlleviateClass
+final class AlleviateClass: Codable {
+    let apriori: JSONNull?
+    let beggarer: JSONNull?
+    let brokenheartedly: JSONNull?
+    let debilitation: JSONNull?
+    let frike: JSONNull?
+    let gastrolith: JSONNull?
+    let hulsean: JSONNull?
+    let orthocentric: JSONNull?
+    let petaly: JSONNull?
+    let probudgeting: JSONNull?
+    let reacquire: JSONNull?
+    let scow: JSONNull?
+    let shutoff: JSONNull?
+    let subcontiguous: JSONNull?
+    let suffumigate: JSONNull?
+    let transformable: JSONNull?
+    let uncoroneted: JSONNull?
+    let unparking: JSONNull?
+    let unvarnishedness: JSONNull?
+    let wherewithal: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case apriori = "apriori"
+        case beggarer = "beggarer"
+        case brokenheartedly = "brokenheartedly"
+        case debilitation = "debilitation"
+        case frike = "frike"
+        case gastrolith = "gastrolith"
+        case hulsean = "Hulsean"
+        case orthocentric = "orthocentric"
+        case petaly = "petaly"
+        case probudgeting = "probudgeting"
+        case reacquire = "reacquire"
+        case scow = "scow"
+        case shutoff = "shutoff"
+        case subcontiguous = "subcontiguous"
+        case suffumigate = "suffumigate"
+        case transformable = "transformable"
+        case uncoroneted = "uncoroneted"
+        case unparking = "unparking"
+        case unvarnishedness = "unvarnishedness"
+        case wherewithal = "wherewithal"
+    }
+
+    init(apriori: JSONNull?, beggarer: JSONNull?, brokenheartedly: JSONNull?, debilitation: JSONNull?, frike: JSONNull?, gastrolith: JSONNull?, hulsean: JSONNull?, orthocentric: JSONNull?, petaly: JSONNull?, probudgeting: JSONNull?, reacquire: JSONNull?, scow: JSONNull?, shutoff: JSONNull?, subcontiguous: JSONNull?, suffumigate: JSONNull?, transformable: JSONNull?, uncoroneted: JSONNull?, unparking: JSONNull?, unvarnishedness: JSONNull?, wherewithal: JSONNull?) {
+        self.apriori = apriori
+        self.beggarer = beggarer
+        self.brokenheartedly = brokenheartedly
+        self.debilitation = debilitation
+        self.frike = frike
+        self.gastrolith = gastrolith
+        self.hulsean = hulsean
+        self.orthocentric = orthocentric
+        self.petaly = petaly
+        self.probudgeting = probudgeting
+        self.reacquire = reacquire
+        self.scow = scow
+        self.shutoff = shutoff
+        self.subcontiguous = subcontiguous
+        self.suffumigate = suffumigate
+        self.transformable = transformable
+        self.uncoroneted = uncoroneted
+        self.unparking = unparking
+        self.unvarnishedness = unvarnishedness
+        self.wherewithal = wherewithal
+    }
+}
+
+// MARK: AlleviateClass convenience initializers and mutators
+
+extension AlleviateClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(AlleviateClass.self, from: data)
+        self.init(apriori: me.apriori, beggarer: me.beggarer, brokenheartedly: me.brokenheartedly, debilitation: me.debilitation, frike: me.frike, gastrolith: me.gastrolith, hulsean: me.hulsean, orthocentric: me.orthocentric, petaly: me.petaly, probudgeting: me.probudgeting, reacquire: me.reacquire, scow: me.scow, shutoff: me.shutoff, subcontiguous: me.subcontiguous, suffumigate: me.suffumigate, transformable: me.transformable, uncoroneted: me.uncoroneted, unparking: me.unparking, unvarnishedness: me.unvarnishedness, wherewithal: me.wherewithal)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apriori: JSONNull?? = nil,
+        beggarer: JSONNull?? = nil,
+        brokenheartedly: JSONNull?? = nil,
+        debilitation: JSONNull?? = nil,
+        frike: JSONNull?? = nil,
+        gastrolith: JSONNull?? = nil,
+        hulsean: JSONNull?? = nil,
+        orthocentric: JSONNull?? = nil,
+        petaly: JSONNull?? = nil,
+        probudgeting: JSONNull?? = nil,
+        reacquire: JSONNull?? = nil,
+        scow: JSONNull?? = nil,
+        shutoff: JSONNull?? = nil,
+        subcontiguous: JSONNull?? = nil,
+        suffumigate: JSONNull?? = nil,
+        transformable: JSONNull?? = nil,
+        uncoroneted: JSONNull?? = nil,
+        unparking: JSONNull?? = nil,
+        unvarnishedness: JSONNull?? = nil,
+        wherewithal: JSONNull?? = nil
+    ) -> AlleviateClass {
+        return AlleviateClass(
+            apriori: apriori ?? self.apriori,
+            beggarer: beggarer ?? self.beggarer,
+            brokenheartedly: brokenheartedly ?? self.brokenheartedly,
+            debilitation: debilitation ?? self.debilitation,
+            frike: frike ?? self.frike,
+            gastrolith: gastrolith ?? self.gastrolith,
+            hulsean: hulsean ?? self.hulsean,
+            orthocentric: orthocentric ?? self.orthocentric,
+            petaly: petaly ?? self.petaly,
+            probudgeting: probudgeting ?? self.probudgeting,
+            reacquire: reacquire ?? self.reacquire,
+            scow: scow ?? self.scow,
+            shutoff: shutoff ?? self.shutoff,
+            subcontiguous: subcontiguous ?? self.subcontiguous,
+            suffumigate: suffumigate ?? self.suffumigate,
+            transformable: transformable ?? self.transformable,
+            uncoroneted: uncoroneted ?? self.uncoroneted,
+            unparking: unparking ?? self.unparking,
+            unvarnishedness: unvarnishedness ?? self.unvarnishedness,
+            wherewithal: wherewithal ?? self.wherewithal
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Amaa: Codable {
+    case bool(Bool)
+    case integer(Int)
+    case rebecca(Rebecca)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Amaa.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Amaa"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Rebecca
+final class Rebecca: Codable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+
+    init(catharticalness: Double, chirotherium: Int, disdiapason: String, homocerc: Bool, nonbookish: JSONNull?) {
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.homocerc = homocerc
+        self.nonbookish = nonbookish
+    }
+}
+
+// MARK: Rebecca convenience initializers and mutators
+
+extension Rebecca {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Rebecca.self, from: data)
+        self.init(catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, homocerc: me.homocerc, nonbookish: me.nonbookish)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> Rebecca {
+        return Rebecca(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Ambassage: Codable {
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Ambassage.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Ambassage"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Amphithyron
+final class Amphithyron: Codable {
+    let akroasis: Int?
+    let antiphonical: Int?
+    let basebred: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let conductometric: Int?
+    let disdiapason: String?
+    let ensilation: Int?
+    let eyebolt: Int?
+    let fistulated: Int?
+    let heteropod: Int?
+    let homocerc: Bool?
+    let juniperus: Int?
+    let labyrinthically: Int?
+    let martyrization: Int?
+    let mispolicy: Int?
+    let multipara: Int?
+    let nazirite: Int?
+    let nonbookish: JSONNull?
+    let possessorial: Int?
+    let shamed: Int?
+    let shelfworn: Int?
+    let stagnum: Int?
+    let those: Int?
+    let undecimal: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case akroasis = "akroasis"
+        case antiphonical = "antiphonical"
+        case basebred = "basebred"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case conductometric = "conductometric"
+        case disdiapason = "disdiapason"
+        case ensilation = "ensilation"
+        case eyebolt = "eyebolt"
+        case fistulated = "fistulated"
+        case heteropod = "heteropod"
+        case homocerc = "homocerc"
+        case juniperus = "Juniperus"
+        case labyrinthically = "labyrinthically"
+        case martyrization = "martyrization"
+        case mispolicy = "mispolicy"
+        case multipara = "multipara"
+        case nazirite = "Nazirite"
+        case nonbookish = "nonbookish"
+        case possessorial = "possessorial"
+        case shamed = "shamed"
+        case shelfworn = "shelfworn"
+        case stagnum = "stagnum"
+        case those = "Those"
+        case undecimal = "undecimal"
+    }
+
+    init(akroasis: Int?, antiphonical: Int?, basebred: Int?, catharticalness: Double?, chirotherium: Int?, conductometric: Int?, disdiapason: String?, ensilation: Int?, eyebolt: Int?, fistulated: Int?, heteropod: Int?, homocerc: Bool?, juniperus: Int?, labyrinthically: Int?, martyrization: Int?, mispolicy: Int?, multipara: Int?, nazirite: Int?, nonbookish: JSONNull?, possessorial: Int?, shamed: Int?, shelfworn: Int?, stagnum: Int?, those: Int?, undecimal: Int?) {
+        self.akroasis = akroasis
+        self.antiphonical = antiphonical
+        self.basebred = basebred
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.conductometric = conductometric
+        self.disdiapason = disdiapason
+        self.ensilation = ensilation
+        self.eyebolt = eyebolt
+        self.fistulated = fistulated
+        self.heteropod = heteropod
+        self.homocerc = homocerc
+        self.juniperus = juniperus
+        self.labyrinthically = labyrinthically
+        self.martyrization = martyrization
+        self.mispolicy = mispolicy
+        self.multipara = multipara
+        self.nazirite = nazirite
+        self.nonbookish = nonbookish
+        self.possessorial = possessorial
+        self.shamed = shamed
+        self.shelfworn = shelfworn
+        self.stagnum = stagnum
+        self.those = those
+        self.undecimal = undecimal
+    }
+}
+
+// MARK: Amphithyron convenience initializers and mutators
+
+extension Amphithyron {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Amphithyron.self, from: data)
+        self.init(akroasis: me.akroasis, antiphonical: me.antiphonical, basebred: me.basebred, catharticalness: me.catharticalness, chirotherium: me.chirotherium, conductometric: me.conductometric, disdiapason: me.disdiapason, ensilation: me.ensilation, eyebolt: me.eyebolt, fistulated: me.fistulated, heteropod: me.heteropod, homocerc: me.homocerc, juniperus: me.juniperus, labyrinthically: me.labyrinthically, martyrization: me.martyrization, mispolicy: me.mispolicy, multipara: me.multipara, nazirite: me.nazirite, nonbookish: me.nonbookish, possessorial: me.possessorial, shamed: me.shamed, shelfworn: me.shelfworn, stagnum: me.stagnum, those: me.those, undecimal: me.undecimal)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        akroasis: Int?? = nil,
+        antiphonical: Int?? = nil,
+        basebred: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        conductometric: Int?? = nil,
+        disdiapason: String?? = nil,
+        ensilation: Int?? = nil,
+        eyebolt: Int?? = nil,
+        fistulated: Int?? = nil,
+        heteropod: Int?? = nil,
+        homocerc: Bool?? = nil,
+        juniperus: Int?? = nil,
+        labyrinthically: Int?? = nil,
+        martyrization: Int?? = nil,
+        mispolicy: Int?? = nil,
+        multipara: Int?? = nil,
+        nazirite: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        possessorial: Int?? = nil,
+        shamed: Int?? = nil,
+        shelfworn: Int?? = nil,
+        stagnum: Int?? = nil,
+        those: Int?? = nil,
+        undecimal: Int?? = nil
+    ) -> Amphithyron {
+        return Amphithyron(
+            akroasis: akroasis ?? self.akroasis,
+            antiphonical: antiphonical ?? self.antiphonical,
+            basebred: basebred ?? self.basebred,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            conductometric: conductometric ?? self.conductometric,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ensilation: ensilation ?? self.ensilation,
+            eyebolt: eyebolt ?? self.eyebolt,
+            fistulated: fistulated ?? self.fistulated,
+            heteropod: heteropod ?? self.heteropod,
+            homocerc: homocerc ?? self.homocerc,
+            juniperus: juniperus ?? self.juniperus,
+            labyrinthically: labyrinthically ?? self.labyrinthically,
+            martyrization: martyrization ?? self.martyrization,
+            mispolicy: mispolicy ?? self.mispolicy,
+            multipara: multipara ?? self.multipara,
+            nazirite: nazirite ?? self.nazirite,
+            nonbookish: nonbookish ?? self.nonbookish,
+            possessorial: possessorial ?? self.possessorial,
+            shamed: shamed ?? self.shamed,
+            shelfworn: shelfworn ?? self.shelfworn,
+            stagnum: stagnum ?? self.stagnum,
+            those: those ?? self.those,
+            undecimal: undecimal ?? self.undecimal
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum AnkeeElement: Codable {
+    case ankeeClass(AnkeeClass)
+    case integer(Int)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(AnkeeClass.self) {
+            self = .ankeeClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(AnkeeElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for AnkeeElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .ankeeClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - AnkeeClass
+final class AnkeeClass: Codable {
+    let anomoean: JSONNull?
+    let barleyhood: JSONNull?
+    let befriender: JSONNull?
+    let brutishness: JSONNull?
+    let cephalalgy: JSONNull?
+    let cirurgian: JSONNull?
+    let conventionally: JSONNull?
+    let jackshay: JSONNull?
+    let milammeter: JSONNull?
+    let naja: JSONNull?
+    let ombrological: JSONNull?
+    let phonasthenia: JSONNull?
+    let retrievableness: JSONNull?
+    let snakily: JSONNull?
+    let swot: JSONNull?
+    let tartlet: JSONNull?
+    let thiofuran: JSONNull?
+    let tracheophone: JSONNull?
+    let tuglike: JSONNull?
+    let unscratchingly: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case anomoean = "Anomoean"
+        case barleyhood = "barleyhood"
+        case befriender = "befriender"
+        case brutishness = "brutishness"
+        case cephalalgy = "cephalalgy"
+        case cirurgian = "cirurgian"
+        case conventionally = "conventionally"
+        case jackshay = "jackshay"
+        case milammeter = "milammeter"
+        case naja = "Naja"
+        case ombrological = "ombrological"
+        case phonasthenia = "phonasthenia"
+        case retrievableness = "retrievableness"
+        case snakily = "snakily"
+        case swot = "swot"
+        case tartlet = "tartlet"
+        case thiofuran = "thiofuran"
+        case tracheophone = "tracheophone"
+        case tuglike = "tuglike"
+        case unscratchingly = "unscratchingly"
+    }
+
+    init(anomoean: JSONNull?, barleyhood: JSONNull?, befriender: JSONNull?, brutishness: JSONNull?, cephalalgy: JSONNull?, cirurgian: JSONNull?, conventionally: JSONNull?, jackshay: JSONNull?, milammeter: JSONNull?, naja: JSONNull?, ombrological: JSONNull?, phonasthenia: JSONNull?, retrievableness: JSONNull?, snakily: JSONNull?, swot: JSONNull?, tartlet: JSONNull?, thiofuran: JSONNull?, tracheophone: JSONNull?, tuglike: JSONNull?, unscratchingly: JSONNull?) {
+        self.anomoean = anomoean
+        self.barleyhood = barleyhood
+        self.befriender = befriender
+        self.brutishness = brutishness
+        self.cephalalgy = cephalalgy
+        self.cirurgian = cirurgian
+        self.conventionally = conventionally
+        self.jackshay = jackshay
+        self.milammeter = milammeter
+        self.naja = naja
+        self.ombrological = ombrological
+        self.phonasthenia = phonasthenia
+        self.retrievableness = retrievableness
+        self.snakily = snakily
+        self.swot = swot
+        self.tartlet = tartlet
+        self.thiofuran = thiofuran
+        self.tracheophone = tracheophone
+        self.tuglike = tuglike
+        self.unscratchingly = unscratchingly
+    }
+}
+
+// MARK: AnkeeClass convenience initializers and mutators
+
+extension AnkeeClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(AnkeeClass.self, from: data)
+        self.init(anomoean: me.anomoean, barleyhood: me.barleyhood, befriender: me.befriender, brutishness: me.brutishness, cephalalgy: me.cephalalgy, cirurgian: me.cirurgian, conventionally: me.conventionally, jackshay: me.jackshay, milammeter: me.milammeter, naja: me.naja, ombrological: me.ombrological, phonasthenia: me.phonasthenia, retrievableness: me.retrievableness, snakily: me.snakily, swot: me.swot, tartlet: me.tartlet, thiofuran: me.thiofuran, tracheophone: me.tracheophone, tuglike: me.tuglike, unscratchingly: me.unscratchingly)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        anomoean: JSONNull?? = nil,
+        barleyhood: JSONNull?? = nil,
+        befriender: JSONNull?? = nil,
+        brutishness: JSONNull?? = nil,
+        cephalalgy: JSONNull?? = nil,
+        cirurgian: JSONNull?? = nil,
+        conventionally: JSONNull?? = nil,
+        jackshay: JSONNull?? = nil,
+        milammeter: JSONNull?? = nil,
+        naja: JSONNull?? = nil,
+        ombrological: JSONNull?? = nil,
+        phonasthenia: JSONNull?? = nil,
+        retrievableness: JSONNull?? = nil,
+        snakily: JSONNull?? = nil,
+        swot: JSONNull?? = nil,
+        tartlet: JSONNull?? = nil,
+        thiofuran: JSONNull?? = nil,
+        tracheophone: JSONNull?? = nil,
+        tuglike: JSONNull?? = nil,
+        unscratchingly: JSONNull?? = nil
+    ) -> AnkeeClass {
+        return AnkeeClass(
+            anomoean: anomoean ?? self.anomoean,
+            barleyhood: barleyhood ?? self.barleyhood,
+            befriender: befriender ?? self.befriender,
+            brutishness: brutishness ?? self.brutishness,
+            cephalalgy: cephalalgy ?? self.cephalalgy,
+            cirurgian: cirurgian ?? self.cirurgian,
+            conventionally: conventionally ?? self.conventionally,
+            jackshay: jackshay ?? self.jackshay,
+            milammeter: milammeter ?? self.milammeter,
+            naja: naja ?? self.naja,
+            ombrological: ombrological ?? self.ombrological,
+            phonasthenia: phonasthenia ?? self.phonasthenia,
+            retrievableness: retrievableness ?? self.retrievableness,
+            snakily: snakily ?? self.snakily,
+            swot: swot ?? self.swot,
+            tartlet: tartlet ?? self.tartlet,
+            thiofuran: thiofuran ?? self.thiofuran,
+            tracheophone: tracheophone ?? self.tracheophone,
+            tuglike: tuglike ?? self.tuglike,
+            unscratchingly: unscratchingly ?? self.unscratchingly
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum AnsarieElement: Codable {
+    case ansarieClass(AnsarieClass)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(AnsarieClass.self) {
+            self = .ansarieClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(AnsarieElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for AnsarieElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .ansarieClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - AnsarieClass
+final class AnsarieClass: Codable {
+    let accension: JSONNull?
+    let alida: JSONNull?
+    let asteria: JSONNull?
+    let beriberic: JSONNull?
+    let edgebone: JSONNull?
+    let gastrodialysis: JSONNull?
+    let geographic: JSONNull?
+    let ictonyx: JSONNull?
+    let metrocele: JSONNull?
+    let misgraft: JSONNull?
+    let monteith: JSONNull?
+    let notcher: JSONNull?
+    let prorestriction: JSONNull?
+    let ramist: JSONNull?
+    let throatlet: JSONNull?
+    let unfair: JSONNull?
+    let unsynonymous: JSONNull?
+    let water: JSONNull?
+    let zestfully: JSONNull?
+    let zincic: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case accension = "accension"
+        case alida = "Alida"
+        case asteria = "asteria"
+        case beriberic = "beriberic"
+        case edgebone = "edgebone"
+        case gastrodialysis = "gastrodialysis"
+        case geographic = "geographic"
+        case ictonyx = "Ictonyx"
+        case metrocele = "metrocele"
+        case misgraft = "misgraft"
+        case monteith = "monteith"
+        case notcher = "notcher"
+        case prorestriction = "prorestriction"
+        case ramist = "Ramist"
+        case throatlet = "throatlet"
+        case unfair = "unfair"
+        case unsynonymous = "unsynonymous"
+        case water = "water"
+        case zestfully = "zestfully"
+        case zincic = "zincic"
+    }
+
+    init(accension: JSONNull?, alida: JSONNull?, asteria: JSONNull?, beriberic: JSONNull?, edgebone: JSONNull?, gastrodialysis: JSONNull?, geographic: JSONNull?, ictonyx: JSONNull?, metrocele: JSONNull?, misgraft: JSONNull?, monteith: JSONNull?, notcher: JSONNull?, prorestriction: JSONNull?, ramist: JSONNull?, throatlet: JSONNull?, unfair: JSONNull?, unsynonymous: JSONNull?, water: JSONNull?, zestfully: JSONNull?, zincic: JSONNull?) {
+        self.accension = accension
+        self.alida = alida
+        self.asteria = asteria
+        self.beriberic = beriberic
+        self.edgebone = edgebone
+        self.gastrodialysis = gastrodialysis
+        self.geographic = geographic
+        self.ictonyx = ictonyx
+        self.metrocele = metrocele
+        self.misgraft = misgraft
+        self.monteith = monteith
+        self.notcher = notcher
+        self.prorestriction = prorestriction
+        self.ramist = ramist
+        self.throatlet = throatlet
+        self.unfair = unfair
+        self.unsynonymous = unsynonymous
+        self.water = water
+        self.zestfully = zestfully
+        self.zincic = zincic
+    }
+}
+
+// MARK: AnsarieClass convenience initializers and mutators
+
+extension AnsarieClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(AnsarieClass.self, from: data)
+        self.init(accension: me.accension, alida: me.alida, asteria: me.asteria, beriberic: me.beriberic, edgebone: me.edgebone, gastrodialysis: me.gastrodialysis, geographic: me.geographic, ictonyx: me.ictonyx, metrocele: me.metrocele, misgraft: me.misgraft, monteith: me.monteith, notcher: me.notcher, prorestriction: me.prorestriction, ramist: me.ramist, throatlet: me.throatlet, unfair: me.unfair, unsynonymous: me.unsynonymous, water: me.water, zestfully: me.zestfully, zincic: me.zincic)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        accension: JSONNull?? = nil,
+        alida: JSONNull?? = nil,
+        asteria: JSONNull?? = nil,
+        beriberic: JSONNull?? = nil,
+        edgebone: JSONNull?? = nil,
+        gastrodialysis: JSONNull?? = nil,
+        geographic: JSONNull?? = nil,
+        ictonyx: JSONNull?? = nil,
+        metrocele: JSONNull?? = nil,
+        misgraft: JSONNull?? = nil,
+        monteith: JSONNull?? = nil,
+        notcher: JSONNull?? = nil,
+        prorestriction: JSONNull?? = nil,
+        ramist: JSONNull?? = nil,
+        throatlet: JSONNull?? = nil,
+        unfair: JSONNull?? = nil,
+        unsynonymous: JSONNull?? = nil,
+        water: JSONNull?? = nil,
+        zestfully: JSONNull?? = nil,
+        zincic: JSONNull?? = nil
+    ) -> AnsarieClass {
+        return AnsarieClass(
+            accension: accension ?? self.accension,
+            alida: alida ?? self.alida,
+            asteria: asteria ?? self.asteria,
+            beriberic: beriberic ?? self.beriberic,
+            edgebone: edgebone ?? self.edgebone,
+            gastrodialysis: gastrodialysis ?? self.gastrodialysis,
+            geographic: geographic ?? self.geographic,
+            ictonyx: ictonyx ?? self.ictonyx,
+            metrocele: metrocele ?? self.metrocele,
+            misgraft: misgraft ?? self.misgraft,
+            monteith: monteith ?? self.monteith,
+            notcher: notcher ?? self.notcher,
+            prorestriction: prorestriction ?? self.prorestriction,
+            ramist: ramist ?? self.ramist,
+            throatlet: throatlet ?? self.throatlet,
+            unfair: unfair ?? self.unfair,
+            unsynonymous: unsynonymous ?? self.unsynonymous,
+            water: water ?? self.water,
+            zestfully: zestfully ?? self.zestfully,
+            zincic: zincic ?? self.zincic
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Aphasia: Codable {
+    case integer(Int)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Aphasia.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Aphasia"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Asprawl: Codable {
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Asprawl.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Asprawl"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Bedesman: Codable {
+    case bool(Bool)
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Bedesman.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Bedesman"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Belard: Codable {
+    case double(Double)
+    case integerArray([Int])
+    case rebecca(Rebecca)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Belard.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Belard"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Bocking: Codable {
+    case bool(Bool)
+    case integerArray([Int])
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Bocking.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Bocking"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Brawlingly: Codable {
+    case nullArray([JSONNull?])
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Brawlingly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Brawlingly"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Brookie: Codable {
+    case integerArray([Int])
+    case rebecca(Rebecca)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Brookie.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Brookie"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Bumboatman: Codable {
+    case nullArray([JSONNull?])
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Bumboatman.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Bumboatman"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Calaverite: Codable {
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Calaverite.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Calaverite"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Catallactic: Codable {
+    case bool(Bool)
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Catallactic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Catallactic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Cemental: Codable {
+    case double(Double)
+    case integerArray([Int])
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Cemental.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Cemental"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum ChytridiaceaeElement: Codable {
+    case bool(Bool)
+    case chytridiaceaeClass(ChytridiaceaeClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(ChytridiaceaeClass.self) {
+            self = .chytridiaceaeClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(ChytridiaceaeElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for ChytridiaceaeElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .chytridiaceaeClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - ChytridiaceaeClass
+final class ChytridiaceaeClass: Codable {
+    let batidaceae: JSONNull?
+    let brechites: JSONNull?
+    let codespairer: JSONNull?
+    let emery: JSONNull?
+    let enervative: JSONNull?
+    let excriminate: JSONNull?
+    let goshenite: JSONNull?
+    let grime: JSONNull?
+    let gritten: JSONNull?
+    let hectorly: JSONNull?
+    let intermediation: JSONNull?
+    let meeterly: JSONNull?
+    let narraganset: JSONNull?
+    let onymatic: JSONNull?
+    let paddlecock: JSONNull?
+    let thana: JSONNull?
+    let thornily: JSONNull?
+    let uckia: JSONNull?
+    let unmettle: JSONNull?
+    let vorticellid: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case batidaceae = "Batidaceae"
+        case brechites = "Brechites"
+        case codespairer = "codespairer"
+        case emery = "Emery"
+        case enervative = "enervative"
+        case excriminate = "excriminate"
+        case goshenite = "goshenite"
+        case grime = "grime"
+        case gritten = "gritten"
+        case hectorly = "hectorly"
+        case intermediation = "intermediation"
+        case meeterly = "meeterly"
+        case narraganset = "Narraganset"
+        case onymatic = "onymatic"
+        case paddlecock = "paddlecock"
+        case thana = "thana"
+        case thornily = "thornily"
+        case uckia = "uckia"
+        case unmettle = "unmettle"
+        case vorticellid = "vorticellid"
+    }
+
+    init(batidaceae: JSONNull?, brechites: JSONNull?, codespairer: JSONNull?, emery: JSONNull?, enervative: JSONNull?, excriminate: JSONNull?, goshenite: JSONNull?, grime: JSONNull?, gritten: JSONNull?, hectorly: JSONNull?, intermediation: JSONNull?, meeterly: JSONNull?, narraganset: JSONNull?, onymatic: JSONNull?, paddlecock: JSONNull?, thana: JSONNull?, thornily: JSONNull?, uckia: JSONNull?, unmettle: JSONNull?, vorticellid: JSONNull?) {
+        self.batidaceae = batidaceae
+        self.brechites = brechites
+        self.codespairer = codespairer
+        self.emery = emery
+        self.enervative = enervative
+        self.excriminate = excriminate
+        self.goshenite = goshenite
+        self.grime = grime
+        self.gritten = gritten
+        self.hectorly = hectorly
+        self.intermediation = intermediation
+        self.meeterly = meeterly
+        self.narraganset = narraganset
+        self.onymatic = onymatic
+        self.paddlecock = paddlecock
+        self.thana = thana
+        self.thornily = thornily
+        self.uckia = uckia
+        self.unmettle = unmettle
+        self.vorticellid = vorticellid
+    }
+}
+
+// MARK: ChytridiaceaeClass convenience initializers and mutators
+
+extension ChytridiaceaeClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(ChytridiaceaeClass.self, from: data)
+        self.init(batidaceae: me.batidaceae, brechites: me.brechites, codespairer: me.codespairer, emery: me.emery, enervative: me.enervative, excriminate: me.excriminate, goshenite: me.goshenite, grime: me.grime, gritten: me.gritten, hectorly: me.hectorly, intermediation: me.intermediation, meeterly: me.meeterly, narraganset: me.narraganset, onymatic: me.onymatic, paddlecock: me.paddlecock, thana: me.thana, thornily: me.thornily, uckia: me.uckia, unmettle: me.unmettle, vorticellid: me.vorticellid)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        batidaceae: JSONNull?? = nil,
+        brechites: JSONNull?? = nil,
+        codespairer: JSONNull?? = nil,
+        emery: JSONNull?? = nil,
+        enervative: JSONNull?? = nil,
+        excriminate: JSONNull?? = nil,
+        goshenite: JSONNull?? = nil,
+        grime: JSONNull?? = nil,
+        gritten: JSONNull?? = nil,
+        hectorly: JSONNull?? = nil,
+        intermediation: JSONNull?? = nil,
+        meeterly: JSONNull?? = nil,
+        narraganset: JSONNull?? = nil,
+        onymatic: JSONNull?? = nil,
+        paddlecock: JSONNull?? = nil,
+        thana: JSONNull?? = nil,
+        thornily: JSONNull?? = nil,
+        uckia: JSONNull?? = nil,
+        unmettle: JSONNull?? = nil,
+        vorticellid: JSONNull?? = nil
+    ) -> ChytridiaceaeClass {
+        return ChytridiaceaeClass(
+            batidaceae: batidaceae ?? self.batidaceae,
+            brechites: brechites ?? self.brechites,
+            codespairer: codespairer ?? self.codespairer,
+            emery: emery ?? self.emery,
+            enervative: enervative ?? self.enervative,
+            excriminate: excriminate ?? self.excriminate,
+            goshenite: goshenite ?? self.goshenite,
+            grime: grime ?? self.grime,
+            gritten: gritten ?? self.gritten,
+            hectorly: hectorly ?? self.hectorly,
+            intermediation: intermediation ?? self.intermediation,
+            meeterly: meeterly ?? self.meeterly,
+            narraganset: narraganset ?? self.narraganset,
+            onymatic: onymatic ?? self.onymatic,
+            paddlecock: paddlecock ?? self.paddlecock,
+            thana: thana ?? self.thana,
+            thornily: thornily ?? self.thornily,
+            uckia: uckia ?? self.uckia,
+            unmettle: unmettle ?? self.unmettle,
+            vorticellid: vorticellid ?? self.vorticellid
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum DiscordiaElement: Codable {
+    case discordiaClass(DiscordiaClass)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(DiscordiaClass.self) {
+            self = .discordiaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(DiscordiaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for DiscordiaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .discordiaClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - DiscordiaClass
+final class DiscordiaClass: Codable {
+    let altaic: Int?
+    let amoristic: Int?
+    let blennophthalmia: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disciplinability: Int?
+    let disdiapason: String?
+    let goofer: Int?
+    let homocerc: Bool?
+    let laryngograph: Int?
+    let leucitis: Int?
+    let lymphocyst: Int?
+    let microcosmology: Int?
+    let nauseation: Int?
+    let nonbookish: JSONNull?
+    let patarin: Int?
+    let preliberal: Int?
+    let prettifier: Int?
+    let rangework: Int?
+    let redient: Int?
+    let subfusiform: Int?
+    let suicidical: Int?
+    let swow: Int?
+    let wastrel: Int?
+    let wingle: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case altaic = "Altaic"
+        case amoristic = "amoristic"
+        case blennophthalmia = "blennophthalmia"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disciplinability = "disciplinability"
+        case disdiapason = "disdiapason"
+        case goofer = "goofer"
+        case homocerc = "homocerc"
+        case laryngograph = "laryngograph"
+        case leucitis = "leucitis"
+        case lymphocyst = "lymphocyst"
+        case microcosmology = "microcosmology"
+        case nauseation = "nauseation"
+        case nonbookish = "nonbookish"
+        case patarin = "Patarin"
+        case preliberal = "preliberal"
+        case prettifier = "prettifier"
+        case rangework = "rangework"
+        case redient = "redient"
+        case subfusiform = "subfusiform"
+        case suicidical = "suicidical"
+        case swow = "swow"
+        case wastrel = "wastrel"
+        case wingle = "wingle"
+    }
+
+    init(altaic: Int?, amoristic: Int?, blennophthalmia: Int?, catharticalness: Double?, chirotherium: Int?, disciplinability: Int?, disdiapason: String?, goofer: Int?, homocerc: Bool?, laryngograph: Int?, leucitis: Int?, lymphocyst: Int?, microcosmology: Int?, nauseation: Int?, nonbookish: JSONNull?, patarin: Int?, preliberal: Int?, prettifier: Int?, rangework: Int?, redient: Int?, subfusiform: Int?, suicidical: Int?, swow: Int?, wastrel: Int?, wingle: Int?) {
+        self.altaic = altaic
+        self.amoristic = amoristic
+        self.blennophthalmia = blennophthalmia
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disciplinability = disciplinability
+        self.disdiapason = disdiapason
+        self.goofer = goofer
+        self.homocerc = homocerc
+        self.laryngograph = laryngograph
+        self.leucitis = leucitis
+        self.lymphocyst = lymphocyst
+        self.microcosmology = microcosmology
+        self.nauseation = nauseation
+        self.nonbookish = nonbookish
+        self.patarin = patarin
+        self.preliberal = preliberal
+        self.prettifier = prettifier
+        self.rangework = rangework
+        self.redient = redient
+        self.subfusiform = subfusiform
+        self.suicidical = suicidical
+        self.swow = swow
+        self.wastrel = wastrel
+        self.wingle = wingle
+    }
+}
+
+// MARK: DiscordiaClass convenience initializers and mutators
+
+extension DiscordiaClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(DiscordiaClass.self, from: data)
+        self.init(altaic: me.altaic, amoristic: me.amoristic, blennophthalmia: me.blennophthalmia, catharticalness: me.catharticalness, chirotherium: me.chirotherium, disciplinability: me.disciplinability, disdiapason: me.disdiapason, goofer: me.goofer, homocerc: me.homocerc, laryngograph: me.laryngograph, leucitis: me.leucitis, lymphocyst: me.lymphocyst, microcosmology: me.microcosmology, nauseation: me.nauseation, nonbookish: me.nonbookish, patarin: me.patarin, preliberal: me.preliberal, prettifier: me.prettifier, rangework: me.rangework, redient: me.redient, subfusiform: me.subfusiform, suicidical: me.suicidical, swow: me.swow, wastrel: me.wastrel, wingle: me.wingle)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        altaic: Int?? = nil,
+        amoristic: Int?? = nil,
+        blennophthalmia: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disciplinability: Int?? = nil,
+        disdiapason: String?? = nil,
+        goofer: Int?? = nil,
+        homocerc: Bool?? = nil,
+        laryngograph: Int?? = nil,
+        leucitis: Int?? = nil,
+        lymphocyst: Int?? = nil,
+        microcosmology: Int?? = nil,
+        nauseation: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        patarin: Int?? = nil,
+        preliberal: Int?? = nil,
+        prettifier: Int?? = nil,
+        rangework: Int?? = nil,
+        redient: Int?? = nil,
+        subfusiform: Int?? = nil,
+        suicidical: Int?? = nil,
+        swow: Int?? = nil,
+        wastrel: Int?? = nil,
+        wingle: Int?? = nil
+    ) -> DiscordiaClass {
+        return DiscordiaClass(
+            altaic: altaic ?? self.altaic,
+            amoristic: amoristic ?? self.amoristic,
+            blennophthalmia: blennophthalmia ?? self.blennophthalmia,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disciplinability: disciplinability ?? self.disciplinability,
+            disdiapason: disdiapason ?? self.disdiapason,
+            goofer: goofer ?? self.goofer,
+            homocerc: homocerc ?? self.homocerc,
+            laryngograph: laryngograph ?? self.laryngograph,
+            leucitis: leucitis ?? self.leucitis,
+            lymphocyst: lymphocyst ?? self.lymphocyst,
+            microcosmology: microcosmology ?? self.microcosmology,
+            nauseation: nauseation ?? self.nauseation,
+            nonbookish: nonbookish ?? self.nonbookish,
+            patarin: patarin ?? self.patarin,
+            preliberal: preliberal ?? self.preliberal,
+            prettifier: prettifier ?? self.prettifier,
+            rangework: rangework ?? self.rangework,
+            redient: redient ?? self.redient,
+            subfusiform: subfusiform ?? self.subfusiform,
+            suicidical: suicidical ?? self.suicidical,
+            swow: swow ?? self.swow,
+            wastrel: wastrel ?? self.wastrel,
+            wingle: wingle ?? self.wingle
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Endomyce: Codable {
+    case integer(Int)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Endomyce.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Endomyce"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Epinephelidae: Codable {
+    case bool(Bool)
+    case integer(Int)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Epinephelidae.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Epinephelidae"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Eupatorium: Codable {
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Eupatorium.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Eupatorium"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum GryphosaurusElement: Codable {
+    case gryphosaurusClass(GryphosaurusClass)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(GryphosaurusClass.self) {
+            self = .gryphosaurusClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(GryphosaurusElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for GryphosaurusElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .gryphosaurusClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - GryphosaurusClass
+final class GryphosaurusClass: Codable {
+    let amissibility: JSONNull?
+    let burushaski: JSONNull?
+    let citronin: JSONNull?
+    let coplaintiff: JSONNull?
+    let disquisitionary: JSONNull?
+    let enoplan: JSONNull?
+    let faintness: JSONNull?
+    let hebetomy: JSONNull?
+    let islandry: JSONNull?
+    let lameduck: JSONNull?
+    let overbattle: JSONNull?
+    let overinterested: JSONNull?
+    let phrenologic: JSONNull?
+    let rainband: JSONNull?
+    let shiningly: JSONNull?
+    let stamineous: JSONNull?
+    let subscapularis: JSONNull?
+    let tahami: JSONNull?
+    let undaubed: JSONNull?
+    let underntime: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amissibility = "amissibility"
+        case burushaski = "Burushaski"
+        case citronin = "citronin"
+        case coplaintiff = "coplaintiff"
+        case disquisitionary = "disquisitionary"
+        case enoplan = "enoplan"
+        case faintness = "faintness"
+        case hebetomy = "hebetomy"
+        case islandry = "islandry"
+        case lameduck = "lameduck"
+        case overbattle = "overbattle"
+        case overinterested = "overinterested"
+        case phrenologic = "phrenologic"
+        case rainband = "rainband"
+        case shiningly = "shiningly"
+        case stamineous = "stamineous"
+        case subscapularis = "subscapularis"
+        case tahami = "Tahami"
+        case undaubed = "undaubed"
+        case underntime = "underntime"
+    }
+
+    init(amissibility: JSONNull?, burushaski: JSONNull?, citronin: JSONNull?, coplaintiff: JSONNull?, disquisitionary: JSONNull?, enoplan: JSONNull?, faintness: JSONNull?, hebetomy: JSONNull?, islandry: JSONNull?, lameduck: JSONNull?, overbattle: JSONNull?, overinterested: JSONNull?, phrenologic: JSONNull?, rainband: JSONNull?, shiningly: JSONNull?, stamineous: JSONNull?, subscapularis: JSONNull?, tahami: JSONNull?, undaubed: JSONNull?, underntime: JSONNull?) {
+        self.amissibility = amissibility
+        self.burushaski = burushaski
+        self.citronin = citronin
+        self.coplaintiff = coplaintiff
+        self.disquisitionary = disquisitionary
+        self.enoplan = enoplan
+        self.faintness = faintness
+        self.hebetomy = hebetomy
+        self.islandry = islandry
+        self.lameduck = lameduck
+        self.overbattle = overbattle
+        self.overinterested = overinterested
+        self.phrenologic = phrenologic
+        self.rainband = rainband
+        self.shiningly = shiningly
+        self.stamineous = stamineous
+        self.subscapularis = subscapularis
+        self.tahami = tahami
+        self.undaubed = undaubed
+        self.underntime = underntime
+    }
+}
+
+// MARK: GryphosaurusClass convenience initializers and mutators
+
+extension GryphosaurusClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(GryphosaurusClass.self, from: data)
+        self.init(amissibility: me.amissibility, burushaski: me.burushaski, citronin: me.citronin, coplaintiff: me.coplaintiff, disquisitionary: me.disquisitionary, enoplan: me.enoplan, faintness: me.faintness, hebetomy: me.hebetomy, islandry: me.islandry, lameduck: me.lameduck, overbattle: me.overbattle, overinterested: me.overinterested, phrenologic: me.phrenologic, rainband: me.rainband, shiningly: me.shiningly, stamineous: me.stamineous, subscapularis: me.subscapularis, tahami: me.tahami, undaubed: me.undaubed, underntime: me.underntime)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amissibility: JSONNull?? = nil,
+        burushaski: JSONNull?? = nil,
+        citronin: JSONNull?? = nil,
+        coplaintiff: JSONNull?? = nil,
+        disquisitionary: JSONNull?? = nil,
+        enoplan: JSONNull?? = nil,
+        faintness: JSONNull?? = nil,
+        hebetomy: JSONNull?? = nil,
+        islandry: JSONNull?? = nil,
+        lameduck: JSONNull?? = nil,
+        overbattle: JSONNull?? = nil,
+        overinterested: JSONNull?? = nil,
+        phrenologic: JSONNull?? = nil,
+        rainband: JSONNull?? = nil,
+        shiningly: JSONNull?? = nil,
+        stamineous: JSONNull?? = nil,
+        subscapularis: JSONNull?? = nil,
+        tahami: JSONNull?? = nil,
+        undaubed: JSONNull?? = nil,
+        underntime: JSONNull?? = nil
+    ) -> GryphosaurusClass {
+        return GryphosaurusClass(
+            amissibility: amissibility ?? self.amissibility,
+            burushaski: burushaski ?? self.burushaski,
+            citronin: citronin ?? self.citronin,
+            coplaintiff: coplaintiff ?? self.coplaintiff,
+            disquisitionary: disquisitionary ?? self.disquisitionary,
+            enoplan: enoplan ?? self.enoplan,
+            faintness: faintness ?? self.faintness,
+            hebetomy: hebetomy ?? self.hebetomy,
+            islandry: islandry ?? self.islandry,
+            lameduck: lameduck ?? self.lameduck,
+            overbattle: overbattle ?? self.overbattle,
+            overinterested: overinterested ?? self.overinterested,
+            phrenologic: phrenologic ?? self.phrenologic,
+            rainband: rainband ?? self.rainband,
+            shiningly: shiningly ?? self.shiningly,
+            stamineous: stamineous ?? self.stamineous,
+            subscapularis: subscapularis ?? self.subscapularis,
+            tahami: tahami ?? self.tahami,
+            undaubed: undaubed ?? self.undaubed,
+            underntime: underntime ?? self.underntime
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Koryak: Codable {
+    case string(String)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Koryak.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Koryak"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .string(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum LaviniaElement: Codable {
+    case laviniaClass(LaviniaClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(LaviniaClass.self) {
+            self = .laviniaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(LaviniaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LaviniaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .laviniaClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - LaviniaClass
+final class LaviniaClass: Codable {
+    let agitable: Int?
+    let asininity: Int?
+    let benefiter: Int?
+    let bronzelike: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let cholesteatomatous: Int?
+    let deprivement: Int?
+    let disdiapason: String?
+    let flippantness: Int?
+    let fogproof: Int?
+    let homocerc: Bool?
+    let merrymeeting: Int?
+    let nonbookish: JSONNull?
+    let overcareful: Int?
+    let panaris: Int?
+    let preacceptance: Int?
+    let quinoxaline: Int?
+    let sig: Int?
+    let superconfusion: Int?
+    let tacana: Int?
+    let tillotter: Int?
+    let tranquillize: Int?
+    let unquestionable: Int?
+    let uproute: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case agitable = "agitable"
+        case asininity = "asininity"
+        case benefiter = "benefiter"
+        case bronzelike = "bronzelike"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case cholesteatomatous = "cholesteatomatous"
+        case deprivement = "deprivement"
+        case disdiapason = "disdiapason"
+        case flippantness = "flippantness"
+        case fogproof = "fogproof"
+        case homocerc = "homocerc"
+        case merrymeeting = "merrymeeting"
+        case nonbookish = "nonbookish"
+        case overcareful = "overcareful"
+        case panaris = "panaris"
+        case preacceptance = "preacceptance"
+        case quinoxaline = "quinoxaline"
+        case sig = "sig"
+        case superconfusion = "superconfusion"
+        case tacana = "Tacana"
+        case tillotter = "tillotter"
+        case tranquillize = "tranquillize"
+        case unquestionable = "unquestionable"
+        case uproute = "uproute"
+    }
+
+    init(agitable: Int?, asininity: Int?, benefiter: Int?, bronzelike: Int?, catharticalness: Double?, chirotherium: Int?, cholesteatomatous: Int?, deprivement: Int?, disdiapason: String?, flippantness: Int?, fogproof: Int?, homocerc: Bool?, merrymeeting: Int?, nonbookish: JSONNull?, overcareful: Int?, panaris: Int?, preacceptance: Int?, quinoxaline: Int?, sig: Int?, superconfusion: Int?, tacana: Int?, tillotter: Int?, tranquillize: Int?, unquestionable: Int?, uproute: Int?) {
+        self.agitable = agitable
+        self.asininity = asininity
+        self.benefiter = benefiter
+        self.bronzelike = bronzelike
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.cholesteatomatous = cholesteatomatous
+        self.deprivement = deprivement
+        self.disdiapason = disdiapason
+        self.flippantness = flippantness
+        self.fogproof = fogproof
+        self.homocerc = homocerc
+        self.merrymeeting = merrymeeting
+        self.nonbookish = nonbookish
+        self.overcareful = overcareful
+        self.panaris = panaris
+        self.preacceptance = preacceptance
+        self.quinoxaline = quinoxaline
+        self.sig = sig
+        self.superconfusion = superconfusion
+        self.tacana = tacana
+        self.tillotter = tillotter
+        self.tranquillize = tranquillize
+        self.unquestionable = unquestionable
+        self.uproute = uproute
+    }
+}
+
+// MARK: LaviniaClass convenience initializers and mutators
+
+extension LaviniaClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(LaviniaClass.self, from: data)
+        self.init(agitable: me.agitable, asininity: me.asininity, benefiter: me.benefiter, bronzelike: me.bronzelike, catharticalness: me.catharticalness, chirotherium: me.chirotherium, cholesteatomatous: me.cholesteatomatous, deprivement: me.deprivement, disdiapason: me.disdiapason, flippantness: me.flippantness, fogproof: me.fogproof, homocerc: me.homocerc, merrymeeting: me.merrymeeting, nonbookish: me.nonbookish, overcareful: me.overcareful, panaris: me.panaris, preacceptance: me.preacceptance, quinoxaline: me.quinoxaline, sig: me.sig, superconfusion: me.superconfusion, tacana: me.tacana, tillotter: me.tillotter, tranquillize: me.tranquillize, unquestionable: me.unquestionable, uproute: me.uproute)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        agitable: Int?? = nil,
+        asininity: Int?? = nil,
+        benefiter: Int?? = nil,
+        bronzelike: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        cholesteatomatous: Int?? = nil,
+        deprivement: Int?? = nil,
+        disdiapason: String?? = nil,
+        flippantness: Int?? = nil,
+        fogproof: Int?? = nil,
+        homocerc: Bool?? = nil,
+        merrymeeting: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        overcareful: Int?? = nil,
+        panaris: Int?? = nil,
+        preacceptance: Int?? = nil,
+        quinoxaline: Int?? = nil,
+        sig: Int?? = nil,
+        superconfusion: Int?? = nil,
+        tacana: Int?? = nil,
+        tillotter: Int?? = nil,
+        tranquillize: Int?? = nil,
+        unquestionable: Int?? = nil,
+        uproute: Int?? = nil
+    ) -> LaviniaClass {
+        return LaviniaClass(
+            agitable: agitable ?? self.agitable,
+            asininity: asininity ?? self.asininity,
+            benefiter: benefiter ?? self.benefiter,
+            bronzelike: bronzelike ?? self.bronzelike,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            cholesteatomatous: cholesteatomatous ?? self.cholesteatomatous,
+            deprivement: deprivement ?? self.deprivement,
+            disdiapason: disdiapason ?? self.disdiapason,
+            flippantness: flippantness ?? self.flippantness,
+            fogproof: fogproof ?? self.fogproof,
+            homocerc: homocerc ?? self.homocerc,
+            merrymeeting: merrymeeting ?? self.merrymeeting,
+            nonbookish: nonbookish ?? self.nonbookish,
+            overcareful: overcareful ?? self.overcareful,
+            panaris: panaris ?? self.panaris,
+            preacceptance: preacceptance ?? self.preacceptance,
+            quinoxaline: quinoxaline ?? self.quinoxaline,
+            sig: sig ?? self.sig,
+            superconfusion: superconfusion ?? self.superconfusion,
+            tacana: tacana ?? self.tacana,
+            tillotter: tillotter ?? self.tillotter,
+            tranquillize: tranquillize ?? self.tranquillize,
+            unquestionable: unquestionable ?? self.unquestionable,
+            uproute: uproute ?? self.uproute
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum OskarElement: Codable {
+    case integerArray([Int])
+    case oskarClass(OskarClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(OskarClass.self) {
+            self = .oskarClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(OskarElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for OskarElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .oskarClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - OskarClass
+final class OskarClass: Codable {
+    let acrobates: JSONNull?
+    let beanshooter: JSONNull?
+    let bearhound: JSONNull?
+    let cayuga: JSONNull?
+    let guarneri: JSONNull?
+    let hypochondriacism: JSONNull?
+    let indication: JSONNull?
+    let jaculative: JSONNull?
+    let nagana: JSONNull?
+    let netherlandish: JSONNull?
+    let noctivagous: JSONNull?
+    let nonphysiological: JSONNull?
+    let praxis: JSONNull?
+    let provision: JSONNull?
+    let subterhuman: JSONNull?
+    let sunlit: JSONNull?
+    let syncraniate: JSONNull?
+    let teachment: JSONNull?
+    let unmutinous: JSONNull?
+    let unstoppable: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acrobates = "Acrobates"
+        case beanshooter = "beanshooter"
+        case bearhound = "bearhound"
+        case cayuga = "Cayuga"
+        case guarneri = "guarneri"
+        case hypochondriacism = "hypochondriacism"
+        case indication = "indication"
+        case jaculative = "jaculative"
+        case nagana = "nagana"
+        case netherlandish = "Netherlandish"
+        case noctivagous = "noctivagous"
+        case nonphysiological = "nonphysiological"
+        case praxis = "praxis"
+        case provision = "provision"
+        case subterhuman = "subterhuman"
+        case sunlit = "sunlit"
+        case syncraniate = "syncraniate"
+        case teachment = "teachment"
+        case unmutinous = "unmutinous"
+        case unstoppable = "unstoppable"
+    }
+
+    init(acrobates: JSONNull?, beanshooter: JSONNull?, bearhound: JSONNull?, cayuga: JSONNull?, guarneri: JSONNull?, hypochondriacism: JSONNull?, indication: JSONNull?, jaculative: JSONNull?, nagana: JSONNull?, netherlandish: JSONNull?, noctivagous: JSONNull?, nonphysiological: JSONNull?, praxis: JSONNull?, provision: JSONNull?, subterhuman: JSONNull?, sunlit: JSONNull?, syncraniate: JSONNull?, teachment: JSONNull?, unmutinous: JSONNull?, unstoppable: JSONNull?) {
+        self.acrobates = acrobates
+        self.beanshooter = beanshooter
+        self.bearhound = bearhound
+        self.cayuga = cayuga
+        self.guarneri = guarneri
+        self.hypochondriacism = hypochondriacism
+        self.indication = indication
+        self.jaculative = jaculative
+        self.nagana = nagana
+        self.netherlandish = netherlandish
+        self.noctivagous = noctivagous
+        self.nonphysiological = nonphysiological
+        self.praxis = praxis
+        self.provision = provision
+        self.subterhuman = subterhuman
+        self.sunlit = sunlit
+        self.syncraniate = syncraniate
+        self.teachment = teachment
+        self.unmutinous = unmutinous
+        self.unstoppable = unstoppable
+    }
+}
+
+// MARK: OskarClass convenience initializers and mutators
+
+extension OskarClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(OskarClass.self, from: data)
+        self.init(acrobates: me.acrobates, beanshooter: me.beanshooter, bearhound: me.bearhound, cayuga: me.cayuga, guarneri: me.guarneri, hypochondriacism: me.hypochondriacism, indication: me.indication, jaculative: me.jaculative, nagana: me.nagana, netherlandish: me.netherlandish, noctivagous: me.noctivagous, nonphysiological: me.nonphysiological, praxis: me.praxis, provision: me.provision, subterhuman: me.subterhuman, sunlit: me.sunlit, syncraniate: me.syncraniate, teachment: me.teachment, unmutinous: me.unmutinous, unstoppable: me.unstoppable)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acrobates: JSONNull?? = nil,
+        beanshooter: JSONNull?? = nil,
+        bearhound: JSONNull?? = nil,
+        cayuga: JSONNull?? = nil,
+        guarneri: JSONNull?? = nil,
+        hypochondriacism: JSONNull?? = nil,
+        indication: JSONNull?? = nil,
+        jaculative: JSONNull?? = nil,
+        nagana: JSONNull?? = nil,
+        netherlandish: JSONNull?? = nil,
+        noctivagous: JSONNull?? = nil,
+        nonphysiological: JSONNull?? = nil,
+        praxis: JSONNull?? = nil,
+        provision: JSONNull?? = nil,
+        subterhuman: JSONNull?? = nil,
+        sunlit: JSONNull?? = nil,
+        syncraniate: JSONNull?? = nil,
+        teachment: JSONNull?? = nil,
+        unmutinous: JSONNull?? = nil,
+        unstoppable: JSONNull?? = nil
+    ) -> OskarClass {
+        return OskarClass(
+            acrobates: acrobates ?? self.acrobates,
+            beanshooter: beanshooter ?? self.beanshooter,
+            bearhound: bearhound ?? self.bearhound,
+            cayuga: cayuga ?? self.cayuga,
+            guarneri: guarneri ?? self.guarneri,
+            hypochondriacism: hypochondriacism ?? self.hypochondriacism,
+            indication: indication ?? self.indication,
+            jaculative: jaculative ?? self.jaculative,
+            nagana: nagana ?? self.nagana,
+            netherlandish: netherlandish ?? self.netherlandish,
+            noctivagous: noctivagous ?? self.noctivagous,
+            nonphysiological: nonphysiological ?? self.nonphysiological,
+            praxis: praxis ?? self.praxis,
+            provision: provision ?? self.provision,
+            subterhuman: subterhuman ?? self.subterhuman,
+            sunlit: sunlit ?? self.sunlit,
+            syncraniate: syncraniate ?? self.syncraniate,
+            teachment: teachment ?? self.teachment,
+            unmutinous: unmutinous ?? self.unmutinous,
+            unstoppable: unstoppable ?? self.unstoppable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum RebeccaElement: Codable {
+    case integer(Int)
+    case rebecca(Rebecca)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(RebeccaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for RebeccaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Rhomboganoidei: Codable {
+    case integerArray([Int])
+    case rebecca(Rebecca)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Rhomboganoidei.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Rhomboganoidei"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Ruellia: Codable {
+    case bool(Bool)
+    case rebecca(Rebecca)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Ruellia.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Ruellia"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum School: Codable {
+    case integer(Int)
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(School.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for School"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Shakespearolater: Codable {
+    case double(Double)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Shakespearolater.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Shakespearolater"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+final class JSONNull: Codable, Hashable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    public func hash(into hasher: inout Hasher) {
+        hasher.combine(0)
+    }
+
+    public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/head/swift/test/inputs/json/priority/combinations2.json/protocol-hashable--739b516c7897/quicktype.swift b/head/swift/test/inputs/json/priority/combinations2.json/protocol-hashable--739b516c7897/quicktype.swift
new file mode 100644
index 0000000..df9a33c
--- /dev/null
+++ b/head/swift/test/inputs/json/priority/combinations2.json/protocol-hashable--739b516c7897/quicktype.swift
@@ -0,0 +1,2668 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+import Foundation
+
+// MARK: - TopLevel
+struct TopLevel: Codable, Hashable {
+    let abranchiata: [Abranchiata]
+    let academe: [Academe]
+    let acquirable: [Acquirable]
+    let aerometry: [Aerometry]
+    let alexin: [Alexin]
+    let alleviate: [AlleviateElement]
+    let amaas: [Amaa]
+    let ambassage: [Ambassage]
+    let amphithyron: [Amphithyron?]
+    let andriana: [String?]
+    let ankee: [AnkeeElement]
+    let annihilator: [[String: Int?]?]
+    let annulose: JSONNull?
+    let ansarie: [AnsarieElement]
+    let aphasia: [Aphasia]
+    let asprawl: [Asprawl]
+    let attractive: [Bool?]
+    let barksome: [String: Int]
+    let bedesman: [Bedesman]
+    let belard: [Belard]
+    let bocking: [Bocking]
+    let brawlingly: [Brawlingly]
+    let brookie: [Brookie]
+    let bumboatman: [Bumboatman]
+    let bystreet: [JSONNull?]
+    let calaverite: [Calaverite]
+    let catallactic: [Catallactic]
+    let cemental: [Cemental]
+    let chytridiaceae: [ChytridiaceaeElement]
+    let discordia: [DiscordiaElement]
+    let endomyces: [Endomyce]
+    let epinephelidae: [Epinephelidae]
+    let eupatorium: [Eupatorium]
+    let gryphosaurus: [GryphosaurusElement]
+    let koryak: [Koryak]
+    let lavinia: [LaviniaElement]
+    let oskar: [OskarElement]
+    let rebecca: [RebeccaElement]
+    let rhomboganoidei: [Rhomboganoidei]
+    let rigsmal: Bool
+    let ruellia: [Ruellia]
+    let school: [School]
+    let shakespearolater: [Shakespearolater]
+    let svan: [Double]
+    let wayao: [String: Double]
+
+    enum CodingKeys: String, CodingKey {
+        case abranchiata = "Abranchiata"
+        case academe = "academe"
+        case acquirable = "acquirable"
+        case aerometry = "aerometry"
+        case alexin = "alexin"
+        case alleviate = "alleviate"
+        case amaas = "amaas"
+        case ambassage = "ambassage"
+        case amphithyron = "amphithyron"
+        case andriana = "Andriana"
+        case ankee = "ankee"
+        case annihilator = "annihilator"
+        case annulose = "annulose"
+        case ansarie = "Ansarie"
+        case aphasia = "aphasia"
+        case asprawl = "asprawl"
+        case attractive = "attractive"
+        case barksome = "barksome"
+        case bedesman = "bedesman"
+        case belard = "belard"
+        case bocking = "bocking"
+        case brawlingly = "brawlingly"
+        case brookie = "brookie"
+        case bumboatman = "bumboatman"
+        case bystreet = "bystreet"
+        case calaverite = "calaverite"
+        case catallactic = "catallactic"
+        case cemental = "cemental"
+        case chytridiaceae = "Chytridiaceae"
+        case discordia = "Discordia"
+        case endomyces = "Endomyces"
+        case epinephelidae = "Epinephelidae"
+        case eupatorium = "Eupatorium"
+        case gryphosaurus = "Gryphosaurus"
+        case koryak = "Koryak"
+        case lavinia = "Lavinia"
+        case oskar = "Oskar"
+        case rebecca = "Rebecca"
+        case rhomboganoidei = "Rhomboganoidei"
+        case rigsmal = "Rigsmal"
+        case ruellia = "Ruellia"
+        case school = "School"
+        case shakespearolater = "Shakespearolater"
+        case svan = "Svan"
+        case wayao = "Wayao"
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(TopLevel.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        abranchiata: [Abranchiata]? = nil,
+        academe: [Academe]? = nil,
+        acquirable: [Acquirable]? = nil,
+        aerometry: [Aerometry]? = nil,
+        alexin: [Alexin]? = nil,
+        alleviate: [AlleviateElement]? = nil,
+        amaas: [Amaa]? = nil,
+        ambassage: [Ambassage]? = nil,
+        amphithyron: [Amphithyron?]? = nil,
+        andriana: [String?]? = nil,
+        ankee: [AnkeeElement]? = nil,
+        annihilator: [[String: Int?]?]? = nil,
+        annulose: JSONNull?? = nil,
+        ansarie: [AnsarieElement]? = nil,
+        aphasia: [Aphasia]? = nil,
+        asprawl: [Asprawl]? = nil,
+        attractive: [Bool?]? = nil,
+        barksome: [String: Int]? = nil,
+        bedesman: [Bedesman]? = nil,
+        belard: [Belard]? = nil,
+        bocking: [Bocking]? = nil,
+        brawlingly: [Brawlingly]? = nil,
+        brookie: [Brookie]? = nil,
+        bumboatman: [Bumboatman]? = nil,
+        bystreet: [JSONNull?]? = nil,
+        calaverite: [Calaverite]? = nil,
+        catallactic: [Catallactic]? = nil,
+        cemental: [Cemental]? = nil,
+        chytridiaceae: [ChytridiaceaeElement]? = nil,
+        discordia: [DiscordiaElement]? = nil,
+        endomyces: [Endomyce]? = nil,
+        epinephelidae: [Epinephelidae]? = nil,
+        eupatorium: [Eupatorium]? = nil,
+        gryphosaurus: [GryphosaurusElement]? = nil,
+        koryak: [Koryak]? = nil,
+        lavinia: [LaviniaElement]? = nil,
+        oskar: [OskarElement]? = nil,
+        rebecca: [RebeccaElement]? = nil,
+        rhomboganoidei: [Rhomboganoidei]? = nil,
+        rigsmal: Bool? = nil,
+        ruellia: [Ruellia]? = nil,
+        school: [School]? = nil,
+        shakespearolater: [Shakespearolater]? = nil,
+        svan: [Double]? = nil,
+        wayao: [String: Double]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            abranchiata: abranchiata ?? self.abranchiata,
+            academe: academe ?? self.academe,
+            acquirable: acquirable ?? self.acquirable,
+            aerometry: aerometry ?? self.aerometry,
+            alexin: alexin ?? self.alexin,
+            alleviate: alleviate ?? self.alleviate,
+            amaas: amaas ?? self.amaas,
+            ambassage: ambassage ?? self.ambassage,
+            amphithyron: amphithyron ?? self.amphithyron,
+            andriana: andriana ?? self.andriana,
+            ankee: ankee ?? self.ankee,
+            annihilator: annihilator ?? self.annihilator,
+            annulose: annulose ?? self.annulose,
+            ansarie: ansarie ?? self.ansarie,
+            aphasia: aphasia ?? self.aphasia,
+            asprawl: asprawl ?? self.asprawl,
+            attractive: attractive ?? self.attractive,
+            barksome: barksome ?? self.barksome,
+            bedesman: bedesman ?? self.bedesman,
+            belard: belard ?? self.belard,
+            bocking: bocking ?? self.bocking,
+            brawlingly: brawlingly ?? self.brawlingly,
+            brookie: brookie ?? self.brookie,
+            bumboatman: bumboatman ?? self.bumboatman,
+            bystreet: bystreet ?? self.bystreet,
+            calaverite: calaverite ?? self.calaverite,
+            catallactic: catallactic ?? self.catallactic,
+            cemental: cemental ?? self.cemental,
+            chytridiaceae: chytridiaceae ?? self.chytridiaceae,
+            discordia: discordia ?? self.discordia,
+            endomyces: endomyces ?? self.endomyces,
+            epinephelidae: epinephelidae ?? self.epinephelidae,
+            eupatorium: eupatorium ?? self.eupatorium,
+            gryphosaurus: gryphosaurus ?? self.gryphosaurus,
+            koryak: koryak ?? self.koryak,
+            lavinia: lavinia ?? self.lavinia,
+            oskar: oskar ?? self.oskar,
+            rebecca: rebecca ?? self.rebecca,
+            rhomboganoidei: rhomboganoidei ?? self.rhomboganoidei,
+            rigsmal: rigsmal ?? self.rigsmal,
+            ruellia: ruellia ?? self.ruellia,
+            school: school ?? self.school,
+            shakespearolater: shakespearolater ?? self.shakespearolater,
+            svan: svan ?? self.svan,
+            wayao: wayao ?? self.wayao
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Abranchiata: Codable, Hashable {
+    case integer(Int)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Abranchiata.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Abranchiata"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Academe: Codable, Hashable {
+    case integer(Int)
+    case integerArray([Int])
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Academe.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Academe"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Acquirable: Codable, Hashable {
+    case integerMap([String: Int])
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Acquirable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Acquirable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Aerometry: Codable, Hashable {
+    case bool(Bool)
+    case double(Double)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Aerometry.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Aerometry"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Alexin: Codable, Hashable {
+    case bool(Bool)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Alexin.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Alexin"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum AlleviateElement: Codable, Hashable {
+    case alleviateClass(AlleviateClass)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode(AlleviateClass.self) {
+            self = .alleviateClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(AlleviateElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for AlleviateElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .alleviateClass(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - AlleviateClass
+struct AlleviateClass: Codable, Hashable {
+    let apriori: JSONNull?
+    let beggarer: JSONNull?
+    let brokenheartedly: JSONNull?
+    let debilitation: JSONNull?
+    let frike: JSONNull?
+    let gastrolith: JSONNull?
+    let hulsean: JSONNull?
+    let orthocentric: JSONNull?
+    let petaly: JSONNull?
+    let probudgeting: JSONNull?
+    let reacquire: JSONNull?
+    let scow: JSONNull?
+    let shutoff: JSONNull?
+    let subcontiguous: JSONNull?
+    let suffumigate: JSONNull?
+    let transformable: JSONNull?
+    let uncoroneted: JSONNull?
+    let unparking: JSONNull?
+    let unvarnishedness: JSONNull?
+    let wherewithal: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case apriori = "apriori"
+        case beggarer = "beggarer"
+        case brokenheartedly = "brokenheartedly"
+        case debilitation = "debilitation"
+        case frike = "frike"
+        case gastrolith = "gastrolith"
+        case hulsean = "Hulsean"
+        case orthocentric = "orthocentric"
+        case petaly = "petaly"
+        case probudgeting = "probudgeting"
+        case reacquire = "reacquire"
+        case scow = "scow"
+        case shutoff = "shutoff"
+        case subcontiguous = "subcontiguous"
+        case suffumigate = "suffumigate"
+        case transformable = "transformable"
+        case uncoroneted = "uncoroneted"
+        case unparking = "unparking"
+        case unvarnishedness = "unvarnishedness"
+        case wherewithal = "wherewithal"
+    }
+}
+
+// MARK: AlleviateClass convenience initializers and mutators
+
+extension AlleviateClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(AlleviateClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apriori: JSONNull?? = nil,
+        beggarer: JSONNull?? = nil,
+        brokenheartedly: JSONNull?? = nil,
+        debilitation: JSONNull?? = nil,
+        frike: JSONNull?? = nil,
+        gastrolith: JSONNull?? = nil,
+        hulsean: JSONNull?? = nil,
+        orthocentric: JSONNull?? = nil,
+        petaly: JSONNull?? = nil,
+        probudgeting: JSONNull?? = nil,
+        reacquire: JSONNull?? = nil,
+        scow: JSONNull?? = nil,
+        shutoff: JSONNull?? = nil,
+        subcontiguous: JSONNull?? = nil,
+        suffumigate: JSONNull?? = nil,
+        transformable: JSONNull?? = nil,
+        uncoroneted: JSONNull?? = nil,
+        unparking: JSONNull?? = nil,
+        unvarnishedness: JSONNull?? = nil,
+        wherewithal: JSONNull?? = nil
+    ) -> AlleviateClass {
+        return AlleviateClass(
+            apriori: apriori ?? self.apriori,
+            beggarer: beggarer ?? self.beggarer,
+            brokenheartedly: brokenheartedly ?? self.brokenheartedly,
+            debilitation: debilitation ?? self.debilitation,
+            frike: frike ?? self.frike,
+            gastrolith: gastrolith ?? self.gastrolith,
+            hulsean: hulsean ?? self.hulsean,
+            orthocentric: orthocentric ?? self.orthocentric,
+            petaly: petaly ?? self.petaly,
+            probudgeting: probudgeting ?? self.probudgeting,
+            reacquire: reacquire ?? self.reacquire,
+            scow: scow ?? self.scow,
+            shutoff: shutoff ?? self.shutoff,
+            subcontiguous: subcontiguous ?? self.subcontiguous,
+            suffumigate: suffumigate ?? self.suffumigate,
+            transformable: transformable ?? self.transformable,
+            uncoroneted: uncoroneted ?? self.uncoroneted,
+            unparking: unparking ?? self.unparking,
+            unvarnishedness: unvarnishedness ?? self.unvarnishedness,
+            wherewithal: wherewithal ?? self.wherewithal
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Amaa: Codable, Hashable {
+    case bool(Bool)
+    case integer(Int)
+    case rebecca(Rebecca)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Amaa.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Amaa"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Rebecca
+struct Rebecca: Codable, Hashable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+}
+
+// MARK: Rebecca convenience initializers and mutators
+
+extension Rebecca {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Rebecca.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> Rebecca {
+        return Rebecca(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Ambassage: Codable, Hashable {
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Ambassage.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Ambassage"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Amphithyron
+struct Amphithyron: Codable, Hashable {
+    let akroasis: Int?
+    let antiphonical: Int?
+    let basebred: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let conductometric: Int?
+    let disdiapason: String?
+    let ensilation: Int?
+    let eyebolt: Int?
+    let fistulated: Int?
+    let heteropod: Int?
+    let homocerc: Bool?
+    let juniperus: Int?
+    let labyrinthically: Int?
+    let martyrization: Int?
+    let mispolicy: Int?
+    let multipara: Int?
+    let nazirite: Int?
+    let nonbookish: JSONNull?
+    let possessorial: Int?
+    let shamed: Int?
+    let shelfworn: Int?
+    let stagnum: Int?
+    let those: Int?
+    let undecimal: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case akroasis = "akroasis"
+        case antiphonical = "antiphonical"
+        case basebred = "basebred"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case conductometric = "conductometric"
+        case disdiapason = "disdiapason"
+        case ensilation = "ensilation"
+        case eyebolt = "eyebolt"
+        case fistulated = "fistulated"
+        case heteropod = "heteropod"
+        case homocerc = "homocerc"
+        case juniperus = "Juniperus"
+        case labyrinthically = "labyrinthically"
+        case martyrization = "martyrization"
+        case mispolicy = "mispolicy"
+        case multipara = "multipara"
+        case nazirite = "Nazirite"
+        case nonbookish = "nonbookish"
+        case possessorial = "possessorial"
+        case shamed = "shamed"
+        case shelfworn = "shelfworn"
+        case stagnum = "stagnum"
+        case those = "Those"
+        case undecimal = "undecimal"
+    }
+}
+
+// MARK: Amphithyron convenience initializers and mutators
+
+extension Amphithyron {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Amphithyron.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        akroasis: Int?? = nil,
+        antiphonical: Int?? = nil,
+        basebred: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        conductometric: Int?? = nil,
+        disdiapason: String?? = nil,
+        ensilation: Int?? = nil,
+        eyebolt: Int?? = nil,
+        fistulated: Int?? = nil,
+        heteropod: Int?? = nil,
+        homocerc: Bool?? = nil,
+        juniperus: Int?? = nil,
+        labyrinthically: Int?? = nil,
+        martyrization: Int?? = nil,
+        mispolicy: Int?? = nil,
+        multipara: Int?? = nil,
+        nazirite: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        possessorial: Int?? = nil,
+        shamed: Int?? = nil,
+        shelfworn: Int?? = nil,
+        stagnum: Int?? = nil,
+        those: Int?? = nil,
+        undecimal: Int?? = nil
+    ) -> Amphithyron {
+        return Amphithyron(
+            akroasis: akroasis ?? self.akroasis,
+            antiphonical: antiphonical ?? self.antiphonical,
+            basebred: basebred ?? self.basebred,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            conductometric: conductometric ?? self.conductometric,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ensilation: ensilation ?? self.ensilation,
+            eyebolt: eyebolt ?? self.eyebolt,
+            fistulated: fistulated ?? self.fistulated,
+            heteropod: heteropod ?? self.heteropod,
+            homocerc: homocerc ?? self.homocerc,
+            juniperus: juniperus ?? self.juniperus,
+            labyrinthically: labyrinthically ?? self.labyrinthically,
+            martyrization: martyrization ?? self.martyrization,
+            mispolicy: mispolicy ?? self.mispolicy,
+            multipara: multipara ?? self.multipara,
+            nazirite: nazirite ?? self.nazirite,
+            nonbookish: nonbookish ?? self.nonbookish,
+            possessorial: possessorial ?? self.possessorial,
+            shamed: shamed ?? self.shamed,
+            shelfworn: shelfworn ?? self.shelfworn,
+            stagnum: stagnum ?? self.stagnum,
+            those: those ?? self.those,
+            undecimal: undecimal ?? self.undecimal
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum AnkeeElement: Codable, Hashable {
+    case ankeeClass(AnkeeClass)
+    case integer(Int)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(AnkeeClass.self) {
+            self = .ankeeClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(AnkeeElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for AnkeeElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .ankeeClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - AnkeeClass
+struct AnkeeClass: Codable, Hashable {
+    let anomoean: JSONNull?
+    let barleyhood: JSONNull?
+    let befriender: JSONNull?
+    let brutishness: JSONNull?
+    let cephalalgy: JSONNull?
+    let cirurgian: JSONNull?
+    let conventionally: JSONNull?
+    let jackshay: JSONNull?
+    let milammeter: JSONNull?
+    let naja: JSONNull?
+    let ombrological: JSONNull?
+    let phonasthenia: JSONNull?
+    let retrievableness: JSONNull?
+    let snakily: JSONNull?
+    let swot: JSONNull?
+    let tartlet: JSONNull?
+    let thiofuran: JSONNull?
+    let tracheophone: JSONNull?
+    let tuglike: JSONNull?
+    let unscratchingly: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case anomoean = "Anomoean"
+        case barleyhood = "barleyhood"
+        case befriender = "befriender"
+        case brutishness = "brutishness"
+        case cephalalgy = "cephalalgy"
+        case cirurgian = "cirurgian"
+        case conventionally = "conventionally"
+        case jackshay = "jackshay"
+        case milammeter = "milammeter"
+        case naja = "Naja"
+        case ombrological = "ombrological"
+        case phonasthenia = "phonasthenia"
+        case retrievableness = "retrievableness"
+        case snakily = "snakily"
+        case swot = "swot"
+        case tartlet = "tartlet"
+        case thiofuran = "thiofuran"
+        case tracheophone = "tracheophone"
+        case tuglike = "tuglike"
+        case unscratchingly = "unscratchingly"
+    }
+}
+
+// MARK: AnkeeClass convenience initializers and mutators
+
+extension AnkeeClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(AnkeeClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        anomoean: JSONNull?? = nil,
+        barleyhood: JSONNull?? = nil,
+        befriender: JSONNull?? = nil,
+        brutishness: JSONNull?? = nil,
+        cephalalgy: JSONNull?? = nil,
+        cirurgian: JSONNull?? = nil,
+        conventionally: JSONNull?? = nil,
+        jackshay: JSONNull?? = nil,
+        milammeter: JSONNull?? = nil,
+        naja: JSONNull?? = nil,
+        ombrological: JSONNull?? = nil,
+        phonasthenia: JSONNull?? = nil,
+        retrievableness: JSONNull?? = nil,
+        snakily: JSONNull?? = nil,
+        swot: JSONNull?? = nil,
+        tartlet: JSONNull?? = nil,
+        thiofuran: JSONNull?? = nil,
+        tracheophone: JSONNull?? = nil,
+        tuglike: JSONNull?? = nil,
+        unscratchingly: JSONNull?? = nil
+    ) -> AnkeeClass {
+        return AnkeeClass(
+            anomoean: anomoean ?? self.anomoean,
+            barleyhood: barleyhood ?? self.barleyhood,
+            befriender: befriender ?? self.befriender,
+            brutishness: brutishness ?? self.brutishness,
+            cephalalgy: cephalalgy ?? self.cephalalgy,
+            cirurgian: cirurgian ?? self.cirurgian,
+            conventionally: conventionally ?? self.conventionally,
+            jackshay: jackshay ?? self.jackshay,
+            milammeter: milammeter ?? self.milammeter,
+            naja: naja ?? self.naja,
+            ombrological: ombrological ?? self.ombrological,
+            phonasthenia: phonasthenia ?? self.phonasthenia,
+            retrievableness: retrievableness ?? self.retrievableness,
+            snakily: snakily ?? self.snakily,
+            swot: swot ?? self.swot,
+            tartlet: tartlet ?? self.tartlet,
+            thiofuran: thiofuran ?? self.thiofuran,
+            tracheophone: tracheophone ?? self.tracheophone,
+            tuglike: tuglike ?? self.tuglike,
+            unscratchingly: unscratchingly ?? self.unscratchingly
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum AnsarieElement: Codable, Hashable {
+    case ansarieClass(AnsarieClass)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(AnsarieClass.self) {
+            self = .ansarieClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(AnsarieElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for AnsarieElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .ansarieClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - AnsarieClass
+struct AnsarieClass: Codable, Hashable {
+    let accension: JSONNull?
+    let alida: JSONNull?
+    let asteria: JSONNull?
+    let beriberic: JSONNull?
+    let edgebone: JSONNull?
+    let gastrodialysis: JSONNull?
+    let geographic: JSONNull?
+    let ictonyx: JSONNull?
+    let metrocele: JSONNull?
+    let misgraft: JSONNull?
+    let monteith: JSONNull?
+    let notcher: JSONNull?
+    let prorestriction: JSONNull?
+    let ramist: JSONNull?
+    let throatlet: JSONNull?
+    let unfair: JSONNull?
+    let unsynonymous: JSONNull?
+    let water: JSONNull?
+    let zestfully: JSONNull?
+    let zincic: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case accension = "accension"
+        case alida = "Alida"
+        case asteria = "asteria"
+        case beriberic = "beriberic"
+        case edgebone = "edgebone"
+        case gastrodialysis = "gastrodialysis"
+        case geographic = "geographic"
+        case ictonyx = "Ictonyx"
+        case metrocele = "metrocele"
+        case misgraft = "misgraft"
+        case monteith = "monteith"
+        case notcher = "notcher"
+        case prorestriction = "prorestriction"
+        case ramist = "Ramist"
+        case throatlet = "throatlet"
+        case unfair = "unfair"
+        case unsynonymous = "unsynonymous"
+        case water = "water"
+        case zestfully = "zestfully"
+        case zincic = "zincic"
+    }
+}
+
+// MARK: AnsarieClass convenience initializers and mutators
+
+extension AnsarieClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(AnsarieClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        accension: JSONNull?? = nil,
+        alida: JSONNull?? = nil,
+        asteria: JSONNull?? = nil,
+        beriberic: JSONNull?? = nil,
+        edgebone: JSONNull?? = nil,
+        gastrodialysis: JSONNull?? = nil,
+        geographic: JSONNull?? = nil,
+        ictonyx: JSONNull?? = nil,
+        metrocele: JSONNull?? = nil,
+        misgraft: JSONNull?? = nil,
+        monteith: JSONNull?? = nil,
+        notcher: JSONNull?? = nil,
+        prorestriction: JSONNull?? = nil,
+        ramist: JSONNull?? = nil,
+        throatlet: JSONNull?? = nil,
+        unfair: JSONNull?? = nil,
+        unsynonymous: JSONNull?? = nil,
+        water: JSONNull?? = nil,
+        zestfully: JSONNull?? = nil,
+        zincic: JSONNull?? = nil
+    ) -> AnsarieClass {
+        return AnsarieClass(
+            accension: accension ?? self.accension,
+            alida: alida ?? self.alida,
+            asteria: asteria ?? self.asteria,
+            beriberic: beriberic ?? self.beriberic,
+            edgebone: edgebone ?? self.edgebone,
+            gastrodialysis: gastrodialysis ?? self.gastrodialysis,
+            geographic: geographic ?? self.geographic,
+            ictonyx: ictonyx ?? self.ictonyx,
+            metrocele: metrocele ?? self.metrocele,
+            misgraft: misgraft ?? self.misgraft,
+            monteith: monteith ?? self.monteith,
+            notcher: notcher ?? self.notcher,
+            prorestriction: prorestriction ?? self.prorestriction,
+            ramist: ramist ?? self.ramist,
+            throatlet: throatlet ?? self.throatlet,
+            unfair: unfair ?? self.unfair,
+            unsynonymous: unsynonymous ?? self.unsynonymous,
+            water: water ?? self.water,
+            zestfully: zestfully ?? self.zestfully,
+            zincic: zincic ?? self.zincic
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Aphasia: Codable, Hashable {
+    case integer(Int)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Aphasia.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Aphasia"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Asprawl: Codable, Hashable {
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Asprawl.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Asprawl"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Bedesman: Codable, Hashable {
+    case bool(Bool)
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Bedesman.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Bedesman"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Belard: Codable, Hashable {
+    case double(Double)
+    case integerArray([Int])
+    case rebecca(Rebecca)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Belard.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Belard"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Bocking: Codable, Hashable {
+    case bool(Bool)
+    case integerArray([Int])
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Bocking.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Bocking"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Brawlingly: Codable, Hashable {
+    case nullArray([JSONNull?])
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Brawlingly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Brawlingly"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Brookie: Codable, Hashable {
+    case integerArray([Int])
+    case rebecca(Rebecca)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Brookie.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Brookie"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Bumboatman: Codable, Hashable {
+    case nullArray([JSONNull?])
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Bumboatman.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Bumboatman"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Calaverite: Codable, Hashable {
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Calaverite.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Calaverite"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Catallactic: Codable, Hashable {
+    case bool(Bool)
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Catallactic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Catallactic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Cemental: Codable, Hashable {
+    case double(Double)
+    case integerArray([Int])
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Cemental.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Cemental"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum ChytridiaceaeElement: Codable, Hashable {
+    case bool(Bool)
+    case chytridiaceaeClass(ChytridiaceaeClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(ChytridiaceaeClass.self) {
+            self = .chytridiaceaeClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(ChytridiaceaeElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for ChytridiaceaeElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .chytridiaceaeClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - ChytridiaceaeClass
+struct ChytridiaceaeClass: Codable, Hashable {
+    let batidaceae: JSONNull?
+    let brechites: JSONNull?
+    let codespairer: JSONNull?
+    let emery: JSONNull?
+    let enervative: JSONNull?
+    let excriminate: JSONNull?
+    let goshenite: JSONNull?
+    let grime: JSONNull?
+    let gritten: JSONNull?
+    let hectorly: JSONNull?
+    let intermediation: JSONNull?
+    let meeterly: JSONNull?
+    let narraganset: JSONNull?
+    let onymatic: JSONNull?
+    let paddlecock: JSONNull?
+    let thana: JSONNull?
+    let thornily: JSONNull?
+    let uckia: JSONNull?
+    let unmettle: JSONNull?
+    let vorticellid: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case batidaceae = "Batidaceae"
+        case brechites = "Brechites"
+        case codespairer = "codespairer"
+        case emery = "Emery"
+        case enervative = "enervative"
+        case excriminate = "excriminate"
+        case goshenite = "goshenite"
+        case grime = "grime"
+        case gritten = "gritten"
+        case hectorly = "hectorly"
+        case intermediation = "intermediation"
+        case meeterly = "meeterly"
+        case narraganset = "Narraganset"
+        case onymatic = "onymatic"
+        case paddlecock = "paddlecock"
+        case thana = "thana"
+        case thornily = "thornily"
+        case uckia = "uckia"
+        case unmettle = "unmettle"
+        case vorticellid = "vorticellid"
+    }
+}
+
+// MARK: ChytridiaceaeClass convenience initializers and mutators
+
+extension ChytridiaceaeClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(ChytridiaceaeClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        batidaceae: JSONNull?? = nil,
+        brechites: JSONNull?? = nil,
+        codespairer: JSONNull?? = nil,
+        emery: JSONNull?? = nil,
+        enervative: JSONNull?? = nil,
+        excriminate: JSONNull?? = nil,
+        goshenite: JSONNull?? = nil,
+        grime: JSONNull?? = nil,
+        gritten: JSONNull?? = nil,
+        hectorly: JSONNull?? = nil,
+        intermediation: JSONNull?? = nil,
+        meeterly: JSONNull?? = nil,
+        narraganset: JSONNull?? = nil,
+        onymatic: JSONNull?? = nil,
+        paddlecock: JSONNull?? = nil,
+        thana: JSONNull?? = nil,
+        thornily: JSONNull?? = nil,
+        uckia: JSONNull?? = nil,
+        unmettle: JSONNull?? = nil,
+        vorticellid: JSONNull?? = nil
+    ) -> ChytridiaceaeClass {
+        return ChytridiaceaeClass(
+            batidaceae: batidaceae ?? self.batidaceae,
+            brechites: brechites ?? self.brechites,
+            codespairer: codespairer ?? self.codespairer,
+            emery: emery ?? self.emery,
+            enervative: enervative ?? self.enervative,
+            excriminate: excriminate ?? self.excriminate,
+            goshenite: goshenite ?? self.goshenite,
+            grime: grime ?? self.grime,
+            gritten: gritten ?? self.gritten,
+            hectorly: hectorly ?? self.hectorly,
+            intermediation: intermediation ?? self.intermediation,
+            meeterly: meeterly ?? self.meeterly,
+            narraganset: narraganset ?? self.narraganset,
+            onymatic: onymatic ?? self.onymatic,
+            paddlecock: paddlecock ?? self.paddlecock,
+            thana: thana ?? self.thana,
+            thornily: thornily ?? self.thornily,
+            uckia: uckia ?? self.uckia,
+            unmettle: unmettle ?? self.unmettle,
+            vorticellid: vorticellid ?? self.vorticellid
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum DiscordiaElement: Codable, Hashable {
+    case discordiaClass(DiscordiaClass)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(DiscordiaClass.self) {
+            self = .discordiaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(DiscordiaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for DiscordiaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .discordiaClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - DiscordiaClass
+struct DiscordiaClass: Codable, Hashable {
+    let altaic: Int?
+    let amoristic: Int?
+    let blennophthalmia: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disciplinability: Int?
+    let disdiapason: String?
+    let goofer: Int?
+    let homocerc: Bool?
+    let laryngograph: Int?
+    let leucitis: Int?
+    let lymphocyst: Int?
+    let microcosmology: Int?
+    let nauseation: Int?
+    let nonbookish: JSONNull?
+    let patarin: Int?
+    let preliberal: Int?
+    let prettifier: Int?
+    let rangework: Int?
+    let redient: Int?
+    let subfusiform: Int?
+    let suicidical: Int?
+    let swow: Int?
+    let wastrel: Int?
+    let wingle: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case altaic = "Altaic"
+        case amoristic = "amoristic"
+        case blennophthalmia = "blennophthalmia"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disciplinability = "disciplinability"
+        case disdiapason = "disdiapason"
+        case goofer = "goofer"
+        case homocerc = "homocerc"
+        case laryngograph = "laryngograph"
+        case leucitis = "leucitis"
+        case lymphocyst = "lymphocyst"
+        case microcosmology = "microcosmology"
+        case nauseation = "nauseation"
+        case nonbookish = "nonbookish"
+        case patarin = "Patarin"
+        case preliberal = "preliberal"
+        case prettifier = "prettifier"
+        case rangework = "rangework"
+        case redient = "redient"
+        case subfusiform = "subfusiform"
+        case suicidical = "suicidical"
+        case swow = "swow"
+        case wastrel = "wastrel"
+        case wingle = "wingle"
+    }
+}
+
+// MARK: DiscordiaClass convenience initializers and mutators
+
+extension DiscordiaClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(DiscordiaClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        altaic: Int?? = nil,
+        amoristic: Int?? = nil,
+        blennophthalmia: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disciplinability: Int?? = nil,
+        disdiapason: String?? = nil,
+        goofer: Int?? = nil,
+        homocerc: Bool?? = nil,
+        laryngograph: Int?? = nil,
+        leucitis: Int?? = nil,
+        lymphocyst: Int?? = nil,
+        microcosmology: Int?? = nil,
+        nauseation: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        patarin: Int?? = nil,
+        preliberal: Int?? = nil,
+        prettifier: Int?? = nil,
+        rangework: Int?? = nil,
+        redient: Int?? = nil,
+        subfusiform: Int?? = nil,
+        suicidical: Int?? = nil,
+        swow: Int?? = nil,
+        wastrel: Int?? = nil,
+        wingle: Int?? = nil
+    ) -> DiscordiaClass {
+        return DiscordiaClass(
+            altaic: altaic ?? self.altaic,
+            amoristic: amoristic ?? self.amoristic,
+            blennophthalmia: blennophthalmia ?? self.blennophthalmia,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disciplinability: disciplinability ?? self.disciplinability,
+            disdiapason: disdiapason ?? self.disdiapason,
+            goofer: goofer ?? self.goofer,
+            homocerc: homocerc ?? self.homocerc,
+            laryngograph: laryngograph ?? self.laryngograph,
+            leucitis: leucitis ?? self.leucitis,
+            lymphocyst: lymphocyst ?? self.lymphocyst,
+            microcosmology: microcosmology ?? self.microcosmology,
+            nauseation: nauseation ?? self.nauseation,
+            nonbookish: nonbookish ?? self.nonbookish,
+            patarin: patarin ?? self.patarin,
+            preliberal: preliberal ?? self.preliberal,
+            prettifier: prettifier ?? self.prettifier,
+            rangework: rangework ?? self.rangework,
+            redient: redient ?? self.redient,
+            subfusiform: subfusiform ?? self.subfusiform,
+            suicidical: suicidical ?? self.suicidical,
+            swow: swow ?? self.swow,
+            wastrel: wastrel ?? self.wastrel,
+            wingle: wingle ?? self.wingle
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Endomyce: Codable, Hashable {
+    case integer(Int)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Endomyce.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Endomyce"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Epinephelidae: Codable, Hashable {
+    case bool(Bool)
+    case integer(Int)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Epinephelidae.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Epinephelidae"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Eupatorium: Codable, Hashable {
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Eupatorium.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Eupatorium"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum GryphosaurusElement: Codable, Hashable {
+    case gryphosaurusClass(GryphosaurusClass)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(GryphosaurusClass.self) {
+            self = .gryphosaurusClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(GryphosaurusElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for GryphosaurusElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .gryphosaurusClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - GryphosaurusClass
+struct GryphosaurusClass: Codable, Hashable {
+    let amissibility: JSONNull?
+    let burushaski: JSONNull?
+    let citronin: JSONNull?
+    let coplaintiff: JSONNull?
+    let disquisitionary: JSONNull?
+    let enoplan: JSONNull?
+    let faintness: JSONNull?
+    let hebetomy: JSONNull?
+    let islandry: JSONNull?
+    let lameduck: JSONNull?
+    let overbattle: JSONNull?
+    let overinterested: JSONNull?
+    let phrenologic: JSONNull?
+    let rainband: JSONNull?
+    let shiningly: JSONNull?
+    let stamineous: JSONNull?
+    let subscapularis: JSONNull?
+    let tahami: JSONNull?
+    let undaubed: JSONNull?
+    let underntime: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amissibility = "amissibility"
+        case burushaski = "Burushaski"
+        case citronin = "citronin"
+        case coplaintiff = "coplaintiff"
+        case disquisitionary = "disquisitionary"
+        case enoplan = "enoplan"
+        case faintness = "faintness"
+        case hebetomy = "hebetomy"
+        case islandry = "islandry"
+        case lameduck = "lameduck"
+        case overbattle = "overbattle"
+        case overinterested = "overinterested"
+        case phrenologic = "phrenologic"
+        case rainband = "rainband"
+        case shiningly = "shiningly"
+        case stamineous = "stamineous"
+        case subscapularis = "subscapularis"
+        case tahami = "Tahami"
+        case undaubed = "undaubed"
+        case underntime = "underntime"
+    }
+}
+
+// MARK: GryphosaurusClass convenience initializers and mutators
+
+extension GryphosaurusClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(GryphosaurusClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amissibility: JSONNull?? = nil,
+        burushaski: JSONNull?? = nil,
+        citronin: JSONNull?? = nil,
+        coplaintiff: JSONNull?? = nil,
+        disquisitionary: JSONNull?? = nil,
+        enoplan: JSONNull?? = nil,
+        faintness: JSONNull?? = nil,
+        hebetomy: JSONNull?? = nil,
+        islandry: JSONNull?? = nil,
+        lameduck: JSONNull?? = nil,
+        overbattle: JSONNull?? = nil,
+        overinterested: JSONNull?? = nil,
+        phrenologic: JSONNull?? = nil,
+        rainband: JSONNull?? = nil,
+        shiningly: JSONNull?? = nil,
+        stamineous: JSONNull?? = nil,
+        subscapularis: JSONNull?? = nil,
+        tahami: JSONNull?? = nil,
+        undaubed: JSONNull?? = nil,
+        underntime: JSONNull?? = nil
+    ) -> GryphosaurusClass {
+        return GryphosaurusClass(
+            amissibility: amissibility ?? self.amissibility,
+            burushaski: burushaski ?? self.burushaski,
+            citronin: citronin ?? self.citronin,
+            coplaintiff: coplaintiff ?? self.coplaintiff,
+            disquisitionary: disquisitionary ?? self.disquisitionary,
+            enoplan: enoplan ?? self.enoplan,
+            faintness: faintness ?? self.faintness,
+            hebetomy: hebetomy ?? self.hebetomy,
+            islandry: islandry ?? self.islandry,
+            lameduck: lameduck ?? self.lameduck,
+            overbattle: overbattle ?? self.overbattle,
+            overinterested: overinterested ?? self.overinterested,
+            phrenologic: phrenologic ?? self.phrenologic,
+            rainband: rainband ?? self.rainband,
+            shiningly: shiningly ?? self.shiningly,
+            stamineous: stamineous ?? self.stamineous,
+            subscapularis: subscapularis ?? self.subscapularis,
+            tahami: tahami ?? self.tahami,
+            undaubed: undaubed ?? self.undaubed,
+            underntime: underntime ?? self.underntime
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Koryak: Codable, Hashable {
+    case string(String)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Koryak.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Koryak"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .string(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum LaviniaElement: Codable, Hashable {
+    case laviniaClass(LaviniaClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(LaviniaClass.self) {
+            self = .laviniaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(LaviniaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LaviniaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .laviniaClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - LaviniaClass
+struct LaviniaClass: Codable, Hashable {
+    let agitable: Int?
+    let asininity: Int?
+    let benefiter: Int?
+    let bronzelike: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let cholesteatomatous: Int?
+    let deprivement: Int?
+    let disdiapason: String?
+    let flippantness: Int?
+    let fogproof: Int?
+    let homocerc: Bool?
+    let merrymeeting: Int?
+    let nonbookish: JSONNull?
+    let overcareful: Int?
+    let panaris: Int?
+    let preacceptance: Int?
+    let quinoxaline: Int?
+    let sig: Int?
+    let superconfusion: Int?
+    let tacana: Int?
+    let tillotter: Int?
+    let tranquillize: Int?
+    let unquestionable: Int?
+    let uproute: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case agitable = "agitable"
+        case asininity = "asininity"
+        case benefiter = "benefiter"
+        case bronzelike = "bronzelike"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case cholesteatomatous = "cholesteatomatous"
+        case deprivement = "deprivement"
+        case disdiapason = "disdiapason"
+        case flippantness = "flippantness"
+        case fogproof = "fogproof"
+        case homocerc = "homocerc"
+        case merrymeeting = "merrymeeting"
+        case nonbookish = "nonbookish"
+        case overcareful = "overcareful"
+        case panaris = "panaris"
+        case preacceptance = "preacceptance"
+        case quinoxaline = "quinoxaline"
+        case sig = "sig"
+        case superconfusion = "superconfusion"
+        case tacana = "Tacana"
+        case tillotter = "tillotter"
+        case tranquillize = "tranquillize"
+        case unquestionable = "unquestionable"
+        case uproute = "uproute"
+    }
+}
+
+// MARK: LaviniaClass convenience initializers and mutators
+
+extension LaviniaClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(LaviniaClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        agitable: Int?? = nil,
+        asininity: Int?? = nil,
+        benefiter: Int?? = nil,
+        bronzelike: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        cholesteatomatous: Int?? = nil,
+        deprivement: Int?? = nil,
+        disdiapason: String?? = nil,
+        flippantness: Int?? = nil,
+        fogproof: Int?? = nil,
+        homocerc: Bool?? = nil,
+        merrymeeting: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        overcareful: Int?? = nil,
+        panaris: Int?? = nil,
+        preacceptance: Int?? = nil,
+        quinoxaline: Int?? = nil,
+        sig: Int?? = nil,
+        superconfusion: Int?? = nil,
+        tacana: Int?? = nil,
+        tillotter: Int?? = nil,
+        tranquillize: Int?? = nil,
+        unquestionable: Int?? = nil,
+        uproute: Int?? = nil
+    ) -> LaviniaClass {
+        return LaviniaClass(
+            agitable: agitable ?? self.agitable,
+            asininity: asininity ?? self.asininity,
+            benefiter: benefiter ?? self.benefiter,
+            bronzelike: bronzelike ?? self.bronzelike,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            cholesteatomatous: cholesteatomatous ?? self.cholesteatomatous,
+            deprivement: deprivement ?? self.deprivement,
+            disdiapason: disdiapason ?? self.disdiapason,
+            flippantness: flippantness ?? self.flippantness,
+            fogproof: fogproof ?? self.fogproof,
+            homocerc: homocerc ?? self.homocerc,
+            merrymeeting: merrymeeting ?? self.merrymeeting,
+            nonbookish: nonbookish ?? self.nonbookish,
+            overcareful: overcareful ?? self.overcareful,
+            panaris: panaris ?? self.panaris,
+            preacceptance: preacceptance ?? self.preacceptance,
+            quinoxaline: quinoxaline ?? self.quinoxaline,
+            sig: sig ?? self.sig,
+            superconfusion: superconfusion ?? self.superconfusion,
+            tacana: tacana ?? self.tacana,
+            tillotter: tillotter ?? self.tillotter,
+            tranquillize: tranquillize ?? self.tranquillize,
+            unquestionable: unquestionable ?? self.unquestionable,
+            uproute: uproute ?? self.uproute
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum OskarElement: Codable, Hashable {
+    case integerArray([Int])
+    case oskarClass(OskarClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(OskarClass.self) {
+            self = .oskarClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(OskarElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for OskarElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .oskarClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - OskarClass
+struct OskarClass: Codable, Hashable {
+    let acrobates: JSONNull?
+    let beanshooter: JSONNull?
+    let bearhound: JSONNull?
+    let cayuga: JSONNull?
+    let guarneri: JSONNull?
+    let hypochondriacism: JSONNull?
+    let indication: JSONNull?
+    let jaculative: JSONNull?
+    let nagana: JSONNull?
+    let netherlandish: JSONNull?
+    let noctivagous: JSONNull?
+    let nonphysiological: JSONNull?
+    let praxis: JSONNull?
+    let provision: JSONNull?
+    let subterhuman: JSONNull?
+    let sunlit: JSONNull?
+    let syncraniate: JSONNull?
+    let teachment: JSONNull?
+    let unmutinous: JSONNull?
+    let unstoppable: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acrobates = "Acrobates"
+        case beanshooter = "beanshooter"
+        case bearhound = "bearhound"
+        case cayuga = "Cayuga"
+        case guarneri = "guarneri"
+        case hypochondriacism = "hypochondriacism"
+        case indication = "indication"
+        case jaculative = "jaculative"
+        case nagana = "nagana"
+        case netherlandish = "Netherlandish"
+        case noctivagous = "noctivagous"
+        case nonphysiological = "nonphysiological"
+        case praxis = "praxis"
+        case provision = "provision"
+        case subterhuman = "subterhuman"
+        case sunlit = "sunlit"
+        case syncraniate = "syncraniate"
+        case teachment = "teachment"
+        case unmutinous = "unmutinous"
+        case unstoppable = "unstoppable"
+    }
+}
+
+// MARK: OskarClass convenience initializers and mutators
+
+extension OskarClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(OskarClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acrobates: JSONNull?? = nil,
+        beanshooter: JSONNull?? = nil,
+        bearhound: JSONNull?? = nil,
+        cayuga: JSONNull?? = nil,
+        guarneri: JSONNull?? = nil,
+        hypochondriacism: JSONNull?? = nil,
+        indication: JSONNull?? = nil,
+        jaculative: JSONNull?? = nil,
+        nagana: JSONNull?? = nil,
+        netherlandish: JSONNull?? = nil,
+        noctivagous: JSONNull?? = nil,
+        nonphysiological: JSONNull?? = nil,
+        praxis: JSONNull?? = nil,
+        provision: JSONNull?? = nil,
+        subterhuman: JSONNull?? = nil,
+        sunlit: JSONNull?? = nil,
+        syncraniate: JSONNull?? = nil,
+        teachment: JSONNull?? = nil,
+        unmutinous: JSONNull?? = nil,
+        unstoppable: JSONNull?? = nil
+    ) -> OskarClass {
+        return OskarClass(
+            acrobates: acrobates ?? self.acrobates,
+            beanshooter: beanshooter ?? self.beanshooter,
+            bearhound: bearhound ?? self.bearhound,
+            cayuga: cayuga ?? self.cayuga,
+            guarneri: guarneri ?? self.guarneri,
+            hypochondriacism: hypochondriacism ?? self.hypochondriacism,
+            indication: indication ?? self.indication,
+            jaculative: jaculative ?? self.jaculative,
+            nagana: nagana ?? self.nagana,
+            netherlandish: netherlandish ?? self.netherlandish,
+            noctivagous: noctivagous ?? self.noctivagous,
+            nonphysiological: nonphysiological ?? self.nonphysiological,
+            praxis: praxis ?? self.praxis,
+            provision: provision ?? self.provision,
+            subterhuman: subterhuman ?? self.subterhuman,
+            sunlit: sunlit ?? self.sunlit,
+            syncraniate: syncraniate ?? self.syncraniate,
+            teachment: teachment ?? self.teachment,
+            unmutinous: unmutinous ?? self.unmutinous,
+            unstoppable: unstoppable ?? self.unstoppable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum RebeccaElement: Codable, Hashable {
+    case integer(Int)
+    case rebecca(Rebecca)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(RebeccaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for RebeccaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Rhomboganoidei: Codable, Hashable {
+    case integerArray([Int])
+    case rebecca(Rebecca)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Rhomboganoidei.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Rhomboganoidei"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Ruellia: Codable, Hashable {
+    case bool(Bool)
+    case rebecca(Rebecca)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Ruellia.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Ruellia"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum School: Codable, Hashable {
+    case integer(Int)
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(School.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for School"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Shakespearolater: Codable, Hashable {
+    case double(Double)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Shakespearolater.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Shakespearolater"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+class JSONNull: Codable, Hashable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    public func hash(into hasher: inout Hasher) {
+        hasher.combine(0)
+    }
+
+    public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/head/swift/test/inputs/json/priority/combinations2.json/sendable-true--1c3982c78639/quicktype.swift b/head/swift/test/inputs/json/priority/combinations2.json/sendable-true--1c3982c78639/quicktype.swift
new file mode 100644
index 0000000..9dc4ae1
--- /dev/null
+++ b/head/swift/test/inputs/json/priority/combinations2.json/sendable-true--1c3982c78639/quicktype.swift
@@ -0,0 +1,2602 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+import Foundation
+
+// MARK: - TopLevel
+struct TopLevel: Codable, Sendable {
+    let abranchiata: [Abranchiata]
+    let academe: [Academe]
+    let acquirable: [Acquirable]
+    let aerometry: [Aerometry]
+    let alexin: [Alexin]
+    let alleviate: [AlleviateElement]
+    let amaas: [Amaa]
+    let ambassage: [Ambassage]
+    let amphithyron: [Amphithyron?]
+    let andriana: [String?]
+    let ankee: [AnkeeElement]
+    let annihilator: [[String: Int?]?]
+    let annulose: JSONNull?
+    let ansarie: [AnsarieElement]
+    let aphasia: [Aphasia]
+    let asprawl: [Asprawl]
+    let attractive: [Bool?]
+    let barksome: [String: Int]
+    let bedesman: [Bedesman]
+    let belard: [Belard]
+    let bocking: [Bocking]
+    let brawlingly: [Brawlingly]
+    let brookie: [Brookie]
+    let bumboatman: [Bumboatman]
+    let bystreet: [JSONNull?]
+    let calaverite: [Calaverite]
+    let catallactic: [Catallactic]
+    let cemental: [Cemental]
+    let chytridiaceae: [ChytridiaceaeElement]
+    let discordia: [DiscordiaElement]
+    let endomyces: [Endomyce]
+    let epinephelidae: [Epinephelidae]
+    let eupatorium: [Eupatorium]
+    let gryphosaurus: [GryphosaurusElement]
+    let koryak: [Koryak]
+    let lavinia: [LaviniaElement]
+    let oskar: [OskarElement]
+    let rebecca: [RebeccaElement]
+    let rhomboganoidei: [Rhomboganoidei]
+    let rigsmal: Bool
+    let ruellia: [Ruellia]
+    let school: [School]
+    let shakespearolater: [Shakespearolater]
+    let svan: [Double]
+    let wayao: [String: Double]
+
+    enum CodingKeys: String, CodingKey {
+        case abranchiata = "Abranchiata"
+        case academe = "academe"
+        case acquirable = "acquirable"
+        case aerometry = "aerometry"
+        case alexin = "alexin"
+        case alleviate = "alleviate"
+        case amaas = "amaas"
+        case ambassage = "ambassage"
+        case amphithyron = "amphithyron"
+        case andriana = "Andriana"
+        case ankee = "ankee"
+        case annihilator = "annihilator"
+        case annulose = "annulose"
+        case ansarie = "Ansarie"
+        case aphasia = "aphasia"
+        case asprawl = "asprawl"
+        case attractive = "attractive"
+        case barksome = "barksome"
+        case bedesman = "bedesman"
+        case belard = "belard"
+        case bocking = "bocking"
+        case brawlingly = "brawlingly"
+        case brookie = "brookie"
+        case bumboatman = "bumboatman"
+        case bystreet = "bystreet"
+        case calaverite = "calaverite"
+        case catallactic = "catallactic"
+        case cemental = "cemental"
+        case chytridiaceae = "Chytridiaceae"
+        case discordia = "Discordia"
+        case endomyces = "Endomyces"
+        case epinephelidae = "Epinephelidae"
+        case eupatorium = "Eupatorium"
+        case gryphosaurus = "Gryphosaurus"
+        case koryak = "Koryak"
+        case lavinia = "Lavinia"
+        case oskar = "Oskar"
+        case rebecca = "Rebecca"
+        case rhomboganoidei = "Rhomboganoidei"
+        case rigsmal = "Rigsmal"
+        case ruellia = "Ruellia"
+        case school = "School"
+        case shakespearolater = "Shakespearolater"
+        case svan = "Svan"
+        case wayao = "Wayao"
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(TopLevel.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        abranchiata: [Abranchiata]? = nil,
+        academe: [Academe]? = nil,
+        acquirable: [Acquirable]? = nil,
+        aerometry: [Aerometry]? = nil,
+        alexin: [Alexin]? = nil,
+        alleviate: [AlleviateElement]? = nil,
+        amaas: [Amaa]? = nil,
+        ambassage: [Ambassage]? = nil,
+        amphithyron: [Amphithyron?]? = nil,
+        andriana: [String?]? = nil,
+        ankee: [AnkeeElement]? = nil,
+        annihilator: [[String: Int?]?]? = nil,
+        annulose: JSONNull?? = nil,
+        ansarie: [AnsarieElement]? = nil,
+        aphasia: [Aphasia]? = nil,
+        asprawl: [Asprawl]? = nil,
+        attractive: [Bool?]? = nil,
+        barksome: [String: Int]? = nil,
+        bedesman: [Bedesman]? = nil,
+        belard: [Belard]? = nil,
+        bocking: [Bocking]? = nil,
+        brawlingly: [Brawlingly]? = nil,
+        brookie: [Brookie]? = nil,
+        bumboatman: [Bumboatman]? = nil,
+        bystreet: [JSONNull?]? = nil,
+        calaverite: [Calaverite]? = nil,
+        catallactic: [Catallactic]? = nil,
+        cemental: [Cemental]? = nil,
+        chytridiaceae: [ChytridiaceaeElement]? = nil,
+        discordia: [DiscordiaElement]? = nil,
+        endomyces: [Endomyce]? = nil,
+        epinephelidae: [Epinephelidae]? = nil,
+        eupatorium: [Eupatorium]? = nil,
+        gryphosaurus: [GryphosaurusElement]? = nil,
+        koryak: [Koryak]? = nil,
+        lavinia: [LaviniaElement]? = nil,
+        oskar: [OskarElement]? = nil,
+        rebecca: [RebeccaElement]? = nil,
+        rhomboganoidei: [Rhomboganoidei]? = nil,
+        rigsmal: Bool? = nil,
+        ruellia: [Ruellia]? = nil,
+        school: [School]? = nil,
+        shakespearolater: [Shakespearolater]? = nil,
+        svan: [Double]? = nil,
+        wayao: [String: Double]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            abranchiata: abranchiata ?? self.abranchiata,
+            academe: academe ?? self.academe,
+            acquirable: acquirable ?? self.acquirable,
+            aerometry: aerometry ?? self.aerometry,
+            alexin: alexin ?? self.alexin,
+            alleviate: alleviate ?? self.alleviate,
+            amaas: amaas ?? self.amaas,
+            ambassage: ambassage ?? self.ambassage,
+            amphithyron: amphithyron ?? self.amphithyron,
+            andriana: andriana ?? self.andriana,
+            ankee: ankee ?? self.ankee,
+            annihilator: annihilator ?? self.annihilator,
+            annulose: annulose ?? self.annulose,
+            ansarie: ansarie ?? self.ansarie,
+            aphasia: aphasia ?? self.aphasia,
+            asprawl: asprawl ?? self.asprawl,
+            attractive: attractive ?? self.attractive,
+            barksome: barksome ?? self.barksome,
+            bedesman: bedesman ?? self.bedesman,
+            belard: belard ?? self.belard,
+            bocking: bocking ?? self.bocking,
+            brawlingly: brawlingly ?? self.brawlingly,
+            brookie: brookie ?? self.brookie,
+            bumboatman: bumboatman ?? self.bumboatman,
+            bystreet: bystreet ?? self.bystreet,
+            calaverite: calaverite ?? self.calaverite,
+            catallactic: catallactic ?? self.catallactic,
+            cemental: cemental ?? self.cemental,
+            chytridiaceae: chytridiaceae ?? self.chytridiaceae,
+            discordia: discordia ?? self.discordia,
+            endomyces: endomyces ?? self.endomyces,
+            epinephelidae: epinephelidae ?? self.epinephelidae,
+            eupatorium: eupatorium ?? self.eupatorium,
+            gryphosaurus: gryphosaurus ?? self.gryphosaurus,
+            koryak: koryak ?? self.koryak,
+            lavinia: lavinia ?? self.lavinia,
+            oskar: oskar ?? self.oskar,
+            rebecca: rebecca ?? self.rebecca,
+            rhomboganoidei: rhomboganoidei ?? self.rhomboganoidei,
+            rigsmal: rigsmal ?? self.rigsmal,
+            ruellia: ruellia ?? self.ruellia,
+            school: school ?? self.school,
+            shakespearolater: shakespearolater ?? self.shakespearolater,
+            svan: svan ?? self.svan,
+            wayao: wayao ?? self.wayao
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Abranchiata: Codable, Sendable {
+    case integer(Int)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Abranchiata.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Abranchiata"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Academe: Codable, Sendable {
+    case integer(Int)
+    case integerArray([Int])
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Academe.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Academe"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Acquirable: Codable, Sendable {
+    case integerMap([String: Int])
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Acquirable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Acquirable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Aerometry: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Aerometry.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Aerometry"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Alexin: Codable, Sendable {
+    case bool(Bool)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Alexin.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Alexin"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum AlleviateElement: Codable, Sendable {
+    case alleviateClass(AlleviateClass)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode(AlleviateClass.self) {
+            self = .alleviateClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(AlleviateElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for AlleviateElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .alleviateClass(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - AlleviateClass
+struct AlleviateClass: Codable, Sendable {
+    let apriori: JSONNull?
+    let beggarer: JSONNull?
+    let brokenheartedly: JSONNull?
+    let debilitation: JSONNull?
+    let frike: JSONNull?
+    let gastrolith: JSONNull?
+    let hulsean: JSONNull?
+    let orthocentric: JSONNull?
+    let petaly: JSONNull?
+    let probudgeting: JSONNull?
+    let reacquire: JSONNull?
+    let scow: JSONNull?
+    let shutoff: JSONNull?
+    let subcontiguous: JSONNull?
+    let suffumigate: JSONNull?
+    let transformable: JSONNull?
+    let uncoroneted: JSONNull?
+    let unparking: JSONNull?
+    let unvarnishedness: JSONNull?
+    let wherewithal: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case apriori = "apriori"
+        case beggarer = "beggarer"
+        case brokenheartedly = "brokenheartedly"
+        case debilitation = "debilitation"
+        case frike = "frike"
+        case gastrolith = "gastrolith"
+        case hulsean = "Hulsean"
+        case orthocentric = "orthocentric"
+        case petaly = "petaly"
+        case probudgeting = "probudgeting"
+        case reacquire = "reacquire"
+        case scow = "scow"
+        case shutoff = "shutoff"
+        case subcontiguous = "subcontiguous"
+        case suffumigate = "suffumigate"
+        case transformable = "transformable"
+        case uncoroneted = "uncoroneted"
+        case unparking = "unparking"
+        case unvarnishedness = "unvarnishedness"
+        case wherewithal = "wherewithal"
+    }
+}
+
+// MARK: AlleviateClass convenience initializers and mutators
+
+extension AlleviateClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(AlleviateClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apriori: JSONNull?? = nil,
+        beggarer: JSONNull?? = nil,
+        brokenheartedly: JSONNull?? = nil,
+        debilitation: JSONNull?? = nil,
+        frike: JSONNull?? = nil,
+        gastrolith: JSONNull?? = nil,
+        hulsean: JSONNull?? = nil,
+        orthocentric: JSONNull?? = nil,
+        petaly: JSONNull?? = nil,
+        probudgeting: JSONNull?? = nil,
+        reacquire: JSONNull?? = nil,
+        scow: JSONNull?? = nil,
+        shutoff: JSONNull?? = nil,
+        subcontiguous: JSONNull?? = nil,
+        suffumigate: JSONNull?? = nil,
+        transformable: JSONNull?? = nil,
+        uncoroneted: JSONNull?? = nil,
+        unparking: JSONNull?? = nil,
+        unvarnishedness: JSONNull?? = nil,
+        wherewithal: JSONNull?? = nil
+    ) -> AlleviateClass {
+        return AlleviateClass(
+            apriori: apriori ?? self.apriori,
+            beggarer: beggarer ?? self.beggarer,
+            brokenheartedly: brokenheartedly ?? self.brokenheartedly,
+            debilitation: debilitation ?? self.debilitation,
+            frike: frike ?? self.frike,
+            gastrolith: gastrolith ?? self.gastrolith,
+            hulsean: hulsean ?? self.hulsean,
+            orthocentric: orthocentric ?? self.orthocentric,
+            petaly: petaly ?? self.petaly,
+            probudgeting: probudgeting ?? self.probudgeting,
+            reacquire: reacquire ?? self.reacquire,
+            scow: scow ?? self.scow,
+            shutoff: shutoff ?? self.shutoff,
+            subcontiguous: subcontiguous ?? self.subcontiguous,
+            suffumigate: suffumigate ?? self.suffumigate,
+            transformable: transformable ?? self.transformable,
+            uncoroneted: uncoroneted ?? self.uncoroneted,
+            unparking: unparking ?? self.unparking,
+            unvarnishedness: unvarnishedness ?? self.unvarnishedness,
+            wherewithal: wherewithal ?? self.wherewithal
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Amaa: Codable, Sendable {
+    case bool(Bool)
+    case integer(Int)
+    case rebecca(Rebecca)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Amaa.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Amaa"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Rebecca
+struct Rebecca: Codable, Sendable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+}
+
+// MARK: Rebecca convenience initializers and mutators
+
+extension Rebecca {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Rebecca.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> Rebecca {
+        return Rebecca(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Ambassage: Codable, Sendable {
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Ambassage.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Ambassage"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Amphithyron
+struct Amphithyron: Codable, Sendable {
+    let akroasis: Int?
+    let antiphonical: Int?
+    let basebred: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let conductometric: Int?
+    let disdiapason: String?
+    let ensilation: Int?
+    let eyebolt: Int?
+    let fistulated: Int?
+    let heteropod: Int?
+    let homocerc: Bool?
+    let juniperus: Int?
+    let labyrinthically: Int?
+    let martyrization: Int?
+    let mispolicy: Int?
+    let multipara: Int?
+    let nazirite: Int?
+    let nonbookish: JSONNull?
+    let possessorial: Int?
+    let shamed: Int?
+    let shelfworn: Int?
+    let stagnum: Int?
+    let those: Int?
+    let undecimal: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case akroasis = "akroasis"
+        case antiphonical = "antiphonical"
+        case basebred = "basebred"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case conductometric = "conductometric"
+        case disdiapason = "disdiapason"
+        case ensilation = "ensilation"
+        case eyebolt = "eyebolt"
+        case fistulated = "fistulated"
+        case heteropod = "heteropod"
+        case homocerc = "homocerc"
+        case juniperus = "Juniperus"
+        case labyrinthically = "labyrinthically"
+        case martyrization = "martyrization"
+        case mispolicy = "mispolicy"
+        case multipara = "multipara"
+        case nazirite = "Nazirite"
+        case nonbookish = "nonbookish"
+        case possessorial = "possessorial"
+        case shamed = "shamed"
+        case shelfworn = "shelfworn"
+        case stagnum = "stagnum"
+        case those = "Those"
+        case undecimal = "undecimal"
+    }
+}
+
+// MARK: Amphithyron convenience initializers and mutators
+
+extension Amphithyron {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Amphithyron.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        akroasis: Int?? = nil,
+        antiphonical: Int?? = nil,
+        basebred: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        conductometric: Int?? = nil,
+        disdiapason: String?? = nil,
+        ensilation: Int?? = nil,
+        eyebolt: Int?? = nil,
+        fistulated: Int?? = nil,
+        heteropod: Int?? = nil,
+        homocerc: Bool?? = nil,
+        juniperus: Int?? = nil,
+        labyrinthically: Int?? = nil,
+        martyrization: Int?? = nil,
+        mispolicy: Int?? = nil,
+        multipara: Int?? = nil,
+        nazirite: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        possessorial: Int?? = nil,
+        shamed: Int?? = nil,
+        shelfworn: Int?? = nil,
+        stagnum: Int?? = nil,
+        those: Int?? = nil,
+        undecimal: Int?? = nil
+    ) -> Amphithyron {
+        return Amphithyron(
+            akroasis: akroasis ?? self.akroasis,
+            antiphonical: antiphonical ?? self.antiphonical,
+            basebred: basebred ?? self.basebred,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            conductometric: conductometric ?? self.conductometric,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ensilation: ensilation ?? self.ensilation,
+            eyebolt: eyebolt ?? self.eyebolt,
+            fistulated: fistulated ?? self.fistulated,
+            heteropod: heteropod ?? self.heteropod,
+            homocerc: homocerc ?? self.homocerc,
+            juniperus: juniperus ?? self.juniperus,
+            labyrinthically: labyrinthically ?? self.labyrinthically,
+            martyrization: martyrization ?? self.martyrization,
+            mispolicy: mispolicy ?? self.mispolicy,
+            multipara: multipara ?? self.multipara,
+            nazirite: nazirite ?? self.nazirite,
+            nonbookish: nonbookish ?? self.nonbookish,
+            possessorial: possessorial ?? self.possessorial,
+            shamed: shamed ?? self.shamed,
+            shelfworn: shelfworn ?? self.shelfworn,
+            stagnum: stagnum ?? self.stagnum,
+            those: those ?? self.those,
+            undecimal: undecimal ?? self.undecimal
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum AnkeeElement: Codable, Sendable {
+    case ankeeClass(AnkeeClass)
+    case integer(Int)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(AnkeeClass.self) {
+            self = .ankeeClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(AnkeeElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for AnkeeElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .ankeeClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - AnkeeClass
+struct AnkeeClass: Codable, Sendable {
+    let anomoean: JSONNull?
+    let barleyhood: JSONNull?
+    let befriender: JSONNull?
+    let brutishness: JSONNull?
+    let cephalalgy: JSONNull?
+    let cirurgian: JSONNull?
+    let conventionally: JSONNull?
+    let jackshay: JSONNull?
+    let milammeter: JSONNull?
+    let naja: JSONNull?
+    let ombrological: JSONNull?
+    let phonasthenia: JSONNull?
+    let retrievableness: JSONNull?
+    let snakily: JSONNull?
+    let swot: JSONNull?
+    let tartlet: JSONNull?
+    let thiofuran: JSONNull?
+    let tracheophone: JSONNull?
+    let tuglike: JSONNull?
+    let unscratchingly: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case anomoean = "Anomoean"
+        case barleyhood = "barleyhood"
+        case befriender = "befriender"
+        case brutishness = "brutishness"
+        case cephalalgy = "cephalalgy"
+        case cirurgian = "cirurgian"
+        case conventionally = "conventionally"
+        case jackshay = "jackshay"
+        case milammeter = "milammeter"
+        case naja = "Naja"
+        case ombrological = "ombrological"
+        case phonasthenia = "phonasthenia"
+        case retrievableness = "retrievableness"
+        case snakily = "snakily"
+        case swot = "swot"
+        case tartlet = "tartlet"
+        case thiofuran = "thiofuran"
+        case tracheophone = "tracheophone"
+        case tuglike = "tuglike"
+        case unscratchingly = "unscratchingly"
+    }
+}
+
+// MARK: AnkeeClass convenience initializers and mutators
+
+extension AnkeeClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(AnkeeClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        anomoean: JSONNull?? = nil,
+        barleyhood: JSONNull?? = nil,
+        befriender: JSONNull?? = nil,
+        brutishness: JSONNull?? = nil,
+        cephalalgy: JSONNull?? = nil,
+        cirurgian: JSONNull?? = nil,
+        conventionally: JSONNull?? = nil,
+        jackshay: JSONNull?? = nil,
+        milammeter: JSONNull?? = nil,
+        naja: JSONNull?? = nil,
+        ombrological: JSONNull?? = nil,
+        phonasthenia: JSONNull?? = nil,
+        retrievableness: JSONNull?? = nil,
+        snakily: JSONNull?? = nil,
+        swot: JSONNull?? = nil,
+        tartlet: JSONNull?? = nil,
+        thiofuran: JSONNull?? = nil,
+        tracheophone: JSONNull?? = nil,
+        tuglike: JSONNull?? = nil,
+        unscratchingly: JSONNull?? = nil
+    ) -> AnkeeClass {
+        return AnkeeClass(
+            anomoean: anomoean ?? self.anomoean,
+            barleyhood: barleyhood ?? self.barleyhood,
+            befriender: befriender ?? self.befriender,
+            brutishness: brutishness ?? self.brutishness,
+            cephalalgy: cephalalgy ?? self.cephalalgy,
+            cirurgian: cirurgian ?? self.cirurgian,
+            conventionally: conventionally ?? self.conventionally,
+            jackshay: jackshay ?? self.jackshay,
+            milammeter: milammeter ?? self.milammeter,
+            naja: naja ?? self.naja,
+            ombrological: ombrological ?? self.ombrological,
+            phonasthenia: phonasthenia ?? self.phonasthenia,
+            retrievableness: retrievableness ?? self.retrievableness,
+            snakily: snakily ?? self.snakily,
+            swot: swot ?? self.swot,
+            tartlet: tartlet ?? self.tartlet,
+            thiofuran: thiofuran ?? self.thiofuran,
+            tracheophone: tracheophone ?? self.tracheophone,
+            tuglike: tuglike ?? self.tuglike,
+            unscratchingly: unscratchingly ?? self.unscratchingly
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum AnsarieElement: Codable, Sendable {
+    case ansarieClass(AnsarieClass)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(AnsarieClass.self) {
+            self = .ansarieClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(AnsarieElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for AnsarieElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .ansarieClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - AnsarieClass
+struct AnsarieClass: Codable, Sendable {
+    let accension: JSONNull?
+    let alida: JSONNull?
+    let asteria: JSONNull?
+    let beriberic: JSONNull?
+    let edgebone: JSONNull?
+    let gastrodialysis: JSONNull?
+    let geographic: JSONNull?
+    let ictonyx: JSONNull?
+    let metrocele: JSONNull?
+    let misgraft: JSONNull?
+    let monteith: JSONNull?
+    let notcher: JSONNull?
+    let prorestriction: JSONNull?
+    let ramist: JSONNull?
+    let throatlet: JSONNull?
+    let unfair: JSONNull?
+    let unsynonymous: JSONNull?
+    let water: JSONNull?
+    let zestfully: JSONNull?
+    let zincic: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case accension = "accension"
+        case alida = "Alida"
+        case asteria = "asteria"
+        case beriberic = "beriberic"
+        case edgebone = "edgebone"
+        case gastrodialysis = "gastrodialysis"
+        case geographic = "geographic"
+        case ictonyx = "Ictonyx"
+        case metrocele = "metrocele"
+        case misgraft = "misgraft"
+        case monteith = "monteith"
+        case notcher = "notcher"
+        case prorestriction = "prorestriction"
+        case ramist = "Ramist"
+        case throatlet = "throatlet"
+        case unfair = "unfair"
+        case unsynonymous = "unsynonymous"
+        case water = "water"
+        case zestfully = "zestfully"
+        case zincic = "zincic"
+    }
+}
+
+// MARK: AnsarieClass convenience initializers and mutators
+
+extension AnsarieClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(AnsarieClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        accension: JSONNull?? = nil,
+        alida: JSONNull?? = nil,
+        asteria: JSONNull?? = nil,
+        beriberic: JSONNull?? = nil,
+        edgebone: JSONNull?? = nil,
+        gastrodialysis: JSONNull?? = nil,
+        geographic: JSONNull?? = nil,
+        ictonyx: JSONNull?? = nil,
+        metrocele: JSONNull?? = nil,
+        misgraft: JSONNull?? = nil,
+        monteith: JSONNull?? = nil,
+        notcher: JSONNull?? = nil,
+        prorestriction: JSONNull?? = nil,
+        ramist: JSONNull?? = nil,
+        throatlet: JSONNull?? = nil,
+        unfair: JSONNull?? = nil,
+        unsynonymous: JSONNull?? = nil,
+        water: JSONNull?? = nil,
+        zestfully: JSONNull?? = nil,
+        zincic: JSONNull?? = nil
+    ) -> AnsarieClass {
+        return AnsarieClass(
+            accension: accension ?? self.accension,
+            alida: alida ?? self.alida,
+            asteria: asteria ?? self.asteria,
+            beriberic: beriberic ?? self.beriberic,
+            edgebone: edgebone ?? self.edgebone,
+            gastrodialysis: gastrodialysis ?? self.gastrodialysis,
+            geographic: geographic ?? self.geographic,
+            ictonyx: ictonyx ?? self.ictonyx,
+            metrocele: metrocele ?? self.metrocele,
+            misgraft: misgraft ?? self.misgraft,
+            monteith: monteith ?? self.monteith,
+            notcher: notcher ?? self.notcher,
+            prorestriction: prorestriction ?? self.prorestriction,
+            ramist: ramist ?? self.ramist,
+            throatlet: throatlet ?? self.throatlet,
+            unfair: unfair ?? self.unfair,
+            unsynonymous: unsynonymous ?? self.unsynonymous,
+            water: water ?? self.water,
+            zestfully: zestfully ?? self.zestfully,
+            zincic: zincic ?? self.zincic
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Aphasia: Codable, Sendable {
+    case integer(Int)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Aphasia.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Aphasia"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Asprawl: Codable, Sendable {
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Asprawl.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Asprawl"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Bedesman: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Bedesman.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Bedesman"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Belard: Codable, Sendable {
+    case double(Double)
+    case integerArray([Int])
+    case rebecca(Rebecca)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Belard.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Belard"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Bocking: Codable, Sendable {
+    case bool(Bool)
+    case integerArray([Int])
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Bocking.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Bocking"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Brawlingly: Codable, Sendable {
+    case nullArray([JSONNull?])
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Brawlingly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Brawlingly"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Brookie: Codable, Sendable {
+    case integerArray([Int])
+    case rebecca(Rebecca)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Brookie.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Brookie"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Bumboatman: Codable, Sendable {
+    case nullArray([JSONNull?])
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Bumboatman.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Bumboatman"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Calaverite: Codable, Sendable {
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Calaverite.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Calaverite"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Catallactic: Codable, Sendable {
+    case bool(Bool)
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Catallactic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Catallactic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Cemental: Codable, Sendable {
+    case double(Double)
+    case integerArray([Int])
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Cemental.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Cemental"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum ChytridiaceaeElement: Codable, Sendable {
+    case bool(Bool)
+    case chytridiaceaeClass(ChytridiaceaeClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(ChytridiaceaeClass.self) {
+            self = .chytridiaceaeClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(ChytridiaceaeElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for ChytridiaceaeElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .chytridiaceaeClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - ChytridiaceaeClass
+struct ChytridiaceaeClass: Codable, Sendable {
+    let batidaceae: JSONNull?
+    let brechites: JSONNull?
+    let codespairer: JSONNull?
+    let emery: JSONNull?
+    let enervative: JSONNull?
+    let excriminate: JSONNull?
+    let goshenite: JSONNull?
+    let grime: JSONNull?
+    let gritten: JSONNull?
+    let hectorly: JSONNull?
+    let intermediation: JSONNull?
+    let meeterly: JSONNull?
+    let narraganset: JSONNull?
+    let onymatic: JSONNull?
+    let paddlecock: JSONNull?
+    let thana: JSONNull?
+    let thornily: JSONNull?
+    let uckia: JSONNull?
+    let unmettle: JSONNull?
+    let vorticellid: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case batidaceae = "Batidaceae"
+        case brechites = "Brechites"
+        case codespairer = "codespairer"
+        case emery = "Emery"
+        case enervative = "enervative"
+        case excriminate = "excriminate"
+        case goshenite = "goshenite"
+        case grime = "grime"
+        case gritten = "gritten"
+        case hectorly = "hectorly"
+        case intermediation = "intermediation"
+        case meeterly = "meeterly"
+        case narraganset = "Narraganset"
+        case onymatic = "onymatic"
+        case paddlecock = "paddlecock"
+        case thana = "thana"
+        case thornily = "thornily"
+        case uckia = "uckia"
+        case unmettle = "unmettle"
+        case vorticellid = "vorticellid"
+    }
+}
+
+// MARK: ChytridiaceaeClass convenience initializers and mutators
+
+extension ChytridiaceaeClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(ChytridiaceaeClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        batidaceae: JSONNull?? = nil,
+        brechites: JSONNull?? = nil,
+        codespairer: JSONNull?? = nil,
+        emery: JSONNull?? = nil,
+        enervative: JSONNull?? = nil,
+        excriminate: JSONNull?? = nil,
+        goshenite: JSONNull?? = nil,
+        grime: JSONNull?? = nil,
+        gritten: JSONNull?? = nil,
+        hectorly: JSONNull?? = nil,
+        intermediation: JSONNull?? = nil,
+        meeterly: JSONNull?? = nil,
+        narraganset: JSONNull?? = nil,
+        onymatic: JSONNull?? = nil,
+        paddlecock: JSONNull?? = nil,
+        thana: JSONNull?? = nil,
+        thornily: JSONNull?? = nil,
+        uckia: JSONNull?? = nil,
+        unmettle: JSONNull?? = nil,
+        vorticellid: JSONNull?? = nil
+    ) -> ChytridiaceaeClass {
+        return ChytridiaceaeClass(
+            batidaceae: batidaceae ?? self.batidaceae,
+            brechites: brechites ?? self.brechites,
+            codespairer: codespairer ?? self.codespairer,
+            emery: emery ?? self.emery,
+            enervative: enervative ?? self.enervative,
+            excriminate: excriminate ?? self.excriminate,
+            goshenite: goshenite ?? self.goshenite,
+            grime: grime ?? self.grime,
+            gritten: gritten ?? self.gritten,
+            hectorly: hectorly ?? self.hectorly,
+            intermediation: intermediation ?? self.intermediation,
+            meeterly: meeterly ?? self.meeterly,
+            narraganset: narraganset ?? self.narraganset,
+            onymatic: onymatic ?? self.onymatic,
+            paddlecock: paddlecock ?? self.paddlecock,
+            thana: thana ?? self.thana,
+            thornily: thornily ?? self.thornily,
+            uckia: uckia ?? self.uckia,
+            unmettle: unmettle ?? self.unmettle,
+            vorticellid: vorticellid ?? self.vorticellid
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum DiscordiaElement: Codable, Sendable {
+    case discordiaClass(DiscordiaClass)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(DiscordiaClass.self) {
+            self = .discordiaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(DiscordiaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for DiscordiaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .discordiaClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - DiscordiaClass
+struct DiscordiaClass: Codable, Sendable {
+    let altaic: Int?
+    let amoristic: Int?
+    let blennophthalmia: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disciplinability: Int?
+    let disdiapason: String?
+    let goofer: Int?
+    let homocerc: Bool?
+    let laryngograph: Int?
+    let leucitis: Int?
+    let lymphocyst: Int?
+    let microcosmology: Int?
+    let nauseation: Int?
+    let nonbookish: JSONNull?
+    let patarin: Int?
+    let preliberal: Int?
+    let prettifier: Int?
+    let rangework: Int?
+    let redient: Int?
+    let subfusiform: Int?
+    let suicidical: Int?
+    let swow: Int?
+    let wastrel: Int?
+    let wingle: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case altaic = "Altaic"
+        case amoristic = "amoristic"
+        case blennophthalmia = "blennophthalmia"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disciplinability = "disciplinability"
+        case disdiapason = "disdiapason"
+        case goofer = "goofer"
+        case homocerc = "homocerc"
+        case laryngograph = "laryngograph"
+        case leucitis = "leucitis"
+        case lymphocyst = "lymphocyst"
+        case microcosmology = "microcosmology"
+        case nauseation = "nauseation"
+        case nonbookish = "nonbookish"
+        case patarin = "Patarin"
+        case preliberal = "preliberal"
+        case prettifier = "prettifier"
+        case rangework = "rangework"
+        case redient = "redient"
+        case subfusiform = "subfusiform"
+        case suicidical = "suicidical"
+        case swow = "swow"
+        case wastrel = "wastrel"
+        case wingle = "wingle"
+    }
+}
+
+// MARK: DiscordiaClass convenience initializers and mutators
+
+extension DiscordiaClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(DiscordiaClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        altaic: Int?? = nil,
+        amoristic: Int?? = nil,
+        blennophthalmia: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disciplinability: Int?? = nil,
+        disdiapason: String?? = nil,
+        goofer: Int?? = nil,
+        homocerc: Bool?? = nil,
+        laryngograph: Int?? = nil,
+        leucitis: Int?? = nil,
+        lymphocyst: Int?? = nil,
+        microcosmology: Int?? = nil,
+        nauseation: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        patarin: Int?? = nil,
+        preliberal: Int?? = nil,
+        prettifier: Int?? = nil,
+        rangework: Int?? = nil,
+        redient: Int?? = nil,
+        subfusiform: Int?? = nil,
+        suicidical: Int?? = nil,
+        swow: Int?? = nil,
+        wastrel: Int?? = nil,
+        wingle: Int?? = nil
+    ) -> DiscordiaClass {
+        return DiscordiaClass(
+            altaic: altaic ?? self.altaic,
+            amoristic: amoristic ?? self.amoristic,
+            blennophthalmia: blennophthalmia ?? self.blennophthalmia,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disciplinability: disciplinability ?? self.disciplinability,
+            disdiapason: disdiapason ?? self.disdiapason,
+            goofer: goofer ?? self.goofer,
+            homocerc: homocerc ?? self.homocerc,
+            laryngograph: laryngograph ?? self.laryngograph,
+            leucitis: leucitis ?? self.leucitis,
+            lymphocyst: lymphocyst ?? self.lymphocyst,
+            microcosmology: microcosmology ?? self.microcosmology,
+            nauseation: nauseation ?? self.nauseation,
+            nonbookish: nonbookish ?? self.nonbookish,
+            patarin: patarin ?? self.patarin,
+            preliberal: preliberal ?? self.preliberal,
+            prettifier: prettifier ?? self.prettifier,
+            rangework: rangework ?? self.rangework,
+            redient: redient ?? self.redient,
+            subfusiform: subfusiform ?? self.subfusiform,
+            suicidical: suicidical ?? self.suicidical,
+            swow: swow ?? self.swow,
+            wastrel: wastrel ?? self.wastrel,
+            wingle: wingle ?? self.wingle
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Endomyce: Codable, Sendable {
+    case integer(Int)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Endomyce.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Endomyce"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Epinephelidae: Codable, Sendable {
+    case bool(Bool)
+    case integer(Int)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Epinephelidae.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Epinephelidae"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Eupatorium: Codable, Sendable {
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Eupatorium.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Eupatorium"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum GryphosaurusElement: Codable, Sendable {
+    case gryphosaurusClass(GryphosaurusClass)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(GryphosaurusClass.self) {
+            self = .gryphosaurusClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(GryphosaurusElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for GryphosaurusElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .gryphosaurusClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - GryphosaurusClass
+struct GryphosaurusClass: Codable, Sendable {
+    let amissibility: JSONNull?
+    let burushaski: JSONNull?
+    let citronin: JSONNull?
+    let coplaintiff: JSONNull?
+    let disquisitionary: JSONNull?
+    let enoplan: JSONNull?
+    let faintness: JSONNull?
+    let hebetomy: JSONNull?
+    let islandry: JSONNull?
+    let lameduck: JSONNull?
+    let overbattle: JSONNull?
+    let overinterested: JSONNull?
+    let phrenologic: JSONNull?
+    let rainband: JSONNull?
+    let shiningly: JSONNull?
+    let stamineous: JSONNull?
+    let subscapularis: JSONNull?
+    let tahami: JSONNull?
+    let undaubed: JSONNull?
+    let underntime: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amissibility = "amissibility"
+        case burushaski = "Burushaski"
+        case citronin = "citronin"
+        case coplaintiff = "coplaintiff"
+        case disquisitionary = "disquisitionary"
+        case enoplan = "enoplan"
+        case faintness = "faintness"
+        case hebetomy = "hebetomy"
+        case islandry = "islandry"
+        case lameduck = "lameduck"
+        case overbattle = "overbattle"
+        case overinterested = "overinterested"
+        case phrenologic = "phrenologic"
+        case rainband = "rainband"
+        case shiningly = "shiningly"
+        case stamineous = "stamineous"
+        case subscapularis = "subscapularis"
+        case tahami = "Tahami"
+        case undaubed = "undaubed"
+        case underntime = "underntime"
+    }
+}
+
+// MARK: GryphosaurusClass convenience initializers and mutators
+
+extension GryphosaurusClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(GryphosaurusClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amissibility: JSONNull?? = nil,
+        burushaski: JSONNull?? = nil,
+        citronin: JSONNull?? = nil,
+        coplaintiff: JSONNull?? = nil,
+        disquisitionary: JSONNull?? = nil,
+        enoplan: JSONNull?? = nil,
+        faintness: JSONNull?? = nil,
+        hebetomy: JSONNull?? = nil,
+        islandry: JSONNull?? = nil,
+        lameduck: JSONNull?? = nil,
+        overbattle: JSONNull?? = nil,
+        overinterested: JSONNull?? = nil,
+        phrenologic: JSONNull?? = nil,
+        rainband: JSONNull?? = nil,
+        shiningly: JSONNull?? = nil,
+        stamineous: JSONNull?? = nil,
+        subscapularis: JSONNull?? = nil,
+        tahami: JSONNull?? = nil,
+        undaubed: JSONNull?? = nil,
+        underntime: JSONNull?? = nil
+    ) -> GryphosaurusClass {
+        return GryphosaurusClass(
+            amissibility: amissibility ?? self.amissibility,
+            burushaski: burushaski ?? self.burushaski,
+            citronin: citronin ?? self.citronin,
+            coplaintiff: coplaintiff ?? self.coplaintiff,
+            disquisitionary: disquisitionary ?? self.disquisitionary,
+            enoplan: enoplan ?? self.enoplan,
+            faintness: faintness ?? self.faintness,
+            hebetomy: hebetomy ?? self.hebetomy,
+            islandry: islandry ?? self.islandry,
+            lameduck: lameduck ?? self.lameduck,
+            overbattle: overbattle ?? self.overbattle,
+            overinterested: overinterested ?? self.overinterested,
+            phrenologic: phrenologic ?? self.phrenologic,
+            rainband: rainband ?? self.rainband,
+            shiningly: shiningly ?? self.shiningly,
+            stamineous: stamineous ?? self.stamineous,
+            subscapularis: subscapularis ?? self.subscapularis,
+            tahami: tahami ?? self.tahami,
+            undaubed: undaubed ?? self.undaubed,
+            underntime: underntime ?? self.underntime
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Koryak: Codable, Sendable {
+    case string(String)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Koryak.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Koryak"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .string(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum LaviniaElement: Codable, Sendable {
+    case laviniaClass(LaviniaClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(LaviniaClass.self) {
+            self = .laviniaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(LaviniaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LaviniaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .laviniaClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - LaviniaClass
+struct LaviniaClass: Codable, Sendable {
+    let agitable: Int?
+    let asininity: Int?
+    let benefiter: Int?
+    let bronzelike: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let cholesteatomatous: Int?
+    let deprivement: Int?
+    let disdiapason: String?
+    let flippantness: Int?
+    let fogproof: Int?
+    let homocerc: Bool?
+    let merrymeeting: Int?
+    let nonbookish: JSONNull?
+    let overcareful: Int?
+    let panaris: Int?
+    let preacceptance: Int?
+    let quinoxaline: Int?
+    let sig: Int?
+    let superconfusion: Int?
+    let tacana: Int?
+    let tillotter: Int?
+    let tranquillize: Int?
+    let unquestionable: Int?
+    let uproute: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case agitable = "agitable"
+        case asininity = "asininity"
+        case benefiter = "benefiter"
+        case bronzelike = "bronzelike"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case cholesteatomatous = "cholesteatomatous"
+        case deprivement = "deprivement"
+        case disdiapason = "disdiapason"
+        case flippantness = "flippantness"
+        case fogproof = "fogproof"
+        case homocerc = "homocerc"
+        case merrymeeting = "merrymeeting"
+        case nonbookish = "nonbookish"
+        case overcareful = "overcareful"
+        case panaris = "panaris"
+        case preacceptance = "preacceptance"
+        case quinoxaline = "quinoxaline"
+        case sig = "sig"
+        case superconfusion = "superconfusion"
+        case tacana = "Tacana"
+        case tillotter = "tillotter"
+        case tranquillize = "tranquillize"
+        case unquestionable = "unquestionable"
+        case uproute = "uproute"
+    }
+}
+
+// MARK: LaviniaClass convenience initializers and mutators
+
+extension LaviniaClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(LaviniaClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        agitable: Int?? = nil,
+        asininity: Int?? = nil,
+        benefiter: Int?? = nil,
+        bronzelike: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        cholesteatomatous: Int?? = nil,
+        deprivement: Int?? = nil,
+        disdiapason: String?? = nil,
+        flippantness: Int?? = nil,
+        fogproof: Int?? = nil,
+        homocerc: Bool?? = nil,
+        merrymeeting: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        overcareful: Int?? = nil,
+        panaris: Int?? = nil,
+        preacceptance: Int?? = nil,
+        quinoxaline: Int?? = nil,
+        sig: Int?? = nil,
+        superconfusion: Int?? = nil,
+        tacana: Int?? = nil,
+        tillotter: Int?? = nil,
+        tranquillize: Int?? = nil,
+        unquestionable: Int?? = nil,
+        uproute: Int?? = nil
+    ) -> LaviniaClass {
+        return LaviniaClass(
+            agitable: agitable ?? self.agitable,
+            asininity: asininity ?? self.asininity,
+            benefiter: benefiter ?? self.benefiter,
+            bronzelike: bronzelike ?? self.bronzelike,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            cholesteatomatous: cholesteatomatous ?? self.cholesteatomatous,
+            deprivement: deprivement ?? self.deprivement,
+            disdiapason: disdiapason ?? self.disdiapason,
+            flippantness: flippantness ?? self.flippantness,
+            fogproof: fogproof ?? self.fogproof,
+            homocerc: homocerc ?? self.homocerc,
+            merrymeeting: merrymeeting ?? self.merrymeeting,
+            nonbookish: nonbookish ?? self.nonbookish,
+            overcareful: overcareful ?? self.overcareful,
+            panaris: panaris ?? self.panaris,
+            preacceptance: preacceptance ?? self.preacceptance,
+            quinoxaline: quinoxaline ?? self.quinoxaline,
+            sig: sig ?? self.sig,
+            superconfusion: superconfusion ?? self.superconfusion,
+            tacana: tacana ?? self.tacana,
+            tillotter: tillotter ?? self.tillotter,
+            tranquillize: tranquillize ?? self.tranquillize,
+            unquestionable: unquestionable ?? self.unquestionable,
+            uproute: uproute ?? self.uproute
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum OskarElement: Codable, Sendable {
+    case integerArray([Int])
+    case oskarClass(OskarClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(OskarClass.self) {
+            self = .oskarClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(OskarElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for OskarElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .oskarClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - OskarClass
+struct OskarClass: Codable, Sendable {
+    let acrobates: JSONNull?
+    let beanshooter: JSONNull?
+    let bearhound: JSONNull?
+    let cayuga: JSONNull?
+    let guarneri: JSONNull?
+    let hypochondriacism: JSONNull?
+    let indication: JSONNull?
+    let jaculative: JSONNull?
+    let nagana: JSONNull?
+    let netherlandish: JSONNull?
+    let noctivagous: JSONNull?
+    let nonphysiological: JSONNull?
+    let praxis: JSONNull?
+    let provision: JSONNull?
+    let subterhuman: JSONNull?
+    let sunlit: JSONNull?
+    let syncraniate: JSONNull?
+    let teachment: JSONNull?
+    let unmutinous: JSONNull?
+    let unstoppable: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acrobates = "Acrobates"
+        case beanshooter = "beanshooter"
+        case bearhound = "bearhound"
+        case cayuga = "Cayuga"
+        case guarneri = "guarneri"
+        case hypochondriacism = "hypochondriacism"
+        case indication = "indication"
+        case jaculative = "jaculative"
+        case nagana = "nagana"
+        case netherlandish = "Netherlandish"
+        case noctivagous = "noctivagous"
+        case nonphysiological = "nonphysiological"
+        case praxis = "praxis"
+        case provision = "provision"
+        case subterhuman = "subterhuman"
+        case sunlit = "sunlit"
+        case syncraniate = "syncraniate"
+        case teachment = "teachment"
+        case unmutinous = "unmutinous"
+        case unstoppable = "unstoppable"
+    }
+}
+
+// MARK: OskarClass convenience initializers and mutators
+
+extension OskarClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(OskarClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acrobates: JSONNull?? = nil,
+        beanshooter: JSONNull?? = nil,
+        bearhound: JSONNull?? = nil,
+        cayuga: JSONNull?? = nil,
+        guarneri: JSONNull?? = nil,
+        hypochondriacism: JSONNull?? = nil,
+        indication: JSONNull?? = nil,
+        jaculative: JSONNull?? = nil,
+        nagana: JSONNull?? = nil,
+        netherlandish: JSONNull?? = nil,
+        noctivagous: JSONNull?? = nil,
+        nonphysiological: JSONNull?? = nil,
+        praxis: JSONNull?? = nil,
+        provision: JSONNull?? = nil,
+        subterhuman: JSONNull?? = nil,
+        sunlit: JSONNull?? = nil,
+        syncraniate: JSONNull?? = nil,
+        teachment: JSONNull?? = nil,
+        unmutinous: JSONNull?? = nil,
+        unstoppable: JSONNull?? = nil
+    ) -> OskarClass {
+        return OskarClass(
+            acrobates: acrobates ?? self.acrobates,
+            beanshooter: beanshooter ?? self.beanshooter,
+            bearhound: bearhound ?? self.bearhound,
+            cayuga: cayuga ?? self.cayuga,
+            guarneri: guarneri ?? self.guarneri,
+            hypochondriacism: hypochondriacism ?? self.hypochondriacism,
+            indication: indication ?? self.indication,
+            jaculative: jaculative ?? self.jaculative,
+            nagana: nagana ?? self.nagana,
+            netherlandish: netherlandish ?? self.netherlandish,
+            noctivagous: noctivagous ?? self.noctivagous,
+            nonphysiological: nonphysiological ?? self.nonphysiological,
+            praxis: praxis ?? self.praxis,
+            provision: provision ?? self.provision,
+            subterhuman: subterhuman ?? self.subterhuman,
+            sunlit: sunlit ?? self.sunlit,
+            syncraniate: syncraniate ?? self.syncraniate,
+            teachment: teachment ?? self.teachment,
+            unmutinous: unmutinous ?? self.unmutinous,
+            unstoppable: unstoppable ?? self.unstoppable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum RebeccaElement: Codable, Sendable {
+    case integer(Int)
+    case rebecca(Rebecca)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(RebeccaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for RebeccaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Rhomboganoidei: Codable, Sendable {
+    case integerArray([Int])
+    case rebecca(Rebecca)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Rhomboganoidei.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Rhomboganoidei"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Ruellia: Codable, Sendable {
+    case bool(Bool)
+    case rebecca(Rebecca)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Ruellia.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Ruellia"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum School: Codable, Sendable {
+    case integer(Int)
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(School.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for School"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Shakespearolater: Codable, Sendable {
+    case double(Double)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Shakespearolater.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Shakespearolater"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+final class JSONNull: Codable, Hashable, Sendable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    public func hash(into hasher: inout Hasher) {
+        hasher.combine(0)
+    }
+
+    public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/head/swift/test/inputs/json/priority/combinations2.json/sendable-true__struct-or-class-class--265b1fe2e96e/quicktype.swift b/head/swift/test/inputs/json/priority/combinations2.json/sendable-true__struct-or-class-class--265b1fe2e96e/quicktype.swift
new file mode 100644
index 0000000..1cbf677
--- /dev/null
+++ b/head/swift/test/inputs/json/priority/combinations2.json/sendable-true__struct-or-class-class--265b1fe2e96e/quicktype.swift
@@ -0,0 +1,2891 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+import Foundation
+
+// MARK: - TopLevel
+final class TopLevel: Codable, Sendable {
+    let abranchiata: [Abranchiata]
+    let academe: [Academe]
+    let acquirable: [Acquirable]
+    let aerometry: [Aerometry]
+    let alexin: [Alexin]
+    let alleviate: [AlleviateElement]
+    let amaas: [Amaa]
+    let ambassage: [Ambassage]
+    let amphithyron: [Amphithyron?]
+    let andriana: [String?]
+    let ankee: [AnkeeElement]
+    let annihilator: [[String: Int?]?]
+    let annulose: JSONNull?
+    let ansarie: [AnsarieElement]
+    let aphasia: [Aphasia]
+    let asprawl: [Asprawl]
+    let attractive: [Bool?]
+    let barksome: [String: Int]
+    let bedesman: [Bedesman]
+    let belard: [Belard]
+    let bocking: [Bocking]
+    let brawlingly: [Brawlingly]
+    let brookie: [Brookie]
+    let bumboatman: [Bumboatman]
+    let bystreet: [JSONNull?]
+    let calaverite: [Calaverite]
+    let catallactic: [Catallactic]
+    let cemental: [Cemental]
+    let chytridiaceae: [ChytridiaceaeElement]
+    let discordia: [DiscordiaElement]
+    let endomyces: [Endomyce]
+    let epinephelidae: [Epinephelidae]
+    let eupatorium: [Eupatorium]
+    let gryphosaurus: [GryphosaurusElement]
+    let koryak: [Koryak]
+    let lavinia: [LaviniaElement]
+    let oskar: [OskarElement]
+    let rebecca: [RebeccaElement]
+    let rhomboganoidei: [Rhomboganoidei]
+    let rigsmal: Bool
+    let ruellia: [Ruellia]
+    let school: [School]
+    let shakespearolater: [Shakespearolater]
+    let svan: [Double]
+    let wayao: [String: Double]
+
+    enum CodingKeys: String, CodingKey {
+        case abranchiata = "Abranchiata"
+        case academe = "academe"
+        case acquirable = "acquirable"
+        case aerometry = "aerometry"
+        case alexin = "alexin"
+        case alleviate = "alleviate"
+        case amaas = "amaas"
+        case ambassage = "ambassage"
+        case amphithyron = "amphithyron"
+        case andriana = "Andriana"
+        case ankee = "ankee"
+        case annihilator = "annihilator"
+        case annulose = "annulose"
+        case ansarie = "Ansarie"
+        case aphasia = "aphasia"
+        case asprawl = "asprawl"
+        case attractive = "attractive"
+        case barksome = "barksome"
+        case bedesman = "bedesman"
+        case belard = "belard"
+        case bocking = "bocking"
+        case brawlingly = "brawlingly"
+        case brookie = "brookie"
+        case bumboatman = "bumboatman"
+        case bystreet = "bystreet"
+        case calaverite = "calaverite"
+        case catallactic = "catallactic"
+        case cemental = "cemental"
+        case chytridiaceae = "Chytridiaceae"
+        case discordia = "Discordia"
+        case endomyces = "Endomyces"
+        case epinephelidae = "Epinephelidae"
+        case eupatorium = "Eupatorium"
+        case gryphosaurus = "Gryphosaurus"
+        case koryak = "Koryak"
+        case lavinia = "Lavinia"
+        case oskar = "Oskar"
+        case rebecca = "Rebecca"
+        case rhomboganoidei = "Rhomboganoidei"
+        case rigsmal = "Rigsmal"
+        case ruellia = "Ruellia"
+        case school = "School"
+        case shakespearolater = "Shakespearolater"
+        case svan = "Svan"
+        case wayao = "Wayao"
+    }
+
+    init(abranchiata: [Abranchiata], academe: [Academe], acquirable: [Acquirable], aerometry: [Aerometry], alexin: [Alexin], alleviate: [AlleviateElement], amaas: [Amaa], ambassage: [Ambassage], amphithyron: [Amphithyron?], andriana: [String?], ankee: [AnkeeElement], annihilator: [[String: Int?]?], annulose: JSONNull?, ansarie: [AnsarieElement], aphasia: [Aphasia], asprawl: [Asprawl], attractive: [Bool?], barksome: [String: Int], bedesman: [Bedesman], belard: [Belard], bocking: [Bocking], brawlingly: [Brawlingly], brookie: [Brookie], bumboatman: [Bumboatman], bystreet: [JSONNull?], calaverite: [Calaverite], catallactic: [Catallactic], cemental: [Cemental], chytridiaceae: [ChytridiaceaeElement], discordia: [DiscordiaElement], endomyces: [Endomyce], epinephelidae: [Epinephelidae], eupatorium: [Eupatorium], gryphosaurus: [GryphosaurusElement], koryak: [Koryak], lavinia: [LaviniaElement], oskar: [OskarElement], rebecca: [RebeccaElement], rhomboganoidei: [Rhomboganoidei], rigsmal: Bool, ruellia: [Ruellia], school: [School], shakespearolater: [Shakespearolater], svan: [Double], wayao: [String: Double]) {
+        self.abranchiata = abranchiata
+        self.academe = academe
+        self.acquirable = acquirable
+        self.aerometry = aerometry
+        self.alexin = alexin
+        self.alleviate = alleviate
+        self.amaas = amaas
+        self.ambassage = ambassage
+        self.amphithyron = amphithyron
+        self.andriana = andriana
+        self.ankee = ankee
+        self.annihilator = annihilator
+        self.annulose = annulose
+        self.ansarie = ansarie
+        self.aphasia = aphasia
+        self.asprawl = asprawl
+        self.attractive = attractive
+        self.barksome = barksome
+        self.bedesman = bedesman
+        self.belard = belard
+        self.bocking = bocking
+        self.brawlingly = brawlingly
+        self.brookie = brookie
+        self.bumboatman = bumboatman
+        self.bystreet = bystreet
+        self.calaverite = calaverite
+        self.catallactic = catallactic
+        self.cemental = cemental
+        self.chytridiaceae = chytridiaceae
+        self.discordia = discordia
+        self.endomyces = endomyces
+        self.epinephelidae = epinephelidae
+        self.eupatorium = eupatorium
+        self.gryphosaurus = gryphosaurus
+        self.koryak = koryak
+        self.lavinia = lavinia
+        self.oskar = oskar
+        self.rebecca = rebecca
+        self.rhomboganoidei = rhomboganoidei
+        self.rigsmal = rigsmal
+        self.ruellia = ruellia
+        self.school = school
+        self.shakespearolater = shakespearolater
+        self.svan = svan
+        self.wayao = wayao
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(TopLevel.self, from: data)
+        self.init(abranchiata: me.abranchiata, academe: me.academe, acquirable: me.acquirable, aerometry: me.aerometry, alexin: me.alexin, alleviate: me.alleviate, amaas: me.amaas, ambassage: me.ambassage, amphithyron: me.amphithyron, andriana: me.andriana, ankee: me.ankee, annihilator: me.annihilator, annulose: me.annulose, ansarie: me.ansarie, aphasia: me.aphasia, asprawl: me.asprawl, attractive: me.attractive, barksome: me.barksome, bedesman: me.bedesman, belard: me.belard, bocking: me.bocking, brawlingly: me.brawlingly, brookie: me.brookie, bumboatman: me.bumboatman, bystreet: me.bystreet, calaverite: me.calaverite, catallactic: me.catallactic, cemental: me.cemental, chytridiaceae: me.chytridiaceae, discordia: me.discordia, endomyces: me.endomyces, epinephelidae: me.epinephelidae, eupatorium: me.eupatorium, gryphosaurus: me.gryphosaurus, koryak: me.koryak, lavinia: me.lavinia, oskar: me.oskar, rebecca: me.rebecca, rhomboganoidei: me.rhomboganoidei, rigsmal: me.rigsmal, ruellia: me.ruellia, school: me.school, shakespearolater: me.shakespearolater, svan: me.svan, wayao: me.wayao)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        abranchiata: [Abranchiata]? = nil,
+        academe: [Academe]? = nil,
+        acquirable: [Acquirable]? = nil,
+        aerometry: [Aerometry]? = nil,
+        alexin: [Alexin]? = nil,
+        alleviate: [AlleviateElement]? = nil,
+        amaas: [Amaa]? = nil,
+        ambassage: [Ambassage]? = nil,
+        amphithyron: [Amphithyron?]? = nil,
+        andriana: [String?]? = nil,
+        ankee: [AnkeeElement]? = nil,
+        annihilator: [[String: Int?]?]? = nil,
+        annulose: JSONNull?? = nil,
+        ansarie: [AnsarieElement]? = nil,
+        aphasia: [Aphasia]? = nil,
+        asprawl: [Asprawl]? = nil,
+        attractive: [Bool?]? = nil,
+        barksome: [String: Int]? = nil,
+        bedesman: [Bedesman]? = nil,
+        belard: [Belard]? = nil,
+        bocking: [Bocking]? = nil,
+        brawlingly: [Brawlingly]? = nil,
+        brookie: [Brookie]? = nil,
+        bumboatman: [Bumboatman]? = nil,
+        bystreet: [JSONNull?]? = nil,
+        calaverite: [Calaverite]? = nil,
+        catallactic: [Catallactic]? = nil,
+        cemental: [Cemental]? = nil,
+        chytridiaceae: [ChytridiaceaeElement]? = nil,
+        discordia: [DiscordiaElement]? = nil,
+        endomyces: [Endomyce]? = nil,
+        epinephelidae: [Epinephelidae]? = nil,
+        eupatorium: [Eupatorium]? = nil,
+        gryphosaurus: [GryphosaurusElement]? = nil,
+        koryak: [Koryak]? = nil,
+        lavinia: [LaviniaElement]? = nil,
+        oskar: [OskarElement]? = nil,
+        rebecca: [RebeccaElement]? = nil,
+        rhomboganoidei: [Rhomboganoidei]? = nil,
+        rigsmal: Bool? = nil,
+        ruellia: [Ruellia]? = nil,
+        school: [School]? = nil,
+        shakespearolater: [Shakespearolater]? = nil,
+        svan: [Double]? = nil,
+        wayao: [String: Double]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            abranchiata: abranchiata ?? self.abranchiata,
+            academe: academe ?? self.academe,
+            acquirable: acquirable ?? self.acquirable,
+            aerometry: aerometry ?? self.aerometry,
+            alexin: alexin ?? self.alexin,
+            alleviate: alleviate ?? self.alleviate,
+            amaas: amaas ?? self.amaas,
+            ambassage: ambassage ?? self.ambassage,
+            amphithyron: amphithyron ?? self.amphithyron,
+            andriana: andriana ?? self.andriana,
+            ankee: ankee ?? self.ankee,
+            annihilator: annihilator ?? self.annihilator,
+            annulose: annulose ?? self.annulose,
+            ansarie: ansarie ?? self.ansarie,
+            aphasia: aphasia ?? self.aphasia,
+            asprawl: asprawl ?? self.asprawl,
+            attractive: attractive ?? self.attractive,
+            barksome: barksome ?? self.barksome,
+            bedesman: bedesman ?? self.bedesman,
+            belard: belard ?? self.belard,
+            bocking: bocking ?? self.bocking,
+            brawlingly: brawlingly ?? self.brawlingly,
+            brookie: brookie ?? self.brookie,
+            bumboatman: bumboatman ?? self.bumboatman,
+            bystreet: bystreet ?? self.bystreet,
+            calaverite: calaverite ?? self.calaverite,
+            catallactic: catallactic ?? self.catallactic,
+            cemental: cemental ?? self.cemental,
+            chytridiaceae: chytridiaceae ?? self.chytridiaceae,
+            discordia: discordia ?? self.discordia,
+            endomyces: endomyces ?? self.endomyces,
+            epinephelidae: epinephelidae ?? self.epinephelidae,
+            eupatorium: eupatorium ?? self.eupatorium,
+            gryphosaurus: gryphosaurus ?? self.gryphosaurus,
+            koryak: koryak ?? self.koryak,
+            lavinia: lavinia ?? self.lavinia,
+            oskar: oskar ?? self.oskar,
+            rebecca: rebecca ?? self.rebecca,
+            rhomboganoidei: rhomboganoidei ?? self.rhomboganoidei,
+            rigsmal: rigsmal ?? self.rigsmal,
+            ruellia: ruellia ?? self.ruellia,
+            school: school ?? self.school,
+            shakespearolater: shakespearolater ?? self.shakespearolater,
+            svan: svan ?? self.svan,
+            wayao: wayao ?? self.wayao
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Abranchiata: Codable, Sendable {
+    case integer(Int)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Abranchiata.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Abranchiata"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Academe: Codable, Sendable {
+    case integer(Int)
+    case integerArray([Int])
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Academe.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Academe"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Acquirable: Codable, Sendable {
+    case integerMap([String: Int])
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Acquirable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Acquirable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Aerometry: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Aerometry.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Aerometry"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Alexin: Codable, Sendable {
+    case bool(Bool)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Alexin.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Alexin"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum AlleviateElement: Codable, Sendable {
+    case alleviateClass(AlleviateClass)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode(AlleviateClass.self) {
+            self = .alleviateClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(AlleviateElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for AlleviateElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .alleviateClass(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - AlleviateClass
+final class AlleviateClass: Codable, Sendable {
+    let apriori: JSONNull?
+    let beggarer: JSONNull?
+    let brokenheartedly: JSONNull?
+    let debilitation: JSONNull?
+    let frike: JSONNull?
+    let gastrolith: JSONNull?
+    let hulsean: JSONNull?
+    let orthocentric: JSONNull?
+    let petaly: JSONNull?
+    let probudgeting: JSONNull?
+    let reacquire: JSONNull?
+    let scow: JSONNull?
+    let shutoff: JSONNull?
+    let subcontiguous: JSONNull?
+    let suffumigate: JSONNull?
+    let transformable: JSONNull?
+    let uncoroneted: JSONNull?
+    let unparking: JSONNull?
+    let unvarnishedness: JSONNull?
+    let wherewithal: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case apriori = "apriori"
+        case beggarer = "beggarer"
+        case brokenheartedly = "brokenheartedly"
+        case debilitation = "debilitation"
+        case frike = "frike"
+        case gastrolith = "gastrolith"
+        case hulsean = "Hulsean"
+        case orthocentric = "orthocentric"
+        case petaly = "petaly"
+        case probudgeting = "probudgeting"
+        case reacquire = "reacquire"
+        case scow = "scow"
+        case shutoff = "shutoff"
+        case subcontiguous = "subcontiguous"
+        case suffumigate = "suffumigate"
+        case transformable = "transformable"
+        case uncoroneted = "uncoroneted"
+        case unparking = "unparking"
+        case unvarnishedness = "unvarnishedness"
+        case wherewithal = "wherewithal"
+    }
+
+    init(apriori: JSONNull?, beggarer: JSONNull?, brokenheartedly: JSONNull?, debilitation: JSONNull?, frike: JSONNull?, gastrolith: JSONNull?, hulsean: JSONNull?, orthocentric: JSONNull?, petaly: JSONNull?, probudgeting: JSONNull?, reacquire: JSONNull?, scow: JSONNull?, shutoff: JSONNull?, subcontiguous: JSONNull?, suffumigate: JSONNull?, transformable: JSONNull?, uncoroneted: JSONNull?, unparking: JSONNull?, unvarnishedness: JSONNull?, wherewithal: JSONNull?) {
+        self.apriori = apriori
+        self.beggarer = beggarer
+        self.brokenheartedly = brokenheartedly
+        self.debilitation = debilitation
+        self.frike = frike
+        self.gastrolith = gastrolith
+        self.hulsean = hulsean
+        self.orthocentric = orthocentric
+        self.petaly = petaly
+        self.probudgeting = probudgeting
+        self.reacquire = reacquire
+        self.scow = scow
+        self.shutoff = shutoff
+        self.subcontiguous = subcontiguous
+        self.suffumigate = suffumigate
+        self.transformable = transformable
+        self.uncoroneted = uncoroneted
+        self.unparking = unparking
+        self.unvarnishedness = unvarnishedness
+        self.wherewithal = wherewithal
+    }
+}
+
+// MARK: AlleviateClass convenience initializers and mutators
+
+extension AlleviateClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(AlleviateClass.self, from: data)
+        self.init(apriori: me.apriori, beggarer: me.beggarer, brokenheartedly: me.brokenheartedly, debilitation: me.debilitation, frike: me.frike, gastrolith: me.gastrolith, hulsean: me.hulsean, orthocentric: me.orthocentric, petaly: me.petaly, probudgeting: me.probudgeting, reacquire: me.reacquire, scow: me.scow, shutoff: me.shutoff, subcontiguous: me.subcontiguous, suffumigate: me.suffumigate, transformable: me.transformable, uncoroneted: me.uncoroneted, unparking: me.unparking, unvarnishedness: me.unvarnishedness, wherewithal: me.wherewithal)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apriori: JSONNull?? = nil,
+        beggarer: JSONNull?? = nil,
+        brokenheartedly: JSONNull?? = nil,
+        debilitation: JSONNull?? = nil,
+        frike: JSONNull?? = nil,
+        gastrolith: JSONNull?? = nil,
+        hulsean: JSONNull?? = nil,
+        orthocentric: JSONNull?? = nil,
+        petaly: JSONNull?? = nil,
+        probudgeting: JSONNull?? = nil,
+        reacquire: JSONNull?? = nil,
+        scow: JSONNull?? = nil,
+        shutoff: JSONNull?? = nil,
+        subcontiguous: JSONNull?? = nil,
+        suffumigate: JSONNull?? = nil,
+        transformable: JSONNull?? = nil,
+        uncoroneted: JSONNull?? = nil,
+        unparking: JSONNull?? = nil,
+        unvarnishedness: JSONNull?? = nil,
+        wherewithal: JSONNull?? = nil
+    ) -> AlleviateClass {
+        return AlleviateClass(
+            apriori: apriori ?? self.apriori,
+            beggarer: beggarer ?? self.beggarer,
+            brokenheartedly: brokenheartedly ?? self.brokenheartedly,
+            debilitation: debilitation ?? self.debilitation,
+            frike: frike ?? self.frike,
+            gastrolith: gastrolith ?? self.gastrolith,
+            hulsean: hulsean ?? self.hulsean,
+            orthocentric: orthocentric ?? self.orthocentric,
+            petaly: petaly ?? self.petaly,
+            probudgeting: probudgeting ?? self.probudgeting,
+            reacquire: reacquire ?? self.reacquire,
+            scow: scow ?? self.scow,
+            shutoff: shutoff ?? self.shutoff,
+            subcontiguous: subcontiguous ?? self.subcontiguous,
+            suffumigate: suffumigate ?? self.suffumigate,
+            transformable: transformable ?? self.transformable,
+            uncoroneted: uncoroneted ?? self.uncoroneted,
+            unparking: unparking ?? self.unparking,
+            unvarnishedness: unvarnishedness ?? self.unvarnishedness,
+            wherewithal: wherewithal ?? self.wherewithal
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Amaa: Codable, Sendable {
+    case bool(Bool)
+    case integer(Int)
+    case rebecca(Rebecca)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Amaa.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Amaa"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Rebecca
+final class Rebecca: Codable, Sendable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+
+    init(catharticalness: Double, chirotherium: Int, disdiapason: String, homocerc: Bool, nonbookish: JSONNull?) {
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.homocerc = homocerc
+        self.nonbookish = nonbookish
+    }
+}
+
+// MARK: Rebecca convenience initializers and mutators
+
+extension Rebecca {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Rebecca.self, from: data)
+        self.init(catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, homocerc: me.homocerc, nonbookish: me.nonbookish)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> Rebecca {
+        return Rebecca(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Ambassage: Codable, Sendable {
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Ambassage.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Ambassage"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Amphithyron
+final class Amphithyron: Codable, Sendable {
+    let akroasis: Int?
+    let antiphonical: Int?
+    let basebred: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let conductometric: Int?
+    let disdiapason: String?
+    let ensilation: Int?
+    let eyebolt: Int?
+    let fistulated: Int?
+    let heteropod: Int?
+    let homocerc: Bool?
+    let juniperus: Int?
+    let labyrinthically: Int?
+    let martyrization: Int?
+    let mispolicy: Int?
+    let multipara: Int?
+    let nazirite: Int?
+    let nonbookish: JSONNull?
+    let possessorial: Int?
+    let shamed: Int?
+    let shelfworn: Int?
+    let stagnum: Int?
+    let those: Int?
+    let undecimal: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case akroasis = "akroasis"
+        case antiphonical = "antiphonical"
+        case basebred = "basebred"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case conductometric = "conductometric"
+        case disdiapason = "disdiapason"
+        case ensilation = "ensilation"
+        case eyebolt = "eyebolt"
+        case fistulated = "fistulated"
+        case heteropod = "heteropod"
+        case homocerc = "homocerc"
+        case juniperus = "Juniperus"
+        case labyrinthically = "labyrinthically"
+        case martyrization = "martyrization"
+        case mispolicy = "mispolicy"
+        case multipara = "multipara"
+        case nazirite = "Nazirite"
+        case nonbookish = "nonbookish"
+        case possessorial = "possessorial"
+        case shamed = "shamed"
+        case shelfworn = "shelfworn"
+        case stagnum = "stagnum"
+        case those = "Those"
+        case undecimal = "undecimal"
+    }
+
+    init(akroasis: Int?, antiphonical: Int?, basebred: Int?, catharticalness: Double?, chirotherium: Int?, conductometric: Int?, disdiapason: String?, ensilation: Int?, eyebolt: Int?, fistulated: Int?, heteropod: Int?, homocerc: Bool?, juniperus: Int?, labyrinthically: Int?, martyrization: Int?, mispolicy: Int?, multipara: Int?, nazirite: Int?, nonbookish: JSONNull?, possessorial: Int?, shamed: Int?, shelfworn: Int?, stagnum: Int?, those: Int?, undecimal: Int?) {
+        self.akroasis = akroasis
+        self.antiphonical = antiphonical
+        self.basebred = basebred
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.conductometric = conductometric
+        self.disdiapason = disdiapason
+        self.ensilation = ensilation
+        self.eyebolt = eyebolt
+        self.fistulated = fistulated
+        self.heteropod = heteropod
+        self.homocerc = homocerc
+        self.juniperus = juniperus
+        self.labyrinthically = labyrinthically
+        self.martyrization = martyrization
+        self.mispolicy = mispolicy
+        self.multipara = multipara
+        self.nazirite = nazirite
+        self.nonbookish = nonbookish
+        self.possessorial = possessorial
+        self.shamed = shamed
+        self.shelfworn = shelfworn
+        self.stagnum = stagnum
+        self.those = those
+        self.undecimal = undecimal
+    }
+}
+
+// MARK: Amphithyron convenience initializers and mutators
+
+extension Amphithyron {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Amphithyron.self, from: data)
+        self.init(akroasis: me.akroasis, antiphonical: me.antiphonical, basebred: me.basebred, catharticalness: me.catharticalness, chirotherium: me.chirotherium, conductometric: me.conductometric, disdiapason: me.disdiapason, ensilation: me.ensilation, eyebolt: me.eyebolt, fistulated: me.fistulated, heteropod: me.heteropod, homocerc: me.homocerc, juniperus: me.juniperus, labyrinthically: me.labyrinthically, martyrization: me.martyrization, mispolicy: me.mispolicy, multipara: me.multipara, nazirite: me.nazirite, nonbookish: me.nonbookish, possessorial: me.possessorial, shamed: me.shamed, shelfworn: me.shelfworn, stagnum: me.stagnum, those: me.those, undecimal: me.undecimal)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        akroasis: Int?? = nil,
+        antiphonical: Int?? = nil,
+        basebred: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        conductometric: Int?? = nil,
+        disdiapason: String?? = nil,
+        ensilation: Int?? = nil,
+        eyebolt: Int?? = nil,
+        fistulated: Int?? = nil,
+        heteropod: Int?? = nil,
+        homocerc: Bool?? = nil,
+        juniperus: Int?? = nil,
+        labyrinthically: Int?? = nil,
+        martyrization: Int?? = nil,
+        mispolicy: Int?? = nil,
+        multipara: Int?? = nil,
+        nazirite: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        possessorial: Int?? = nil,
+        shamed: Int?? = nil,
+        shelfworn: Int?? = nil,
+        stagnum: Int?? = nil,
+        those: Int?? = nil,
+        undecimal: Int?? = nil
+    ) -> Amphithyron {
+        return Amphithyron(
+            akroasis: akroasis ?? self.akroasis,
+            antiphonical: antiphonical ?? self.antiphonical,
+            basebred: basebred ?? self.basebred,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            conductometric: conductometric ?? self.conductometric,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ensilation: ensilation ?? self.ensilation,
+            eyebolt: eyebolt ?? self.eyebolt,
+            fistulated: fistulated ?? self.fistulated,
+            heteropod: heteropod ?? self.heteropod,
+            homocerc: homocerc ?? self.homocerc,
+            juniperus: juniperus ?? self.juniperus,
+            labyrinthically: labyrinthically ?? self.labyrinthically,
+            martyrization: martyrization ?? self.martyrization,
+            mispolicy: mispolicy ?? self.mispolicy,
+            multipara: multipara ?? self.multipara,
+            nazirite: nazirite ?? self.nazirite,
+            nonbookish: nonbookish ?? self.nonbookish,
+            possessorial: possessorial ?? self.possessorial,
+            shamed: shamed ?? self.shamed,
+            shelfworn: shelfworn ?? self.shelfworn,
+            stagnum: stagnum ?? self.stagnum,
+            those: those ?? self.those,
+            undecimal: undecimal ?? self.undecimal
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum AnkeeElement: Codable, Sendable {
+    case ankeeClass(AnkeeClass)
+    case integer(Int)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(AnkeeClass.self) {
+            self = .ankeeClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(AnkeeElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for AnkeeElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .ankeeClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - AnkeeClass
+final class AnkeeClass: Codable, Sendable {
+    let anomoean: JSONNull?
+    let barleyhood: JSONNull?
+    let befriender: JSONNull?
+    let brutishness: JSONNull?
+    let cephalalgy: JSONNull?
+    let cirurgian: JSONNull?
+    let conventionally: JSONNull?
+    let jackshay: JSONNull?
+    let milammeter: JSONNull?
+    let naja: JSONNull?
+    let ombrological: JSONNull?
+    let phonasthenia: JSONNull?
+    let retrievableness: JSONNull?
+    let snakily: JSONNull?
+    let swot: JSONNull?
+    let tartlet: JSONNull?
+    let thiofuran: JSONNull?
+    let tracheophone: JSONNull?
+    let tuglike: JSONNull?
+    let unscratchingly: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case anomoean = "Anomoean"
+        case barleyhood = "barleyhood"
+        case befriender = "befriender"
+        case brutishness = "brutishness"
+        case cephalalgy = "cephalalgy"
+        case cirurgian = "cirurgian"
+        case conventionally = "conventionally"
+        case jackshay = "jackshay"
+        case milammeter = "milammeter"
+        case naja = "Naja"
+        case ombrological = "ombrological"
+        case phonasthenia = "phonasthenia"
+        case retrievableness = "retrievableness"
+        case snakily = "snakily"
+        case swot = "swot"
+        case tartlet = "tartlet"
+        case thiofuran = "thiofuran"
+        case tracheophone = "tracheophone"
+        case tuglike = "tuglike"
+        case unscratchingly = "unscratchingly"
+    }
+
+    init(anomoean: JSONNull?, barleyhood: JSONNull?, befriender: JSONNull?, brutishness: JSONNull?, cephalalgy: JSONNull?, cirurgian: JSONNull?, conventionally: JSONNull?, jackshay: JSONNull?, milammeter: JSONNull?, naja: JSONNull?, ombrological: JSONNull?, phonasthenia: JSONNull?, retrievableness: JSONNull?, snakily: JSONNull?, swot: JSONNull?, tartlet: JSONNull?, thiofuran: JSONNull?, tracheophone: JSONNull?, tuglike: JSONNull?, unscratchingly: JSONNull?) {
+        self.anomoean = anomoean
+        self.barleyhood = barleyhood
+        self.befriender = befriender
+        self.brutishness = brutishness
+        self.cephalalgy = cephalalgy
+        self.cirurgian = cirurgian
+        self.conventionally = conventionally
+        self.jackshay = jackshay
+        self.milammeter = milammeter
+        self.naja = naja
+        self.ombrological = ombrological
+        self.phonasthenia = phonasthenia
+        self.retrievableness = retrievableness
+        self.snakily = snakily
+        self.swot = swot
+        self.tartlet = tartlet
+        self.thiofuran = thiofuran
+        self.tracheophone = tracheophone
+        self.tuglike = tuglike
+        self.unscratchingly = unscratchingly
+    }
+}
+
+// MARK: AnkeeClass convenience initializers and mutators
+
+extension AnkeeClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(AnkeeClass.self, from: data)
+        self.init(anomoean: me.anomoean, barleyhood: me.barleyhood, befriender: me.befriender, brutishness: me.brutishness, cephalalgy: me.cephalalgy, cirurgian: me.cirurgian, conventionally: me.conventionally, jackshay: me.jackshay, milammeter: me.milammeter, naja: me.naja, ombrological: me.ombrological, phonasthenia: me.phonasthenia, retrievableness: me.retrievableness, snakily: me.snakily, swot: me.swot, tartlet: me.tartlet, thiofuran: me.thiofuran, tracheophone: me.tracheophone, tuglike: me.tuglike, unscratchingly: me.unscratchingly)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        anomoean: JSONNull?? = nil,
+        barleyhood: JSONNull?? = nil,
+        befriender: JSONNull?? = nil,
+        brutishness: JSONNull?? = nil,
+        cephalalgy: JSONNull?? = nil,
+        cirurgian: JSONNull?? = nil,
+        conventionally: JSONNull?? = nil,
+        jackshay: JSONNull?? = nil,
+        milammeter: JSONNull?? = nil,
+        naja: JSONNull?? = nil,
+        ombrological: JSONNull?? = nil,
+        phonasthenia: JSONNull?? = nil,
+        retrievableness: JSONNull?? = nil,
+        snakily: JSONNull?? = nil,
+        swot: JSONNull?? = nil,
+        tartlet: JSONNull?? = nil,
+        thiofuran: JSONNull?? = nil,
+        tracheophone: JSONNull?? = nil,
+        tuglike: JSONNull?? = nil,
+        unscratchingly: JSONNull?? = nil
+    ) -> AnkeeClass {
+        return AnkeeClass(
+            anomoean: anomoean ?? self.anomoean,
+            barleyhood: barleyhood ?? self.barleyhood,
+            befriender: befriender ?? self.befriender,
+            brutishness: brutishness ?? self.brutishness,
+            cephalalgy: cephalalgy ?? self.cephalalgy,
+            cirurgian: cirurgian ?? self.cirurgian,
+            conventionally: conventionally ?? self.conventionally,
+            jackshay: jackshay ?? self.jackshay,
+            milammeter: milammeter ?? self.milammeter,
+            naja: naja ?? self.naja,
+            ombrological: ombrological ?? self.ombrological,
+            phonasthenia: phonasthenia ?? self.phonasthenia,
+            retrievableness: retrievableness ?? self.retrievableness,
+            snakily: snakily ?? self.snakily,
+            swot: swot ?? self.swot,
+            tartlet: tartlet ?? self.tartlet,
+            thiofuran: thiofuran ?? self.thiofuran,
+            tracheophone: tracheophone ?? self.tracheophone,
+            tuglike: tuglike ?? self.tuglike,
+            unscratchingly: unscratchingly ?? self.unscratchingly
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum AnsarieElement: Codable, Sendable {
+    case ansarieClass(AnsarieClass)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(AnsarieClass.self) {
+            self = .ansarieClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(AnsarieElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for AnsarieElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .ansarieClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - AnsarieClass
+final class AnsarieClass: Codable, Sendable {
+    let accension: JSONNull?
+    let alida: JSONNull?
+    let asteria: JSONNull?
+    let beriberic: JSONNull?
+    let edgebone: JSONNull?
+    let gastrodialysis: JSONNull?
+    let geographic: JSONNull?
+    let ictonyx: JSONNull?
+    let metrocele: JSONNull?
+    let misgraft: JSONNull?
+    let monteith: JSONNull?
+    let notcher: JSONNull?
+    let prorestriction: JSONNull?
+    let ramist: JSONNull?
+    let throatlet: JSONNull?
+    let unfair: JSONNull?
+    let unsynonymous: JSONNull?
+    let water: JSONNull?
+    let zestfully: JSONNull?
+    let zincic: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case accension = "accension"
+        case alida = "Alida"
+        case asteria = "asteria"
+        case beriberic = "beriberic"
+        case edgebone = "edgebone"
+        case gastrodialysis = "gastrodialysis"
+        case geographic = "geographic"
+        case ictonyx = "Ictonyx"
+        case metrocele = "metrocele"
+        case misgraft = "misgraft"
+        case monteith = "monteith"
+        case notcher = "notcher"
+        case prorestriction = "prorestriction"
+        case ramist = "Ramist"
+        case throatlet = "throatlet"
+        case unfair = "unfair"
+        case unsynonymous = "unsynonymous"
+        case water = "water"
+        case zestfully = "zestfully"
+        case zincic = "zincic"
+    }
+
+    init(accension: JSONNull?, alida: JSONNull?, asteria: JSONNull?, beriberic: JSONNull?, edgebone: JSONNull?, gastrodialysis: JSONNull?, geographic: JSONNull?, ictonyx: JSONNull?, metrocele: JSONNull?, misgraft: JSONNull?, monteith: JSONNull?, notcher: JSONNull?, prorestriction: JSONNull?, ramist: JSONNull?, throatlet: JSONNull?, unfair: JSONNull?, unsynonymous: JSONNull?, water: JSONNull?, zestfully: JSONNull?, zincic: JSONNull?) {
+        self.accension = accension
+        self.alida = alida
+        self.asteria = asteria
+        self.beriberic = beriberic
+        self.edgebone = edgebone
+        self.gastrodialysis = gastrodialysis
+        self.geographic = geographic
+        self.ictonyx = ictonyx
+        self.metrocele = metrocele
+        self.misgraft = misgraft
+        self.monteith = monteith
+        self.notcher = notcher
+        self.prorestriction = prorestriction
+        self.ramist = ramist
+        self.throatlet = throatlet
+        self.unfair = unfair
+        self.unsynonymous = unsynonymous
+        self.water = water
+        self.zestfully = zestfully
+        self.zincic = zincic
+    }
+}
+
+// MARK: AnsarieClass convenience initializers and mutators
+
+extension AnsarieClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(AnsarieClass.self, from: data)
+        self.init(accension: me.accension, alida: me.alida, asteria: me.asteria, beriberic: me.beriberic, edgebone: me.edgebone, gastrodialysis: me.gastrodialysis, geographic: me.geographic, ictonyx: me.ictonyx, metrocele: me.metrocele, misgraft: me.misgraft, monteith: me.monteith, notcher: me.notcher, prorestriction: me.prorestriction, ramist: me.ramist, throatlet: me.throatlet, unfair: me.unfair, unsynonymous: me.unsynonymous, water: me.water, zestfully: me.zestfully, zincic: me.zincic)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        accension: JSONNull?? = nil,
+        alida: JSONNull?? = nil,
+        asteria: JSONNull?? = nil,
+        beriberic: JSONNull?? = nil,
+        edgebone: JSONNull?? = nil,
+        gastrodialysis: JSONNull?? = nil,
+        geographic: JSONNull?? = nil,
+        ictonyx: JSONNull?? = nil,
+        metrocele: JSONNull?? = nil,
+        misgraft: JSONNull?? = nil,
+        monteith: JSONNull?? = nil,
+        notcher: JSONNull?? = nil,
+        prorestriction: JSONNull?? = nil,
+        ramist: JSONNull?? = nil,
+        throatlet: JSONNull?? = nil,
+        unfair: JSONNull?? = nil,
+        unsynonymous: JSONNull?? = nil,
+        water: JSONNull?? = nil,
+        zestfully: JSONNull?? = nil,
+        zincic: JSONNull?? = nil
+    ) -> AnsarieClass {
+        return AnsarieClass(
+            accension: accension ?? self.accension,
+            alida: alida ?? self.alida,
+            asteria: asteria ?? self.asteria,
+            beriberic: beriberic ?? self.beriberic,
+            edgebone: edgebone ?? self.edgebone,
+            gastrodialysis: gastrodialysis ?? self.gastrodialysis,
+            geographic: geographic ?? self.geographic,
+            ictonyx: ictonyx ?? self.ictonyx,
+            metrocele: metrocele ?? self.metrocele,
+            misgraft: misgraft ?? self.misgraft,
+            monteith: monteith ?? self.monteith,
+            notcher: notcher ?? self.notcher,
+            prorestriction: prorestriction ?? self.prorestriction,
+            ramist: ramist ?? self.ramist,
+            throatlet: throatlet ?? self.throatlet,
+            unfair: unfair ?? self.unfair,
+            unsynonymous: unsynonymous ?? self.unsynonymous,
+            water: water ?? self.water,
+            zestfully: zestfully ?? self.zestfully,
+            zincic: zincic ?? self.zincic
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Aphasia: Codable, Sendable {
+    case integer(Int)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Aphasia.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Aphasia"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Asprawl: Codable, Sendable {
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Asprawl.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Asprawl"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Bedesman: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Bedesman.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Bedesman"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Belard: Codable, Sendable {
+    case double(Double)
+    case integerArray([Int])
+    case rebecca(Rebecca)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Belard.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Belard"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Bocking: Codable, Sendable {
+    case bool(Bool)
+    case integerArray([Int])
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Bocking.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Bocking"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Brawlingly: Codable, Sendable {
+    case nullArray([JSONNull?])
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Brawlingly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Brawlingly"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Brookie: Codable, Sendable {
+    case integerArray([Int])
+    case rebecca(Rebecca)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Brookie.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Brookie"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Bumboatman: Codable, Sendable {
+    case nullArray([JSONNull?])
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Bumboatman.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Bumboatman"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Calaverite: Codable, Sendable {
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Calaverite.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Calaverite"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Catallactic: Codable, Sendable {
+    case bool(Bool)
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Catallactic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Catallactic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Cemental: Codable, Sendable {
+    case double(Double)
+    case integerArray([Int])
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Cemental.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Cemental"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum ChytridiaceaeElement: Codable, Sendable {
+    case bool(Bool)
+    case chytridiaceaeClass(ChytridiaceaeClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(ChytridiaceaeClass.self) {
+            self = .chytridiaceaeClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(ChytridiaceaeElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for ChytridiaceaeElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .chytridiaceaeClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - ChytridiaceaeClass
+final class ChytridiaceaeClass: Codable, Sendable {
+    let batidaceae: JSONNull?
+    let brechites: JSONNull?
+    let codespairer: JSONNull?
+    let emery: JSONNull?
+    let enervative: JSONNull?
+    let excriminate: JSONNull?
+    let goshenite: JSONNull?
+    let grime: JSONNull?
+    let gritten: JSONNull?
+    let hectorly: JSONNull?
+    let intermediation: JSONNull?
+    let meeterly: JSONNull?
+    let narraganset: JSONNull?
+    let onymatic: JSONNull?
+    let paddlecock: JSONNull?
+    let thana: JSONNull?
+    let thornily: JSONNull?
+    let uckia: JSONNull?
+    let unmettle: JSONNull?
+    let vorticellid: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case batidaceae = "Batidaceae"
+        case brechites = "Brechites"
+        case codespairer = "codespairer"
+        case emery = "Emery"
+        case enervative = "enervative"
+        case excriminate = "excriminate"
+        case goshenite = "goshenite"
+        case grime = "grime"
+        case gritten = "gritten"
+        case hectorly = "hectorly"
+        case intermediation = "intermediation"
+        case meeterly = "meeterly"
+        case narraganset = "Narraganset"
+        case onymatic = "onymatic"
+        case paddlecock = "paddlecock"
+        case thana = "thana"
+        case thornily = "thornily"
+        case uckia = "uckia"
+        case unmettle = "unmettle"
+        case vorticellid = "vorticellid"
+    }
+
+    init(batidaceae: JSONNull?, brechites: JSONNull?, codespairer: JSONNull?, emery: JSONNull?, enervative: JSONNull?, excriminate: JSONNull?, goshenite: JSONNull?, grime: JSONNull?, gritten: JSONNull?, hectorly: JSONNull?, intermediation: JSONNull?, meeterly: JSONNull?, narraganset: JSONNull?, onymatic: JSONNull?, paddlecock: JSONNull?, thana: JSONNull?, thornily: JSONNull?, uckia: JSONNull?, unmettle: JSONNull?, vorticellid: JSONNull?) {
+        self.batidaceae = batidaceae
+        self.brechites = brechites
+        self.codespairer = codespairer
+        self.emery = emery
+        self.enervative = enervative
+        self.excriminate = excriminate
+        self.goshenite = goshenite
+        self.grime = grime
+        self.gritten = gritten
+        self.hectorly = hectorly
+        self.intermediation = intermediation
+        self.meeterly = meeterly
+        self.narraganset = narraganset
+        self.onymatic = onymatic
+        self.paddlecock = paddlecock
+        self.thana = thana
+        self.thornily = thornily
+        self.uckia = uckia
+        self.unmettle = unmettle
+        self.vorticellid = vorticellid
+    }
+}
+
+// MARK: ChytridiaceaeClass convenience initializers and mutators
+
+extension ChytridiaceaeClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(ChytridiaceaeClass.self, from: data)
+        self.init(batidaceae: me.batidaceae, brechites: me.brechites, codespairer: me.codespairer, emery: me.emery, enervative: me.enervative, excriminate: me.excriminate, goshenite: me.goshenite, grime: me.grime, gritten: me.gritten, hectorly: me.hectorly, intermediation: me.intermediation, meeterly: me.meeterly, narraganset: me.narraganset, onymatic: me.onymatic, paddlecock: me.paddlecock, thana: me.thana, thornily: me.thornily, uckia: me.uckia, unmettle: me.unmettle, vorticellid: me.vorticellid)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        batidaceae: JSONNull?? = nil,
+        brechites: JSONNull?? = nil,
+        codespairer: JSONNull?? = nil,
+        emery: JSONNull?? = nil,
+        enervative: JSONNull?? = nil,
+        excriminate: JSONNull?? = nil,
+        goshenite: JSONNull?? = nil,
+        grime: JSONNull?? = nil,
+        gritten: JSONNull?? = nil,
+        hectorly: JSONNull?? = nil,
+        intermediation: JSONNull?? = nil,
+        meeterly: JSONNull?? = nil,
+        narraganset: JSONNull?? = nil,
+        onymatic: JSONNull?? = nil,
+        paddlecock: JSONNull?? = nil,
+        thana: JSONNull?? = nil,
+        thornily: JSONNull?? = nil,
+        uckia: JSONNull?? = nil,
+        unmettle: JSONNull?? = nil,
+        vorticellid: JSONNull?? = nil
+    ) -> ChytridiaceaeClass {
+        return ChytridiaceaeClass(
+            batidaceae: batidaceae ?? self.batidaceae,
+            brechites: brechites ?? self.brechites,
+            codespairer: codespairer ?? self.codespairer,
+            emery: emery ?? self.emery,
+            enervative: enervative ?? self.enervative,
+            excriminate: excriminate ?? self.excriminate,
+            goshenite: goshenite ?? self.goshenite,
+            grime: grime ?? self.grime,
+            gritten: gritten ?? self.gritten,
+            hectorly: hectorly ?? self.hectorly,
+            intermediation: intermediation ?? self.intermediation,
+            meeterly: meeterly ?? self.meeterly,
+            narraganset: narraganset ?? self.narraganset,
+            onymatic: onymatic ?? self.onymatic,
+            paddlecock: paddlecock ?? self.paddlecock,
+            thana: thana ?? self.thana,
+            thornily: thornily ?? self.thornily,
+            uckia: uckia ?? self.uckia,
+            unmettle: unmettle ?? self.unmettle,
+            vorticellid: vorticellid ?? self.vorticellid
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum DiscordiaElement: Codable, Sendable {
+    case discordiaClass(DiscordiaClass)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(DiscordiaClass.self) {
+            self = .discordiaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(DiscordiaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for DiscordiaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .discordiaClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - DiscordiaClass
+final class DiscordiaClass: Codable, Sendable {
+    let altaic: Int?
+    let amoristic: Int?
+    let blennophthalmia: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disciplinability: Int?
+    let disdiapason: String?
+    let goofer: Int?
+    let homocerc: Bool?
+    let laryngograph: Int?
+    let leucitis: Int?
+    let lymphocyst: Int?
+    let microcosmology: Int?
+    let nauseation: Int?
+    let nonbookish: JSONNull?
+    let patarin: Int?
+    let preliberal: Int?
+    let prettifier: Int?
+    let rangework: Int?
+    let redient: Int?
+    let subfusiform: Int?
+    let suicidical: Int?
+    let swow: Int?
+    let wastrel: Int?
+    let wingle: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case altaic = "Altaic"
+        case amoristic = "amoristic"
+        case blennophthalmia = "blennophthalmia"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disciplinability = "disciplinability"
+        case disdiapason = "disdiapason"
+        case goofer = "goofer"
+        case homocerc = "homocerc"
+        case laryngograph = "laryngograph"
+        case leucitis = "leucitis"
+        case lymphocyst = "lymphocyst"
+        case microcosmology = "microcosmology"
+        case nauseation = "nauseation"
+        case nonbookish = "nonbookish"
+        case patarin = "Patarin"
+        case preliberal = "preliberal"
+        case prettifier = "prettifier"
+        case rangework = "rangework"
+        case redient = "redient"
+        case subfusiform = "subfusiform"
+        case suicidical = "suicidical"
+        case swow = "swow"
+        case wastrel = "wastrel"
+        case wingle = "wingle"
+    }
+
+    init(altaic: Int?, amoristic: Int?, blennophthalmia: Int?, catharticalness: Double?, chirotherium: Int?, disciplinability: Int?, disdiapason: String?, goofer: Int?, homocerc: Bool?, laryngograph: Int?, leucitis: Int?, lymphocyst: Int?, microcosmology: Int?, nauseation: Int?, nonbookish: JSONNull?, patarin: Int?, preliberal: Int?, prettifier: Int?, rangework: Int?, redient: Int?, subfusiform: Int?, suicidical: Int?, swow: Int?, wastrel: Int?, wingle: Int?) {
+        self.altaic = altaic
+        self.amoristic = amoristic
+        self.blennophthalmia = blennophthalmia
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disciplinability = disciplinability
+        self.disdiapason = disdiapason
+        self.goofer = goofer
+        self.homocerc = homocerc
+        self.laryngograph = laryngograph
+        self.leucitis = leucitis
+        self.lymphocyst = lymphocyst
+        self.microcosmology = microcosmology
+        self.nauseation = nauseation
+        self.nonbookish = nonbookish
+        self.patarin = patarin
+        self.preliberal = preliberal
+        self.prettifier = prettifier
+        self.rangework = rangework
+        self.redient = redient
+        self.subfusiform = subfusiform
+        self.suicidical = suicidical
+        self.swow = swow
+        self.wastrel = wastrel
+        self.wingle = wingle
+    }
+}
+
+// MARK: DiscordiaClass convenience initializers and mutators
+
+extension DiscordiaClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(DiscordiaClass.self, from: data)
+        self.init(altaic: me.altaic, amoristic: me.amoristic, blennophthalmia: me.blennophthalmia, catharticalness: me.catharticalness, chirotherium: me.chirotherium, disciplinability: me.disciplinability, disdiapason: me.disdiapason, goofer: me.goofer, homocerc: me.homocerc, laryngograph: me.laryngograph, leucitis: me.leucitis, lymphocyst: me.lymphocyst, microcosmology: me.microcosmology, nauseation: me.nauseation, nonbookish: me.nonbookish, patarin: me.patarin, preliberal: me.preliberal, prettifier: me.prettifier, rangework: me.rangework, redient: me.redient, subfusiform: me.subfusiform, suicidical: me.suicidical, swow: me.swow, wastrel: me.wastrel, wingle: me.wingle)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        altaic: Int?? = nil,
+        amoristic: Int?? = nil,
+        blennophthalmia: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disciplinability: Int?? = nil,
+        disdiapason: String?? = nil,
+        goofer: Int?? = nil,
+        homocerc: Bool?? = nil,
+        laryngograph: Int?? = nil,
+        leucitis: Int?? = nil,
+        lymphocyst: Int?? = nil,
+        microcosmology: Int?? = nil,
+        nauseation: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        patarin: Int?? = nil,
+        preliberal: Int?? = nil,
+        prettifier: Int?? = nil,
+        rangework: Int?? = nil,
+        redient: Int?? = nil,
+        subfusiform: Int?? = nil,
+        suicidical: Int?? = nil,
+        swow: Int?? = nil,
+        wastrel: Int?? = nil,
+        wingle: Int?? = nil
+    ) -> DiscordiaClass {
+        return DiscordiaClass(
+            altaic: altaic ?? self.altaic,
+            amoristic: amoristic ?? self.amoristic,
+            blennophthalmia: blennophthalmia ?? self.blennophthalmia,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disciplinability: disciplinability ?? self.disciplinability,
+            disdiapason: disdiapason ?? self.disdiapason,
+            goofer: goofer ?? self.goofer,
+            homocerc: homocerc ?? self.homocerc,
+            laryngograph: laryngograph ?? self.laryngograph,
+            leucitis: leucitis ?? self.leucitis,
+            lymphocyst: lymphocyst ?? self.lymphocyst,
+            microcosmology: microcosmology ?? self.microcosmology,
+            nauseation: nauseation ?? self.nauseation,
+            nonbookish: nonbookish ?? self.nonbookish,
+            patarin: patarin ?? self.patarin,
+            preliberal: preliberal ?? self.preliberal,
+            prettifier: prettifier ?? self.prettifier,
+            rangework: rangework ?? self.rangework,
+            redient: redient ?? self.redient,
+            subfusiform: subfusiform ?? self.subfusiform,
+            suicidical: suicidical ?? self.suicidical,
+            swow: swow ?? self.swow,
+            wastrel: wastrel ?? self.wastrel,
+            wingle: wingle ?? self.wingle
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Endomyce: Codable, Sendable {
+    case integer(Int)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Endomyce.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Endomyce"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Epinephelidae: Codable, Sendable {
+    case bool(Bool)
+    case integer(Int)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Epinephelidae.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Epinephelidae"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Eupatorium: Codable, Sendable {
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Eupatorium.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Eupatorium"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum GryphosaurusElement: Codable, Sendable {
+    case gryphosaurusClass(GryphosaurusClass)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(GryphosaurusClass.self) {
+            self = .gryphosaurusClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(GryphosaurusElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for GryphosaurusElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .gryphosaurusClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - GryphosaurusClass
+final class GryphosaurusClass: Codable, Sendable {
+    let amissibility: JSONNull?
+    let burushaski: JSONNull?
+    let citronin: JSONNull?
+    let coplaintiff: JSONNull?
+    let disquisitionary: JSONNull?
+    let enoplan: JSONNull?
+    let faintness: JSONNull?
+    let hebetomy: JSONNull?
+    let islandry: JSONNull?
+    let lameduck: JSONNull?
+    let overbattle: JSONNull?
+    let overinterested: JSONNull?
+    let phrenologic: JSONNull?
+    let rainband: JSONNull?
+    let shiningly: JSONNull?
+    let stamineous: JSONNull?
+    let subscapularis: JSONNull?
+    let tahami: JSONNull?
+    let undaubed: JSONNull?
+    let underntime: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amissibility = "amissibility"
+        case burushaski = "Burushaski"
+        case citronin = "citronin"
+        case coplaintiff = "coplaintiff"
+        case disquisitionary = "disquisitionary"
+        case enoplan = "enoplan"
+        case faintness = "faintness"
+        case hebetomy = "hebetomy"
+        case islandry = "islandry"
+        case lameduck = "lameduck"
+        case overbattle = "overbattle"
+        case overinterested = "overinterested"
+        case phrenologic = "phrenologic"
+        case rainband = "rainband"
+        case shiningly = "shiningly"
+        case stamineous = "stamineous"
+        case subscapularis = "subscapularis"
+        case tahami = "Tahami"
+        case undaubed = "undaubed"
+        case underntime = "underntime"
+    }
+
+    init(amissibility: JSONNull?, burushaski: JSONNull?, citronin: JSONNull?, coplaintiff: JSONNull?, disquisitionary: JSONNull?, enoplan: JSONNull?, faintness: JSONNull?, hebetomy: JSONNull?, islandry: JSONNull?, lameduck: JSONNull?, overbattle: JSONNull?, overinterested: JSONNull?, phrenologic: JSONNull?, rainband: JSONNull?, shiningly: JSONNull?, stamineous: JSONNull?, subscapularis: JSONNull?, tahami: JSONNull?, undaubed: JSONNull?, underntime: JSONNull?) {
+        self.amissibility = amissibility
+        self.burushaski = burushaski
+        self.citronin = citronin
+        self.coplaintiff = coplaintiff
+        self.disquisitionary = disquisitionary
+        self.enoplan = enoplan
+        self.faintness = faintness
+        self.hebetomy = hebetomy
+        self.islandry = islandry
+        self.lameduck = lameduck
+        self.overbattle = overbattle
+        self.overinterested = overinterested
+        self.phrenologic = phrenologic
+        self.rainband = rainband
+        self.shiningly = shiningly
+        self.stamineous = stamineous
+        self.subscapularis = subscapularis
+        self.tahami = tahami
+        self.undaubed = undaubed
+        self.underntime = underntime
+    }
+}
+
+// MARK: GryphosaurusClass convenience initializers and mutators
+
+extension GryphosaurusClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(GryphosaurusClass.self, from: data)
+        self.init(amissibility: me.amissibility, burushaski: me.burushaski, citronin: me.citronin, coplaintiff: me.coplaintiff, disquisitionary: me.disquisitionary, enoplan: me.enoplan, faintness: me.faintness, hebetomy: me.hebetomy, islandry: me.islandry, lameduck: me.lameduck, overbattle: me.overbattle, overinterested: me.overinterested, phrenologic: me.phrenologic, rainband: me.rainband, shiningly: me.shiningly, stamineous: me.stamineous, subscapularis: me.subscapularis, tahami: me.tahami, undaubed: me.undaubed, underntime: me.underntime)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amissibility: JSONNull?? = nil,
+        burushaski: JSONNull?? = nil,
+        citronin: JSONNull?? = nil,
+        coplaintiff: JSONNull?? = nil,
+        disquisitionary: JSONNull?? = nil,
+        enoplan: JSONNull?? = nil,
+        faintness: JSONNull?? = nil,
+        hebetomy: JSONNull?? = nil,
+        islandry: JSONNull?? = nil,
+        lameduck: JSONNull?? = nil,
+        overbattle: JSONNull?? = nil,
+        overinterested: JSONNull?? = nil,
+        phrenologic: JSONNull?? = nil,
+        rainband: JSONNull?? = nil,
+        shiningly: JSONNull?? = nil,
+        stamineous: JSONNull?? = nil,
+        subscapularis: JSONNull?? = nil,
+        tahami: JSONNull?? = nil,
+        undaubed: JSONNull?? = nil,
+        underntime: JSONNull?? = nil
+    ) -> GryphosaurusClass {
+        return GryphosaurusClass(
+            amissibility: amissibility ?? self.amissibility,
+            burushaski: burushaski ?? self.burushaski,
+            citronin: citronin ?? self.citronin,
+            coplaintiff: coplaintiff ?? self.coplaintiff,
+            disquisitionary: disquisitionary ?? self.disquisitionary,
+            enoplan: enoplan ?? self.enoplan,
+            faintness: faintness ?? self.faintness,
+            hebetomy: hebetomy ?? self.hebetomy,
+            islandry: islandry ?? self.islandry,
+            lameduck: lameduck ?? self.lameduck,
+            overbattle: overbattle ?? self.overbattle,
+            overinterested: overinterested ?? self.overinterested,
+            phrenologic: phrenologic ?? self.phrenologic,
+            rainband: rainband ?? self.rainband,
+            shiningly: shiningly ?? self.shiningly,
+            stamineous: stamineous ?? self.stamineous,
+            subscapularis: subscapularis ?? self.subscapularis,
+            tahami: tahami ?? self.tahami,
+            undaubed: undaubed ?? self.undaubed,
+            underntime: underntime ?? self.underntime
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Koryak: Codable, Sendable {
+    case string(String)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Koryak.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Koryak"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .string(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum LaviniaElement: Codable, Sendable {
+    case laviniaClass(LaviniaClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(LaviniaClass.self) {
+            self = .laviniaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(LaviniaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LaviniaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .laviniaClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - LaviniaClass
+final class LaviniaClass: Codable, Sendable {
+    let agitable: Int?
+    let asininity: Int?
+    let benefiter: Int?
+    let bronzelike: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let cholesteatomatous: Int?
+    let deprivement: Int?
+    let disdiapason: String?
+    let flippantness: Int?
+    let fogproof: Int?
+    let homocerc: Bool?
+    let merrymeeting: Int?
+    let nonbookish: JSONNull?
+    let overcareful: Int?
+    let panaris: Int?
+    let preacceptance: Int?
+    let quinoxaline: Int?
+    let sig: Int?
+    let superconfusion: Int?
+    let tacana: Int?
+    let tillotter: Int?
+    let tranquillize: Int?
+    let unquestionable: Int?
+    let uproute: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case agitable = "agitable"
+        case asininity = "asininity"
+        case benefiter = "benefiter"
+        case bronzelike = "bronzelike"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case cholesteatomatous = "cholesteatomatous"
+        case deprivement = "deprivement"
+        case disdiapason = "disdiapason"
+        case flippantness = "flippantness"
+        case fogproof = "fogproof"
+        case homocerc = "homocerc"
+        case merrymeeting = "merrymeeting"
+        case nonbookish = "nonbookish"
+        case overcareful = "overcareful"
+        case panaris = "panaris"
+        case preacceptance = "preacceptance"
+        case quinoxaline = "quinoxaline"
+        case sig = "sig"
+        case superconfusion = "superconfusion"
+        case tacana = "Tacana"
+        case tillotter = "tillotter"
+        case tranquillize = "tranquillize"
+        case unquestionable = "unquestionable"
+        case uproute = "uproute"
+    }
+
+    init(agitable: Int?, asininity: Int?, benefiter: Int?, bronzelike: Int?, catharticalness: Double?, chirotherium: Int?, cholesteatomatous: Int?, deprivement: Int?, disdiapason: String?, flippantness: Int?, fogproof: Int?, homocerc: Bool?, merrymeeting: Int?, nonbookish: JSONNull?, overcareful: Int?, panaris: Int?, preacceptance: Int?, quinoxaline: Int?, sig: Int?, superconfusion: Int?, tacana: Int?, tillotter: Int?, tranquillize: Int?, unquestionable: Int?, uproute: Int?) {
+        self.agitable = agitable
+        self.asininity = asininity
+        self.benefiter = benefiter
+        self.bronzelike = bronzelike
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.cholesteatomatous = cholesteatomatous
+        self.deprivement = deprivement
+        self.disdiapason = disdiapason
+        self.flippantness = flippantness
+        self.fogproof = fogproof
+        self.homocerc = homocerc
+        self.merrymeeting = merrymeeting
+        self.nonbookish = nonbookish
+        self.overcareful = overcareful
+        self.panaris = panaris
+        self.preacceptance = preacceptance
+        self.quinoxaline = quinoxaline
+        self.sig = sig
+        self.superconfusion = superconfusion
+        self.tacana = tacana
+        self.tillotter = tillotter
+        self.tranquillize = tranquillize
+        self.unquestionable = unquestionable
+        self.uproute = uproute
+    }
+}
+
+// MARK: LaviniaClass convenience initializers and mutators
+
+extension LaviniaClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(LaviniaClass.self, from: data)
+        self.init(agitable: me.agitable, asininity: me.asininity, benefiter: me.benefiter, bronzelike: me.bronzelike, catharticalness: me.catharticalness, chirotherium: me.chirotherium, cholesteatomatous: me.cholesteatomatous, deprivement: me.deprivement, disdiapason: me.disdiapason, flippantness: me.flippantness, fogproof: me.fogproof, homocerc: me.homocerc, merrymeeting: me.merrymeeting, nonbookish: me.nonbookish, overcareful: me.overcareful, panaris: me.panaris, preacceptance: me.preacceptance, quinoxaline: me.quinoxaline, sig: me.sig, superconfusion: me.superconfusion, tacana: me.tacana, tillotter: me.tillotter, tranquillize: me.tranquillize, unquestionable: me.unquestionable, uproute: me.uproute)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        agitable: Int?? = nil,
+        asininity: Int?? = nil,
+        benefiter: Int?? = nil,
+        bronzelike: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        cholesteatomatous: Int?? = nil,
+        deprivement: Int?? = nil,
+        disdiapason: String?? = nil,
+        flippantness: Int?? = nil,
+        fogproof: Int?? = nil,
+        homocerc: Bool?? = nil,
+        merrymeeting: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        overcareful: Int?? = nil,
+        panaris: Int?? = nil,
+        preacceptance: Int?? = nil,
+        quinoxaline: Int?? = nil,
+        sig: Int?? = nil,
+        superconfusion: Int?? = nil,
+        tacana: Int?? = nil,
+        tillotter: Int?? = nil,
+        tranquillize: Int?? = nil,
+        unquestionable: Int?? = nil,
+        uproute: Int?? = nil
+    ) -> LaviniaClass {
+        return LaviniaClass(
+            agitable: agitable ?? self.agitable,
+            asininity: asininity ?? self.asininity,
+            benefiter: benefiter ?? self.benefiter,
+            bronzelike: bronzelike ?? self.bronzelike,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            cholesteatomatous: cholesteatomatous ?? self.cholesteatomatous,
+            deprivement: deprivement ?? self.deprivement,
+            disdiapason: disdiapason ?? self.disdiapason,
+            flippantness: flippantness ?? self.flippantness,
+            fogproof: fogproof ?? self.fogproof,
+            homocerc: homocerc ?? self.homocerc,
+            merrymeeting: merrymeeting ?? self.merrymeeting,
+            nonbookish: nonbookish ?? self.nonbookish,
+            overcareful: overcareful ?? self.overcareful,
+            panaris: panaris ?? self.panaris,
+            preacceptance: preacceptance ?? self.preacceptance,
+            quinoxaline: quinoxaline ?? self.quinoxaline,
+            sig: sig ?? self.sig,
+            superconfusion: superconfusion ?? self.superconfusion,
+            tacana: tacana ?? self.tacana,
+            tillotter: tillotter ?? self.tillotter,
+            tranquillize: tranquillize ?? self.tranquillize,
+            unquestionable: unquestionable ?? self.unquestionable,
+            uproute: uproute ?? self.uproute
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum OskarElement: Codable, Sendable {
+    case integerArray([Int])
+    case oskarClass(OskarClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(OskarClass.self) {
+            self = .oskarClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(OskarElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for OskarElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .oskarClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - OskarClass
+final class OskarClass: Codable, Sendable {
+    let acrobates: JSONNull?
+    let beanshooter: JSONNull?
+    let bearhound: JSONNull?
+    let cayuga: JSONNull?
+    let guarneri: JSONNull?
+    let hypochondriacism: JSONNull?
+    let indication: JSONNull?
+    let jaculative: JSONNull?
+    let nagana: JSONNull?
+    let netherlandish: JSONNull?
+    let noctivagous: JSONNull?
+    let nonphysiological: JSONNull?
+    let praxis: JSONNull?
+    let provision: JSONNull?
+    let subterhuman: JSONNull?
+    let sunlit: JSONNull?
+    let syncraniate: JSONNull?
+    let teachment: JSONNull?
+    let unmutinous: JSONNull?
+    let unstoppable: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acrobates = "Acrobates"
+        case beanshooter = "beanshooter"
+        case bearhound = "bearhound"
+        case cayuga = "Cayuga"
+        case guarneri = "guarneri"
+        case hypochondriacism = "hypochondriacism"
+        case indication = "indication"
+        case jaculative = "jaculative"
+        case nagana = "nagana"
+        case netherlandish = "Netherlandish"
+        case noctivagous = "noctivagous"
+        case nonphysiological = "nonphysiological"
+        case praxis = "praxis"
+        case provision = "provision"
+        case subterhuman = "subterhuman"
+        case sunlit = "sunlit"
+        case syncraniate = "syncraniate"
+        case teachment = "teachment"
+        case unmutinous = "unmutinous"
+        case unstoppable = "unstoppable"
+    }
+
+    init(acrobates: JSONNull?, beanshooter: JSONNull?, bearhound: JSONNull?, cayuga: JSONNull?, guarneri: JSONNull?, hypochondriacism: JSONNull?, indication: JSONNull?, jaculative: JSONNull?, nagana: JSONNull?, netherlandish: JSONNull?, noctivagous: JSONNull?, nonphysiological: JSONNull?, praxis: JSONNull?, provision: JSONNull?, subterhuman: JSONNull?, sunlit: JSONNull?, syncraniate: JSONNull?, teachment: JSONNull?, unmutinous: JSONNull?, unstoppable: JSONNull?) {
+        self.acrobates = acrobates
+        self.beanshooter = beanshooter
+        self.bearhound = bearhound
+        self.cayuga = cayuga
+        self.guarneri = guarneri
+        self.hypochondriacism = hypochondriacism
+        self.indication = indication
+        self.jaculative = jaculative
+        self.nagana = nagana
+        self.netherlandish = netherlandish
+        self.noctivagous = noctivagous
+        self.nonphysiological = nonphysiological
+        self.praxis = praxis
+        self.provision = provision
+        self.subterhuman = subterhuman
+        self.sunlit = sunlit
+        self.syncraniate = syncraniate
+        self.teachment = teachment
+        self.unmutinous = unmutinous
+        self.unstoppable = unstoppable
+    }
+}
+
+// MARK: OskarClass convenience initializers and mutators
+
+extension OskarClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(OskarClass.self, from: data)
+        self.init(acrobates: me.acrobates, beanshooter: me.beanshooter, bearhound: me.bearhound, cayuga: me.cayuga, guarneri: me.guarneri, hypochondriacism: me.hypochondriacism, indication: me.indication, jaculative: me.jaculative, nagana: me.nagana, netherlandish: me.netherlandish, noctivagous: me.noctivagous, nonphysiological: me.nonphysiological, praxis: me.praxis, provision: me.provision, subterhuman: me.subterhuman, sunlit: me.sunlit, syncraniate: me.syncraniate, teachment: me.teachment, unmutinous: me.unmutinous, unstoppable: me.unstoppable)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acrobates: JSONNull?? = nil,
+        beanshooter: JSONNull?? = nil,
+        bearhound: JSONNull?? = nil,
+        cayuga: JSONNull?? = nil,
+        guarneri: JSONNull?? = nil,
+        hypochondriacism: JSONNull?? = nil,
+        indication: JSONNull?? = nil,
+        jaculative: JSONNull?? = nil,
+        nagana: JSONNull?? = nil,
+        netherlandish: JSONNull?? = nil,
+        noctivagous: JSONNull?? = nil,
+        nonphysiological: JSONNull?? = nil,
+        praxis: JSONNull?? = nil,
+        provision: JSONNull?? = nil,
+        subterhuman: JSONNull?? = nil,
+        sunlit: JSONNull?? = nil,
+        syncraniate: JSONNull?? = nil,
+        teachment: JSONNull?? = nil,
+        unmutinous: JSONNull?? = nil,
+        unstoppable: JSONNull?? = nil
+    ) -> OskarClass {
+        return OskarClass(
+            acrobates: acrobates ?? self.acrobates,
+            beanshooter: beanshooter ?? self.beanshooter,
+            bearhound: bearhound ?? self.bearhound,
+            cayuga: cayuga ?? self.cayuga,
+            guarneri: guarneri ?? self.guarneri,
+            hypochondriacism: hypochondriacism ?? self.hypochondriacism,
+            indication: indication ?? self.indication,
+            jaculative: jaculative ?? self.jaculative,
+            nagana: nagana ?? self.nagana,
+            netherlandish: netherlandish ?? self.netherlandish,
+            noctivagous: noctivagous ?? self.noctivagous,
+            nonphysiological: nonphysiological ?? self.nonphysiological,
+            praxis: praxis ?? self.praxis,
+            provision: provision ?? self.provision,
+            subterhuman: subterhuman ?? self.subterhuman,
+            sunlit: sunlit ?? self.sunlit,
+            syncraniate: syncraniate ?? self.syncraniate,
+            teachment: teachment ?? self.teachment,
+            unmutinous: unmutinous ?? self.unmutinous,
+            unstoppable: unstoppable ?? self.unstoppable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum RebeccaElement: Codable, Sendable {
+    case integer(Int)
+    case rebecca(Rebecca)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(RebeccaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for RebeccaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Rhomboganoidei: Codable, Sendable {
+    case integerArray([Int])
+    case rebecca(Rebecca)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Rhomboganoidei.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Rhomboganoidei"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Ruellia: Codable, Sendable {
+    case bool(Bool)
+    case rebecca(Rebecca)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(Rebecca.self) {
+            self = .rebecca(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Ruellia.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Ruellia"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .rebecca(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum School: Codable, Sendable {
+    case integer(Int)
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(School.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for School"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Shakespearolater: Codable, Sendable {
+    case double(Double)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Shakespearolater.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Shakespearolater"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+final class JSONNull: Codable, Hashable, Sendable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    public func hash(into hasher: inout Hasher) {
+        hasher.combine(0)
+    }
+
+    public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/head/swift/test/inputs/json/priority/combinations3.json/final-classes-true__struct-or-class-class--d3c62ec7414d/quicktype.swift b/head/swift/test/inputs/json/priority/combinations3.json/final-classes-true__struct-or-class-class--d3c62ec7414d/quicktype.swift
new file mode 100644
index 0000000..c8e32ee
--- /dev/null
+++ b/head/swift/test/inputs/json/priority/combinations3.json/final-classes-true__struct-or-class-class--d3c62ec7414d/quicktype.swift
@@ -0,0 +1,3534 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+import Foundation
+
+// MARK: - TopLevel
+final class TopLevel: Codable {
+    let juror: [JurorElement]
+    let kongoni: [Kongoni]
+    let ladronism: [LadronismElement]
+    let landlubberly: [LandlubberlyElement]
+    let listener: [Listener]
+    let lupus: [LupusElement]
+    let maslin: [Maslin]
+    let monazite: [MonaziteElement]
+    let monoliteral: [Monoliteral]
+    let monotheistically: [MonotheisticallyElement]
+    let montage: [Montage]
+    let moralness: [Moralness]
+    let mowra: [MonaziteClass?]
+    let mulishly: [Mulishly]
+    let myoscope: [Myoscope]
+    let nach: [[Int?]?]
+    let neuromastic: [Neuromastic]
+    let noncontributing: [Noncontributing]
+    let nonnervous: [Nonnervous]
+    let nonvaluation: [Nonvaluation]
+    let occupationalist: [OccupationalistElement]
+    let outrival: [OutrivalElement]
+    let paleographically: [Paleographically]
+    let pamphletwise: [Pamphletwise]
+    let pediatrics: [Pediatric]
+    let perceptive: [Bool]
+    let piaculum: [PiaculumElement]
+    let piccadilly: [Piccadilly]
+    let piffler: [Piffler]
+    let pithful: [Pithful]
+    let placuntitis: [Placuntiti]
+    let plectopterous: [Plectopterous]
+    let pneumocele: [Pneumocele?]
+    let poliorcetic: [Poliorcetic]
+    let poormaster: [Poormaster]
+    let potwhisky: [PotwhiskyElement]
+    let practicalizer: [Practicalizer]
+    let prefreshman: [PrefreshmanElement]
+    let prehensility: [Prehensility]
+    let prevoidance: [Prevoidance]
+    let probant: [[String: Int?]]
+    let protext: [Protext]
+
+    enum CodingKeys: String, CodingKey {
+        case juror = "juror"
+        case kongoni = "kongoni"
+        case ladronism = "ladronism"
+        case landlubberly = "landlubberly"
+        case listener = "listener"
+        case lupus = "lupus"
+        case maslin = "maslin"
+        case monazite = "monazite"
+        case monoliteral = "monoliteral"
+        case monotheistically = "monotheistically"
+        case montage = "montage"
+        case moralness = "moralness"
+        case mowra = "mowra"
+        case mulishly = "mulishly"
+        case myoscope = "myoscope"
+        case nach = "nach"
+        case neuromastic = "neuromastic"
+        case noncontributing = "noncontributing"
+        case nonnervous = "nonnervous"
+        case nonvaluation = "nonvaluation"
+        case occupationalist = "occupationalist"
+        case outrival = "outrival"
+        case paleographically = "paleographically"
+        case pamphletwise = "pamphletwise"
+        case pediatrics = "pediatrics"
+        case perceptive = "perceptive"
+        case piaculum = "piaculum"
+        case piccadilly = "piccadilly"
+        case piffler = "piffler"
+        case pithful = "pithful"
+        case placuntitis = "placuntitis"
+        case plectopterous = "plectopterous"
+        case pneumocele = "pneumocele"
+        case poliorcetic = "poliorcetic"
+        case poormaster = "poormaster"
+        case potwhisky = "potwhisky"
+        case practicalizer = "practicalizer"
+        case prefreshman = "prefreshman"
+        case prehensility = "prehensility"
+        case prevoidance = "prevoidance"
+        case probant = "probant"
+        case protext = "protext"
+    }
+
+    init(juror: [JurorElement], kongoni: [Kongoni], ladronism: [LadronismElement], landlubberly: [LandlubberlyElement], listener: [Listener], lupus: [LupusElement], maslin: [Maslin], monazite: [MonaziteElement], monoliteral: [Monoliteral], monotheistically: [MonotheisticallyElement], montage: [Montage], moralness: [Moralness], mowra: [MonaziteClass?], mulishly: [Mulishly], myoscope: [Myoscope], nach: [[Int?]?], neuromastic: [Neuromastic], noncontributing: [Noncontributing], nonnervous: [Nonnervous], nonvaluation: [Nonvaluation], occupationalist: [OccupationalistElement], outrival: [OutrivalElement], paleographically: [Paleographically], pamphletwise: [Pamphletwise], pediatrics: [Pediatric], perceptive: [Bool], piaculum: [PiaculumElement], piccadilly: [Piccadilly], piffler: [Piffler], pithful: [Pithful], placuntitis: [Placuntiti], plectopterous: [Plectopterous], pneumocele: [Pneumocele?], poliorcetic: [Poliorcetic], poormaster: [Poormaster], potwhisky: [PotwhiskyElement], practicalizer: [Practicalizer], prefreshman: [PrefreshmanElement], prehensility: [Prehensility], prevoidance: [Prevoidance], probant: [[String: Int?]], protext: [Protext]) {
+        self.juror = juror
+        self.kongoni = kongoni
+        self.ladronism = ladronism
+        self.landlubberly = landlubberly
+        self.listener = listener
+        self.lupus = lupus
+        self.maslin = maslin
+        self.monazite = monazite
+        self.monoliteral = monoliteral
+        self.monotheistically = monotheistically
+        self.montage = montage
+        self.moralness = moralness
+        self.mowra = mowra
+        self.mulishly = mulishly
+        self.myoscope = myoscope
+        self.nach = nach
+        self.neuromastic = neuromastic
+        self.noncontributing = noncontributing
+        self.nonnervous = nonnervous
+        self.nonvaluation = nonvaluation
+        self.occupationalist = occupationalist
+        self.outrival = outrival
+        self.paleographically = paleographically
+        self.pamphletwise = pamphletwise
+        self.pediatrics = pediatrics
+        self.perceptive = perceptive
+        self.piaculum = piaculum
+        self.piccadilly = piccadilly
+        self.piffler = piffler
+        self.pithful = pithful
+        self.placuntitis = placuntitis
+        self.plectopterous = plectopterous
+        self.pneumocele = pneumocele
+        self.poliorcetic = poliorcetic
+        self.poormaster = poormaster
+        self.potwhisky = potwhisky
+        self.practicalizer = practicalizer
+        self.prefreshman = prefreshman
+        self.prehensility = prehensility
+        self.prevoidance = prevoidance
+        self.probant = probant
+        self.protext = protext
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(TopLevel.self, from: data)
+        self.init(juror: me.juror, kongoni: me.kongoni, ladronism: me.ladronism, landlubberly: me.landlubberly, listener: me.listener, lupus: me.lupus, maslin: me.maslin, monazite: me.monazite, monoliteral: me.monoliteral, monotheistically: me.monotheistically, montage: me.montage, moralness: me.moralness, mowra: me.mowra, mulishly: me.mulishly, myoscope: me.myoscope, nach: me.nach, neuromastic: me.neuromastic, noncontributing: me.noncontributing, nonnervous: me.nonnervous, nonvaluation: me.nonvaluation, occupationalist: me.occupationalist, outrival: me.outrival, paleographically: me.paleographically, pamphletwise: me.pamphletwise, pediatrics: me.pediatrics, perceptive: me.perceptive, piaculum: me.piaculum, piccadilly: me.piccadilly, piffler: me.piffler, pithful: me.pithful, placuntitis: me.placuntitis, plectopterous: me.plectopterous, pneumocele: me.pneumocele, poliorcetic: me.poliorcetic, poormaster: me.poormaster, potwhisky: me.potwhisky, practicalizer: me.practicalizer, prefreshman: me.prefreshman, prehensility: me.prehensility, prevoidance: me.prevoidance, probant: me.probant, protext: me.protext)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        juror: [JurorElement]? = nil,
+        kongoni: [Kongoni]? = nil,
+        ladronism: [LadronismElement]? = nil,
+        landlubberly: [LandlubberlyElement]? = nil,
+        listener: [Listener]? = nil,
+        lupus: [LupusElement]? = nil,
+        maslin: [Maslin]? = nil,
+        monazite: [MonaziteElement]? = nil,
+        monoliteral: [Monoliteral]? = nil,
+        monotheistically: [MonotheisticallyElement]? = nil,
+        montage: [Montage]? = nil,
+        moralness: [Moralness]? = nil,
+        mowra: [MonaziteClass?]? = nil,
+        mulishly: [Mulishly]? = nil,
+        myoscope: [Myoscope]? = nil,
+        nach: [[Int?]?]? = nil,
+        neuromastic: [Neuromastic]? = nil,
+        noncontributing: [Noncontributing]? = nil,
+        nonnervous: [Nonnervous]? = nil,
+        nonvaluation: [Nonvaluation]? = nil,
+        occupationalist: [OccupationalistElement]? = nil,
+        outrival: [OutrivalElement]? = nil,
+        paleographically: [Paleographically]? = nil,
+        pamphletwise: [Pamphletwise]? = nil,
+        pediatrics: [Pediatric]? = nil,
+        perceptive: [Bool]? = nil,
+        piaculum: [PiaculumElement]? = nil,
+        piccadilly: [Piccadilly]? = nil,
+        piffler: [Piffler]? = nil,
+        pithful: [Pithful]? = nil,
+        placuntitis: [Placuntiti]? = nil,
+        plectopterous: [Plectopterous]? = nil,
+        pneumocele: [Pneumocele?]? = nil,
+        poliorcetic: [Poliorcetic]? = nil,
+        poormaster: [Poormaster]? = nil,
+        potwhisky: [PotwhiskyElement]? = nil,
+        practicalizer: [Practicalizer]? = nil,
+        prefreshman: [PrefreshmanElement]? = nil,
+        prehensility: [Prehensility]? = nil,
+        prevoidance: [Prevoidance]? = nil,
+        probant: [[String: Int?]]? = nil,
+        protext: [Protext]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            juror: juror ?? self.juror,
+            kongoni: kongoni ?? self.kongoni,
+            ladronism: ladronism ?? self.ladronism,
+            landlubberly: landlubberly ?? self.landlubberly,
+            listener: listener ?? self.listener,
+            lupus: lupus ?? self.lupus,
+            maslin: maslin ?? self.maslin,
+            monazite: monazite ?? self.monazite,
+            monoliteral: monoliteral ?? self.monoliteral,
+            monotheistically: monotheistically ?? self.monotheistically,
+            montage: montage ?? self.montage,
+            moralness: moralness ?? self.moralness,
+            mowra: mowra ?? self.mowra,
+            mulishly: mulishly ?? self.mulishly,
+            myoscope: myoscope ?? self.myoscope,
+            nach: nach ?? self.nach,
+            neuromastic: neuromastic ?? self.neuromastic,
+            noncontributing: noncontributing ?? self.noncontributing,
+            nonnervous: nonnervous ?? self.nonnervous,
+            nonvaluation: nonvaluation ?? self.nonvaluation,
+            occupationalist: occupationalist ?? self.occupationalist,
+            outrival: outrival ?? self.outrival,
+            paleographically: paleographically ?? self.paleographically,
+            pamphletwise: pamphletwise ?? self.pamphletwise,
+            pediatrics: pediatrics ?? self.pediatrics,
+            perceptive: perceptive ?? self.perceptive,
+            piaculum: piaculum ?? self.piaculum,
+            piccadilly: piccadilly ?? self.piccadilly,
+            piffler: piffler ?? self.piffler,
+            pithful: pithful ?? self.pithful,
+            placuntitis: placuntitis ?? self.placuntitis,
+            plectopterous: plectopterous ?? self.plectopterous,
+            pneumocele: pneumocele ?? self.pneumocele,
+            poliorcetic: poliorcetic ?? self.poliorcetic,
+            poormaster: poormaster ?? self.poormaster,
+            potwhisky: potwhisky ?? self.potwhisky,
+            practicalizer: practicalizer ?? self.practicalizer,
+            prefreshman: prefreshman ?? self.prefreshman,
+            prehensility: prehensility ?? self.prehensility,
+            prevoidance: prevoidance ?? self.prevoidance,
+            probant: probant ?? self.probant,
+            protext: protext ?? self.protext
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum JurorElement: Codable {
+    case bool(Bool)
+    case jurorClass(JurorClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(JurorClass.self) {
+            self = .jurorClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(JurorElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JurorElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .jurorClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - JurorClass
+final class JurorClass: Codable {
+    let adipsy: JSONNull?
+    let auxiliator: JSONNull?
+    let benda: JSONNull?
+    let benjamin: JSONNull?
+    let brandling: JSONNull?
+    let epicurishly: JSONNull?
+    let eremochaetous: JSONNull?
+    let marten: JSONNull?
+    let monocline: JSONNull?
+    let olea: JSONNull?
+    let palgat: JSONNull?
+    let pennyworth: JSONNull?
+    let pioury: JSONNull?
+    let pragmatistic: JSONNull?
+    let stylelessness: JSONNull?
+    let systematical: JSONNull?
+    let thready: JSONNull?
+    let uncontemporary: JSONNull?
+    let uncouched: JSONNull?
+    let uninhabitedness: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case adipsy = "adipsy"
+        case auxiliator = "auxiliator"
+        case benda = "benda"
+        case benjamin = "benjamin"
+        case brandling = "brandling"
+        case epicurishly = "epicurishly"
+        case eremochaetous = "eremochaetous"
+        case marten = "marten"
+        case monocline = "monocline"
+        case olea = "Olea"
+        case palgat = "palgat"
+        case pennyworth = "pennyworth"
+        case pioury = "pioury"
+        case pragmatistic = "pragmatistic"
+        case stylelessness = "stylelessness"
+        case systematical = "systematical"
+        case thready = "thready"
+        case uncontemporary = "uncontemporary"
+        case uncouched = "uncouched"
+        case uninhabitedness = "uninhabitedness"
+    }
+
+    init(adipsy: JSONNull?, auxiliator: JSONNull?, benda: JSONNull?, benjamin: JSONNull?, brandling: JSONNull?, epicurishly: JSONNull?, eremochaetous: JSONNull?, marten: JSONNull?, monocline: JSONNull?, olea: JSONNull?, palgat: JSONNull?, pennyworth: JSONNull?, pioury: JSONNull?, pragmatistic: JSONNull?, stylelessness: JSONNull?, systematical: JSONNull?, thready: JSONNull?, uncontemporary: JSONNull?, uncouched: JSONNull?, uninhabitedness: JSONNull?) {
+        self.adipsy = adipsy
+        self.auxiliator = auxiliator
+        self.benda = benda
+        self.benjamin = benjamin
+        self.brandling = brandling
+        self.epicurishly = epicurishly
+        self.eremochaetous = eremochaetous
+        self.marten = marten
+        self.monocline = monocline
+        self.olea = olea
+        self.palgat = palgat
+        self.pennyworth = pennyworth
+        self.pioury = pioury
+        self.pragmatistic = pragmatistic
+        self.stylelessness = stylelessness
+        self.systematical = systematical
+        self.thready = thready
+        self.uncontemporary = uncontemporary
+        self.uncouched = uncouched
+        self.uninhabitedness = uninhabitedness
+    }
+}
+
+// MARK: JurorClass convenience initializers and mutators
+
+extension JurorClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(JurorClass.self, from: data)
+        self.init(adipsy: me.adipsy, auxiliator: me.auxiliator, benda: me.benda, benjamin: me.benjamin, brandling: me.brandling, epicurishly: me.epicurishly, eremochaetous: me.eremochaetous, marten: me.marten, monocline: me.monocline, olea: me.olea, palgat: me.palgat, pennyworth: me.pennyworth, pioury: me.pioury, pragmatistic: me.pragmatistic, stylelessness: me.stylelessness, systematical: me.systematical, thready: me.thready, uncontemporary: me.uncontemporary, uncouched: me.uncouched, uninhabitedness: me.uninhabitedness)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        adipsy: JSONNull?? = nil,
+        auxiliator: JSONNull?? = nil,
+        benda: JSONNull?? = nil,
+        benjamin: JSONNull?? = nil,
+        brandling: JSONNull?? = nil,
+        epicurishly: JSONNull?? = nil,
+        eremochaetous: JSONNull?? = nil,
+        marten: JSONNull?? = nil,
+        monocline: JSONNull?? = nil,
+        olea: JSONNull?? = nil,
+        palgat: JSONNull?? = nil,
+        pennyworth: JSONNull?? = nil,
+        pioury: JSONNull?? = nil,
+        pragmatistic: JSONNull?? = nil,
+        stylelessness: JSONNull?? = nil,
+        systematical: JSONNull?? = nil,
+        thready: JSONNull?? = nil,
+        uncontemporary: JSONNull?? = nil,
+        uncouched: JSONNull?? = nil,
+        uninhabitedness: JSONNull?? = nil
+    ) -> JurorClass {
+        return JurorClass(
+            adipsy: adipsy ?? self.adipsy,
+            auxiliator: auxiliator ?? self.auxiliator,
+            benda: benda ?? self.benda,
+            benjamin: benjamin ?? self.benjamin,
+            brandling: brandling ?? self.brandling,
+            epicurishly: epicurishly ?? self.epicurishly,
+            eremochaetous: eremochaetous ?? self.eremochaetous,
+            marten: marten ?? self.marten,
+            monocline: monocline ?? self.monocline,
+            olea: olea ?? self.olea,
+            palgat: palgat ?? self.palgat,
+            pennyworth: pennyworth ?? self.pennyworth,
+            pioury: pioury ?? self.pioury,
+            pragmatistic: pragmatistic ?? self.pragmatistic,
+            stylelessness: stylelessness ?? self.stylelessness,
+            systematical: systematical ?? self.systematical,
+            thready: thready ?? self.thready,
+            uncontemporary: uncontemporary ?? self.uncontemporary,
+            uncouched: uncouched ?? self.uncouched,
+            uninhabitedness: uninhabitedness ?? self.uninhabitedness
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Kongoni: Codable {
+    case integerArray([Int])
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Kongoni.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Kongoni"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum LadronismElement: Codable {
+    case double(Double)
+    case ladronismClass(LadronismClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(LadronismClass.self) {
+            self = .ladronismClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(LadronismElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LadronismElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .ladronismClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - LadronismClass
+final class LadronismClass: Codable {
+    let acclaimer: JSONNull?
+    let achree: JSONNull?
+    let base: JSONNull?
+    let conundrumize: JSONNull?
+    let degerminator: JSONNull?
+    let describable: JSONNull?
+    let exasperatedly: JSONNull?
+    let heroine: JSONNull?
+    let indazin: JSONNull?
+    let luteous: JSONNull?
+    let papular: JSONNull?
+    let pritch: JSONNull?
+    let prodenia: JSONNull?
+    let seege: JSONNull?
+    let shopgirl: JSONNull?
+    let tragedietta: JSONNull?
+    let unsparse: JSONNull?
+    let uplook: JSONNull?
+    let vermiformis: JSONNull?
+    let whafabout: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acclaimer = "acclaimer"
+        case achree = "achree"
+        case base = "base"
+        case conundrumize = "conundrumize"
+        case degerminator = "degerminator"
+        case describable = "describable"
+        case exasperatedly = "exasperatedly"
+        case heroine = "heroine"
+        case indazin = "indazin"
+        case luteous = "luteous"
+        case papular = "papular"
+        case pritch = "pritch"
+        case prodenia = "Prodenia"
+        case seege = "seege"
+        case shopgirl = "shopgirl"
+        case tragedietta = "tragedietta"
+        case unsparse = "unsparse"
+        case uplook = "uplook"
+        case vermiformis = "vermiformis"
+        case whafabout = "whafabout"
+    }
+
+    init(acclaimer: JSONNull?, achree: JSONNull?, base: JSONNull?, conundrumize: JSONNull?, degerminator: JSONNull?, describable: JSONNull?, exasperatedly: JSONNull?, heroine: JSONNull?, indazin: JSONNull?, luteous: JSONNull?, papular: JSONNull?, pritch: JSONNull?, prodenia: JSONNull?, seege: JSONNull?, shopgirl: JSONNull?, tragedietta: JSONNull?, unsparse: JSONNull?, uplook: JSONNull?, vermiformis: JSONNull?, whafabout: JSONNull?) {
+        self.acclaimer = acclaimer
+        self.achree = achree
+        self.base = base
+        self.conundrumize = conundrumize
+        self.degerminator = degerminator
+        self.describable = describable
+        self.exasperatedly = exasperatedly
+        self.heroine = heroine
+        self.indazin = indazin
+        self.luteous = luteous
+        self.papular = papular
+        self.pritch = pritch
+        self.prodenia = prodenia
+        self.seege = seege
+        self.shopgirl = shopgirl
+        self.tragedietta = tragedietta
+        self.unsparse = unsparse
+        self.uplook = uplook
+        self.vermiformis = vermiformis
+        self.whafabout = whafabout
+    }
+}
+
+// MARK: LadronismClass convenience initializers and mutators
+
+extension LadronismClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(LadronismClass.self, from: data)
+        self.init(acclaimer: me.acclaimer, achree: me.achree, base: me.base, conundrumize: me.conundrumize, degerminator: me.degerminator, describable: me.describable, exasperatedly: me.exasperatedly, heroine: me.heroine, indazin: me.indazin, luteous: me.luteous, papular: me.papular, pritch: me.pritch, prodenia: me.prodenia, seege: me.seege, shopgirl: me.shopgirl, tragedietta: me.tragedietta, unsparse: me.unsparse, uplook: me.uplook, vermiformis: me.vermiformis, whafabout: me.whafabout)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acclaimer: JSONNull?? = nil,
+        achree: JSONNull?? = nil,
+        base: JSONNull?? = nil,
+        conundrumize: JSONNull?? = nil,
+        degerminator: JSONNull?? = nil,
+        describable: JSONNull?? = nil,
+        exasperatedly: JSONNull?? = nil,
+        heroine: JSONNull?? = nil,
+        indazin: JSONNull?? = nil,
+        luteous: JSONNull?? = nil,
+        papular: JSONNull?? = nil,
+        pritch: JSONNull?? = nil,
+        prodenia: JSONNull?? = nil,
+        seege: JSONNull?? = nil,
+        shopgirl: JSONNull?? = nil,
+        tragedietta: JSONNull?? = nil,
+        unsparse: JSONNull?? = nil,
+        uplook: JSONNull?? = nil,
+        vermiformis: JSONNull?? = nil,
+        whafabout: JSONNull?? = nil
+    ) -> LadronismClass {
+        return LadronismClass(
+            acclaimer: acclaimer ?? self.acclaimer,
+            achree: achree ?? self.achree,
+            base: base ?? self.base,
+            conundrumize: conundrumize ?? self.conundrumize,
+            degerminator: degerminator ?? self.degerminator,
+            describable: describable ?? self.describable,
+            exasperatedly: exasperatedly ?? self.exasperatedly,
+            heroine: heroine ?? self.heroine,
+            indazin: indazin ?? self.indazin,
+            luteous: luteous ?? self.luteous,
+            papular: papular ?? self.papular,
+            pritch: pritch ?? self.pritch,
+            prodenia: prodenia ?? self.prodenia,
+            seege: seege ?? self.seege,
+            shopgirl: shopgirl ?? self.shopgirl,
+            tragedietta: tragedietta ?? self.tragedietta,
+            unsparse: unsparse ?? self.unsparse,
+            uplook: uplook ?? self.uplook,
+            vermiformis: vermiformis ?? self.vermiformis,
+            whafabout: whafabout ?? self.whafabout
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum LandlubberlyElement: Codable {
+    case bool(Bool)
+    case integer(Int)
+    case landlubberlyClass(LandlubberlyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(LandlubberlyClass.self) {
+            self = .landlubberlyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(LandlubberlyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LandlubberlyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .landlubberlyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - LandlubberlyClass
+final class LandlubberlyClass: Codable {
+    let acropoleis: JSONNull?
+    let aminate: JSONNull?
+    let amyraldism: JSONNull?
+    let bipenniform: JSONNull?
+    let bugre: JSONNull?
+    let calycule: JSONNull?
+    let caoutchouc: JSONNull?
+    let disprover: JSONNull?
+    let fitroot: JSONNull?
+    let fulgently: JSONNull?
+    let kickup: JSONNull?
+    let laevoversion: JSONNull?
+    let moter: JSONNull?
+    let objectivity: JSONNull?
+    let posterity: JSONNull?
+    let postnuptial: JSONNull?
+    let precedentary: JSONNull?
+    let saddling: JSONNull?
+    let subcurrent: JSONNull?
+    let unrecriminative: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acropoleis = "acropoleis"
+        case aminate = "aminate"
+        case amyraldism = "Amyraldism"
+        case bipenniform = "bipenniform"
+        case bugre = "bugre"
+        case calycule = "calycule"
+        case caoutchouc = "caoutchouc"
+        case disprover = "disprover"
+        case fitroot = "fitroot"
+        case fulgently = "fulgently"
+        case kickup = "kickup"
+        case laevoversion = "laevoversion"
+        case moter = "moter"
+        case objectivity = "objectivity"
+        case posterity = "posterity"
+        case postnuptial = "postnuptial"
+        case precedentary = "precedentary"
+        case saddling = "saddling"
+        case subcurrent = "subcurrent"
+        case unrecriminative = "unrecriminative"
+    }
+
+    init(acropoleis: JSONNull?, aminate: JSONNull?, amyraldism: JSONNull?, bipenniform: JSONNull?, bugre: JSONNull?, calycule: JSONNull?, caoutchouc: JSONNull?, disprover: JSONNull?, fitroot: JSONNull?, fulgently: JSONNull?, kickup: JSONNull?, laevoversion: JSONNull?, moter: JSONNull?, objectivity: JSONNull?, posterity: JSONNull?, postnuptial: JSONNull?, precedentary: JSONNull?, saddling: JSONNull?, subcurrent: JSONNull?, unrecriminative: JSONNull?) {
+        self.acropoleis = acropoleis
+        self.aminate = aminate
+        self.amyraldism = amyraldism
+        self.bipenniform = bipenniform
+        self.bugre = bugre
+        self.calycule = calycule
+        self.caoutchouc = caoutchouc
+        self.disprover = disprover
+        self.fitroot = fitroot
+        self.fulgently = fulgently
+        self.kickup = kickup
+        self.laevoversion = laevoversion
+        self.moter = moter
+        self.objectivity = objectivity
+        self.posterity = posterity
+        self.postnuptial = postnuptial
+        self.precedentary = precedentary
+        self.saddling = saddling
+        self.subcurrent = subcurrent
+        self.unrecriminative = unrecriminative
+    }
+}
+
+// MARK: LandlubberlyClass convenience initializers and mutators
+
+extension LandlubberlyClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(LandlubberlyClass.self, from: data)
+        self.init(acropoleis: me.acropoleis, aminate: me.aminate, amyraldism: me.amyraldism, bipenniform: me.bipenniform, bugre: me.bugre, calycule: me.calycule, caoutchouc: me.caoutchouc, disprover: me.disprover, fitroot: me.fitroot, fulgently: me.fulgently, kickup: me.kickup, laevoversion: me.laevoversion, moter: me.moter, objectivity: me.objectivity, posterity: me.posterity, postnuptial: me.postnuptial, precedentary: me.precedentary, saddling: me.saddling, subcurrent: me.subcurrent, unrecriminative: me.unrecriminative)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acropoleis: JSONNull?? = nil,
+        aminate: JSONNull?? = nil,
+        amyraldism: JSONNull?? = nil,
+        bipenniform: JSONNull?? = nil,
+        bugre: JSONNull?? = nil,
+        calycule: JSONNull?? = nil,
+        caoutchouc: JSONNull?? = nil,
+        disprover: JSONNull?? = nil,
+        fitroot: JSONNull?? = nil,
+        fulgently: JSONNull?? = nil,
+        kickup: JSONNull?? = nil,
+        laevoversion: JSONNull?? = nil,
+        moter: JSONNull?? = nil,
+        objectivity: JSONNull?? = nil,
+        posterity: JSONNull?? = nil,
+        postnuptial: JSONNull?? = nil,
+        precedentary: JSONNull?? = nil,
+        saddling: JSONNull?? = nil,
+        subcurrent: JSONNull?? = nil,
+        unrecriminative: JSONNull?? = nil
+    ) -> LandlubberlyClass {
+        return LandlubberlyClass(
+            acropoleis: acropoleis ?? self.acropoleis,
+            aminate: aminate ?? self.aminate,
+            amyraldism: amyraldism ?? self.amyraldism,
+            bipenniform: bipenniform ?? self.bipenniform,
+            bugre: bugre ?? self.bugre,
+            calycule: calycule ?? self.calycule,
+            caoutchouc: caoutchouc ?? self.caoutchouc,
+            disprover: disprover ?? self.disprover,
+            fitroot: fitroot ?? self.fitroot,
+            fulgently: fulgently ?? self.fulgently,
+            kickup: kickup ?? self.kickup,
+            laevoversion: laevoversion ?? self.laevoversion,
+            moter: moter ?? self.moter,
+            objectivity: objectivity ?? self.objectivity,
+            posterity: posterity ?? self.posterity,
+            postnuptial: postnuptial ?? self.postnuptial,
+            precedentary: precedentary ?? self.precedentary,
+            saddling: saddling ?? self.saddling,
+            subcurrent: subcurrent ?? self.subcurrent,
+            unrecriminative: unrecriminative ?? self.unrecriminative
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Listener: Codable {
+    case integer(Int)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Listener.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Listener"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum LupusElement: Codable {
+    case integer(Int)
+    case lupusClass(LupusClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(LupusClass.self) {
+            self = .lupusClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(LupusElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LupusElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .lupusClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - LupusClass
+final class LupusClass: Codable {
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let chlorioninae: Int?
+    let corvinae: Int?
+    let crassina: Int?
+    let disdiapason: String?
+    let exiguity: Int?
+    let farcist: Int?
+    let holographical: Int?
+    let homocerc: Bool?
+    let ichthyophagan: Int?
+    let implacable: Int?
+    let nonbookish: JSONNull?
+    let outshiner: Int?
+    let overweather: Int?
+    let protonegroid: Int?
+    let shallowish: Int?
+    let snoke: Int?
+    let snout: Int?
+    let surveillance: Int?
+    let threshingtime: Int?
+    let thysanocarpus: Int?
+    let unsignificantly: Int?
+    let unsnap: Int?
+    let vendible: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case chlorioninae = "Chlorioninae"
+        case corvinae = "Corvinae"
+        case crassina = "Crassina"
+        case disdiapason = "disdiapason"
+        case exiguity = "exiguity"
+        case farcist = "farcist"
+        case holographical = "holographical"
+        case homocerc = "homocerc"
+        case ichthyophagan = "ichthyophagan"
+        case implacable = "implacable"
+        case nonbookish = "nonbookish"
+        case outshiner = "outshiner"
+        case overweather = "overweather"
+        case protonegroid = "protonegroid"
+        case shallowish = "shallowish"
+        case snoke = "snoke"
+        case snout = "snout"
+        case surveillance = "surveillance"
+        case threshingtime = "threshingtime"
+        case thysanocarpus = "Thysanocarpus"
+        case unsignificantly = "unsignificantly"
+        case unsnap = "unsnap"
+        case vendible = "vendible"
+    }
+
+    init(catharticalness: Double?, chirotherium: Int?, chlorioninae: Int?, corvinae: Int?, crassina: Int?, disdiapason: String?, exiguity: Int?, farcist: Int?, holographical: Int?, homocerc: Bool?, ichthyophagan: Int?, implacable: Int?, nonbookish: JSONNull?, outshiner: Int?, overweather: Int?, protonegroid: Int?, shallowish: Int?, snoke: Int?, snout: Int?, surveillance: Int?, threshingtime: Int?, thysanocarpus: Int?, unsignificantly: Int?, unsnap: Int?, vendible: Int?) {
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.chlorioninae = chlorioninae
+        self.corvinae = corvinae
+        self.crassina = crassina
+        self.disdiapason = disdiapason
+        self.exiguity = exiguity
+        self.farcist = farcist
+        self.holographical = holographical
+        self.homocerc = homocerc
+        self.ichthyophagan = ichthyophagan
+        self.implacable = implacable
+        self.nonbookish = nonbookish
+        self.outshiner = outshiner
+        self.overweather = overweather
+        self.protonegroid = protonegroid
+        self.shallowish = shallowish
+        self.snoke = snoke
+        self.snout = snout
+        self.surveillance = surveillance
+        self.threshingtime = threshingtime
+        self.thysanocarpus = thysanocarpus
+        self.unsignificantly = unsignificantly
+        self.unsnap = unsnap
+        self.vendible = vendible
+    }
+}
+
+// MARK: LupusClass convenience initializers and mutators
+
+extension LupusClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(LupusClass.self, from: data)
+        self.init(catharticalness: me.catharticalness, chirotherium: me.chirotherium, chlorioninae: me.chlorioninae, corvinae: me.corvinae, crassina: me.crassina, disdiapason: me.disdiapason, exiguity: me.exiguity, farcist: me.farcist, holographical: me.holographical, homocerc: me.homocerc, ichthyophagan: me.ichthyophagan, implacable: me.implacable, nonbookish: me.nonbookish, outshiner: me.outshiner, overweather: me.overweather, protonegroid: me.protonegroid, shallowish: me.shallowish, snoke: me.snoke, snout: me.snout, surveillance: me.surveillance, threshingtime: me.threshingtime, thysanocarpus: me.thysanocarpus, unsignificantly: me.unsignificantly, unsnap: me.unsnap, vendible: me.vendible)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        chlorioninae: Int?? = nil,
+        corvinae: Int?? = nil,
+        crassina: Int?? = nil,
+        disdiapason: String?? = nil,
+        exiguity: Int?? = nil,
+        farcist: Int?? = nil,
+        holographical: Int?? = nil,
+        homocerc: Bool?? = nil,
+        ichthyophagan: Int?? = nil,
+        implacable: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        outshiner: Int?? = nil,
+        overweather: Int?? = nil,
+        protonegroid: Int?? = nil,
+        shallowish: Int?? = nil,
+        snoke: Int?? = nil,
+        snout: Int?? = nil,
+        surveillance: Int?? = nil,
+        threshingtime: Int?? = nil,
+        thysanocarpus: Int?? = nil,
+        unsignificantly: Int?? = nil,
+        unsnap: Int?? = nil,
+        vendible: Int?? = nil
+    ) -> LupusClass {
+        return LupusClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chlorioninae: chlorioninae ?? self.chlorioninae,
+            corvinae: corvinae ?? self.corvinae,
+            crassina: crassina ?? self.crassina,
+            disdiapason: disdiapason ?? self.disdiapason,
+            exiguity: exiguity ?? self.exiguity,
+            farcist: farcist ?? self.farcist,
+            holographical: holographical ?? self.holographical,
+            homocerc: homocerc ?? self.homocerc,
+            ichthyophagan: ichthyophagan ?? self.ichthyophagan,
+            implacable: implacable ?? self.implacable,
+            nonbookish: nonbookish ?? self.nonbookish,
+            outshiner: outshiner ?? self.outshiner,
+            overweather: overweather ?? self.overweather,
+            protonegroid: protonegroid ?? self.protonegroid,
+            shallowish: shallowish ?? self.shallowish,
+            snoke: snoke ?? self.snoke,
+            snout: snout ?? self.snout,
+            surveillance: surveillance ?? self.surveillance,
+            threshingtime: threshingtime ?? self.threshingtime,
+            thysanocarpus: thysanocarpus ?? self.thysanocarpus,
+            unsignificantly: unsignificantly ?? self.unsignificantly,
+            unsnap: unsnap ?? self.unsnap,
+            vendible: vendible ?? self.vendible
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Maslin
+final class Maslin: Codable {
+    let alicant: Int?
+    let antiatonement: JSONNull?
+    let anticorrosive: Int?
+    let aphidozer: JSONNull?
+    let bakuninist: JSONNull?
+    let be: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let chub: Int?
+    let cuprosilicon: Int?
+    let curtailedly: Int?
+    let dellenite: Int?
+    let dimitry: Int?
+    let disdiapason: String?
+    let edifying: JSONNull?
+    let ethmoiditis: Int?
+    let gastralgy: JSONNull?
+    let goatherd: Int?
+    let hammerdress: Int?
+    let hangfire: JSONNull?
+    let homocerc: Bool?
+    let lacunosity: Int?
+    let longiloquence: JSONNull?
+    let mameliere: Int?
+    let motherless: JSONNull?
+    let nonbookish: JSONNull?
+    let noncorrodible: JSONNull?
+    let nonsensicality: JSONNull?
+    let oafishly: Int?
+    let pfund: JSONNull?
+    let preadvisory: JSONNull?
+    let retroflexed: JSONNull?
+    let saccharulmic: Int?
+    let scowlful: Int?
+    let secluded: JSONNull?
+    let slackage: JSONNull?
+    let sphaeridial: Int?
+    let spondulics: JSONNull?
+    let subsecive: Int?
+    let swellmobsman: JSONNull?
+    let trachyglossate: Int?
+    let trialogue: JSONNull?
+    let unassuaged: Int?
+    let ungross: JSONNull?
+    let unjudiciously: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case alicant = "Alicant"
+        case antiatonement = "antiatonement"
+        case anticorrosive = "anticorrosive"
+        case aphidozer = "aphidozer"
+        case bakuninist = "Bakuninist"
+        case be = "be"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case chub = "chub"
+        case cuprosilicon = "cuprosilicon"
+        case curtailedly = "curtailedly"
+        case dellenite = "dellenite"
+        case dimitry = "Dimitry"
+        case disdiapason = "disdiapason"
+        case edifying = "edifying"
+        case ethmoiditis = "ethmoiditis"
+        case gastralgy = "gastralgy"
+        case goatherd = "goatherd"
+        case hammerdress = "hammerdress"
+        case hangfire = "hangfire"
+        case homocerc = "homocerc"
+        case lacunosity = "lacunosity"
+        case longiloquence = "longiloquence"
+        case mameliere = "mameliere"
+        case motherless = "motherless"
+        case nonbookish = "nonbookish"
+        case noncorrodible = "noncorrodible"
+        case nonsensicality = "nonsensicality"
+        case oafishly = "oafishly"
+        case pfund = "pfund"
+        case preadvisory = "preadvisory"
+        case retroflexed = "retroflexed"
+        case saccharulmic = "saccharulmic"
+        case scowlful = "scowlful"
+        case secluded = "secluded"
+        case slackage = "slackage"
+        case sphaeridial = "sphaeridial"
+        case spondulics = "spondulics"
+        case subsecive = "subsecive"
+        case swellmobsman = "swellmobsman"
+        case trachyglossate = "trachyglossate"
+        case trialogue = "trialogue"
+        case unassuaged = "unassuaged"
+        case ungross = "ungross"
+        case unjudiciously = "unjudiciously"
+    }
+
+    init(alicant: Int?, antiatonement: JSONNull?, anticorrosive: Int?, aphidozer: JSONNull?, bakuninist: JSONNull?, be: Int?, catharticalness: Double?, chirotherium: Int?, chub: Int?, cuprosilicon: Int?, curtailedly: Int?, dellenite: Int?, dimitry: Int?, disdiapason: String?, edifying: JSONNull?, ethmoiditis: Int?, gastralgy: JSONNull?, goatherd: Int?, hammerdress: Int?, hangfire: JSONNull?, homocerc: Bool?, lacunosity: Int?, longiloquence: JSONNull?, mameliere: Int?, motherless: JSONNull?, nonbookish: JSONNull?, noncorrodible: JSONNull?, nonsensicality: JSONNull?, oafishly: Int?, pfund: JSONNull?, preadvisory: JSONNull?, retroflexed: JSONNull?, saccharulmic: Int?, scowlful: Int?, secluded: JSONNull?, slackage: JSONNull?, sphaeridial: Int?, spondulics: JSONNull?, subsecive: Int?, swellmobsman: JSONNull?, trachyglossate: Int?, trialogue: JSONNull?, unassuaged: Int?, ungross: JSONNull?, unjudiciously: JSONNull?) {
+        self.alicant = alicant
+        self.antiatonement = antiatonement
+        self.anticorrosive = anticorrosive
+        self.aphidozer = aphidozer
+        self.bakuninist = bakuninist
+        self.be = be
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.chub = chub
+        self.cuprosilicon = cuprosilicon
+        self.curtailedly = curtailedly
+        self.dellenite = dellenite
+        self.dimitry = dimitry
+        self.disdiapason = disdiapason
+        self.edifying = edifying
+        self.ethmoiditis = ethmoiditis
+        self.gastralgy = gastralgy
+        self.goatherd = goatherd
+        self.hammerdress = hammerdress
+        self.hangfire = hangfire
+        self.homocerc = homocerc
+        self.lacunosity = lacunosity
+        self.longiloquence = longiloquence
+        self.mameliere = mameliere
+        self.motherless = motherless
+        self.nonbookish = nonbookish
+        self.noncorrodible = noncorrodible
+        self.nonsensicality = nonsensicality
+        self.oafishly = oafishly
+        self.pfund = pfund
+        self.preadvisory = preadvisory
+        self.retroflexed = retroflexed
+        self.saccharulmic = saccharulmic
+        self.scowlful = scowlful
+        self.secluded = secluded
+        self.slackage = slackage
+        self.sphaeridial = sphaeridial
+        self.spondulics = spondulics
+        self.subsecive = subsecive
+        self.swellmobsman = swellmobsman
+        self.trachyglossate = trachyglossate
+        self.trialogue = trialogue
+        self.unassuaged = unassuaged
+        self.ungross = ungross
+        self.unjudiciously = unjudiciously
+    }
+}
+
+// MARK: Maslin convenience initializers and mutators
+
+extension Maslin {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Maslin.self, from: data)
+        self.init(alicant: me.alicant, antiatonement: me.antiatonement, anticorrosive: me.anticorrosive, aphidozer: me.aphidozer, bakuninist: me.bakuninist, be: me.be, catharticalness: me.catharticalness, chirotherium: me.chirotherium, chub: me.chub, cuprosilicon: me.cuprosilicon, curtailedly: me.curtailedly, dellenite: me.dellenite, dimitry: me.dimitry, disdiapason: me.disdiapason, edifying: me.edifying, ethmoiditis: me.ethmoiditis, gastralgy: me.gastralgy, goatherd: me.goatherd, hammerdress: me.hammerdress, hangfire: me.hangfire, homocerc: me.homocerc, lacunosity: me.lacunosity, longiloquence: me.longiloquence, mameliere: me.mameliere, motherless: me.motherless, nonbookish: me.nonbookish, noncorrodible: me.noncorrodible, nonsensicality: me.nonsensicality, oafishly: me.oafishly, pfund: me.pfund, preadvisory: me.preadvisory, retroflexed: me.retroflexed, saccharulmic: me.saccharulmic, scowlful: me.scowlful, secluded: me.secluded, slackage: me.slackage, sphaeridial: me.sphaeridial, spondulics: me.spondulics, subsecive: me.subsecive, swellmobsman: me.swellmobsman, trachyglossate: me.trachyglossate, trialogue: me.trialogue, unassuaged: me.unassuaged, ungross: me.ungross, unjudiciously: me.unjudiciously)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        alicant: Int?? = nil,
+        antiatonement: JSONNull?? = nil,
+        anticorrosive: Int?? = nil,
+        aphidozer: JSONNull?? = nil,
+        bakuninist: JSONNull?? = nil,
+        be: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        chub: Int?? = nil,
+        cuprosilicon: Int?? = nil,
+        curtailedly: Int?? = nil,
+        dellenite: Int?? = nil,
+        dimitry: Int?? = nil,
+        disdiapason: String?? = nil,
+        edifying: JSONNull?? = nil,
+        ethmoiditis: Int?? = nil,
+        gastralgy: JSONNull?? = nil,
+        goatherd: Int?? = nil,
+        hammerdress: Int?? = nil,
+        hangfire: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        lacunosity: Int?? = nil,
+        longiloquence: JSONNull?? = nil,
+        mameliere: Int?? = nil,
+        motherless: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        noncorrodible: JSONNull?? = nil,
+        nonsensicality: JSONNull?? = nil,
+        oafishly: Int?? = nil,
+        pfund: JSONNull?? = nil,
+        preadvisory: JSONNull?? = nil,
+        retroflexed: JSONNull?? = nil,
+        saccharulmic: Int?? = nil,
+        scowlful: Int?? = nil,
+        secluded: JSONNull?? = nil,
+        slackage: JSONNull?? = nil,
+        sphaeridial: Int?? = nil,
+        spondulics: JSONNull?? = nil,
+        subsecive: Int?? = nil,
+        swellmobsman: JSONNull?? = nil,
+        trachyglossate: Int?? = nil,
+        trialogue: JSONNull?? = nil,
+        unassuaged: Int?? = nil,
+        ungross: JSONNull?? = nil,
+        unjudiciously: JSONNull?? = nil
+    ) -> Maslin {
+        return Maslin(
+            alicant: alicant ?? self.alicant,
+            antiatonement: antiatonement ?? self.antiatonement,
+            anticorrosive: anticorrosive ?? self.anticorrosive,
+            aphidozer: aphidozer ?? self.aphidozer,
+            bakuninist: bakuninist ?? self.bakuninist,
+            be: be ?? self.be,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chub: chub ?? self.chub,
+            cuprosilicon: cuprosilicon ?? self.cuprosilicon,
+            curtailedly: curtailedly ?? self.curtailedly,
+            dellenite: dellenite ?? self.dellenite,
+            dimitry: dimitry ?? self.dimitry,
+            disdiapason: disdiapason ?? self.disdiapason,
+            edifying: edifying ?? self.edifying,
+            ethmoiditis: ethmoiditis ?? self.ethmoiditis,
+            gastralgy: gastralgy ?? self.gastralgy,
+            goatherd: goatherd ?? self.goatherd,
+            hammerdress: hammerdress ?? self.hammerdress,
+            hangfire: hangfire ?? self.hangfire,
+            homocerc: homocerc ?? self.homocerc,
+            lacunosity: lacunosity ?? self.lacunosity,
+            longiloquence: longiloquence ?? self.longiloquence,
+            mameliere: mameliere ?? self.mameliere,
+            motherless: motherless ?? self.motherless,
+            nonbookish: nonbookish ?? self.nonbookish,
+            noncorrodible: noncorrodible ?? self.noncorrodible,
+            nonsensicality: nonsensicality ?? self.nonsensicality,
+            oafishly: oafishly ?? self.oafishly,
+            pfund: pfund ?? self.pfund,
+            preadvisory: preadvisory ?? self.preadvisory,
+            retroflexed: retroflexed ?? self.retroflexed,
+            saccharulmic: saccharulmic ?? self.saccharulmic,
+            scowlful: scowlful ?? self.scowlful,
+            secluded: secluded ?? self.secluded,
+            slackage: slackage ?? self.slackage,
+            sphaeridial: sphaeridial ?? self.sphaeridial,
+            spondulics: spondulics ?? self.spondulics,
+            subsecive: subsecive ?? self.subsecive,
+            swellmobsman: swellmobsman ?? self.swellmobsman,
+            trachyglossate: trachyglossate ?? self.trachyglossate,
+            trialogue: trialogue ?? self.trialogue,
+            unassuaged: unassuaged ?? self.unassuaged,
+            ungross: ungross ?? self.ungross,
+            unjudiciously: unjudiciously ?? self.unjudiciously
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum MonaziteElement: Codable {
+    case double(Double)
+    case monaziteClass(MonaziteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(MonaziteElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for MonaziteElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - MonaziteClass
+final class MonaziteClass: Codable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+
+    init(catharticalness: Double, chirotherium: Int, disdiapason: String, homocerc: Bool, nonbookish: JSONNull?) {
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.homocerc = homocerc
+        self.nonbookish = nonbookish
+    }
+}
+
+// MARK: MonaziteClass convenience initializers and mutators
+
+extension MonaziteClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(MonaziteClass.self, from: data)
+        self.init(catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, homocerc: me.homocerc, nonbookish: me.nonbookish)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> MonaziteClass {
+        return MonaziteClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Monoliteral: Codable {
+    case bool(Bool)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Monoliteral.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Monoliteral"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum MonotheisticallyElement: Codable {
+    case monotheisticallyClass(MonotheisticallyClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(MonotheisticallyClass.self) {
+            self = .monotheisticallyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(MonotheisticallyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for MonotheisticallyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .monotheisticallyClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - MonotheisticallyClass
+final class MonotheisticallyClass: Codable {
+    let blaspheme: JSONNull?
+    let catharticalness: Double?
+    let celiosalpingectomy: JSONNull?
+    let chirotherium: Int?
+    let consummativeness: JSONNull?
+    let disdiapason: String?
+    let egestive: JSONNull?
+    let enchylema: JSONNull?
+    let gasconade: JSONNull?
+    let holidayer: JSONNull?
+    let homocerc: Bool?
+    let intuitionalism: JSONNull?
+    let lophiostomate: JSONNull?
+    let nonbookish: JSONNull?
+    let nonvolition: JSONNull?
+    let palatableness: JSONNull?
+    let pimpery: JSONNull?
+    let previolation: JSONNull?
+    let reconveyance: JSONNull?
+    let registership: JSONNull?
+    let rhyacolite: JSONNull?
+    let smithereens: JSONNull?
+    let superedification: JSONNull?
+    let trust: JSONNull?
+    let whitestone: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case blaspheme = "blaspheme"
+        case catharticalness = "catharticalness"
+        case celiosalpingectomy = "celiosalpingectomy"
+        case chirotherium = "Chirotherium"
+        case consummativeness = "consummativeness"
+        case disdiapason = "disdiapason"
+        case egestive = "egestive"
+        case enchylema = "enchylema"
+        case gasconade = "gasconade"
+        case holidayer = "holidayer"
+        case homocerc = "homocerc"
+        case intuitionalism = "intuitionalism"
+        case lophiostomate = "lophiostomate"
+        case nonbookish = "nonbookish"
+        case nonvolition = "nonvolition"
+        case palatableness = "palatableness"
+        case pimpery = "pimpery"
+        case previolation = "previolation"
+        case reconveyance = "reconveyance"
+        case registership = "registership"
+        case rhyacolite = "rhyacolite"
+        case smithereens = "smithereens"
+        case superedification = "superedification"
+        case trust = "trust"
+        case whitestone = "whitestone"
+    }
+
+    init(blaspheme: JSONNull?, catharticalness: Double?, celiosalpingectomy: JSONNull?, chirotherium: Int?, consummativeness: JSONNull?, disdiapason: String?, egestive: JSONNull?, enchylema: JSONNull?, gasconade: JSONNull?, holidayer: JSONNull?, homocerc: Bool?, intuitionalism: JSONNull?, lophiostomate: JSONNull?, nonbookish: JSONNull?, nonvolition: JSONNull?, palatableness: JSONNull?, pimpery: JSONNull?, previolation: JSONNull?, reconveyance: JSONNull?, registership: JSONNull?, rhyacolite: JSONNull?, smithereens: JSONNull?, superedification: JSONNull?, trust: JSONNull?, whitestone: JSONNull?) {
+        self.blaspheme = blaspheme
+        self.catharticalness = catharticalness
+        self.celiosalpingectomy = celiosalpingectomy
+        self.chirotherium = chirotherium
+        self.consummativeness = consummativeness
+        self.disdiapason = disdiapason
+        self.egestive = egestive
+        self.enchylema = enchylema
+        self.gasconade = gasconade
+        self.holidayer = holidayer
+        self.homocerc = homocerc
+        self.intuitionalism = intuitionalism
+        self.lophiostomate = lophiostomate
+        self.nonbookish = nonbookish
+        self.nonvolition = nonvolition
+        self.palatableness = palatableness
+        self.pimpery = pimpery
+        self.previolation = previolation
+        self.reconveyance = reconveyance
+        self.registership = registership
+        self.rhyacolite = rhyacolite
+        self.smithereens = smithereens
+        self.superedification = superedification
+        self.trust = trust
+        self.whitestone = whitestone
+    }
+}
+
+// MARK: MonotheisticallyClass convenience initializers and mutators
+
+extension MonotheisticallyClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(MonotheisticallyClass.self, from: data)
+        self.init(blaspheme: me.blaspheme, catharticalness: me.catharticalness, celiosalpingectomy: me.celiosalpingectomy, chirotherium: me.chirotherium, consummativeness: me.consummativeness, disdiapason: me.disdiapason, egestive: me.egestive, enchylema: me.enchylema, gasconade: me.gasconade, holidayer: me.holidayer, homocerc: me.homocerc, intuitionalism: me.intuitionalism, lophiostomate: me.lophiostomate, nonbookish: me.nonbookish, nonvolition: me.nonvolition, palatableness: me.palatableness, pimpery: me.pimpery, previolation: me.previolation, reconveyance: me.reconveyance, registership: me.registership, rhyacolite: me.rhyacolite, smithereens: me.smithereens, superedification: me.superedification, trust: me.trust, whitestone: me.whitestone)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        blaspheme: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        celiosalpingectomy: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        consummativeness: JSONNull?? = nil,
+        disdiapason: String?? = nil,
+        egestive: JSONNull?? = nil,
+        enchylema: JSONNull?? = nil,
+        gasconade: JSONNull?? = nil,
+        holidayer: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        intuitionalism: JSONNull?? = nil,
+        lophiostomate: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        nonvolition: JSONNull?? = nil,
+        palatableness: JSONNull?? = nil,
+        pimpery: JSONNull?? = nil,
+        previolation: JSONNull?? = nil,
+        reconveyance: JSONNull?? = nil,
+        registership: JSONNull?? = nil,
+        rhyacolite: JSONNull?? = nil,
+        smithereens: JSONNull?? = nil,
+        superedification: JSONNull?? = nil,
+        trust: JSONNull?? = nil,
+        whitestone: JSONNull?? = nil
+    ) -> MonotheisticallyClass {
+        return MonotheisticallyClass(
+            blaspheme: blaspheme ?? self.blaspheme,
+            catharticalness: catharticalness ?? self.catharticalness,
+            celiosalpingectomy: celiosalpingectomy ?? self.celiosalpingectomy,
+            chirotherium: chirotherium ?? self.chirotherium,
+            consummativeness: consummativeness ?? self.consummativeness,
+            disdiapason: disdiapason ?? self.disdiapason,
+            egestive: egestive ?? self.egestive,
+            enchylema: enchylema ?? self.enchylema,
+            gasconade: gasconade ?? self.gasconade,
+            holidayer: holidayer ?? self.holidayer,
+            homocerc: homocerc ?? self.homocerc,
+            intuitionalism: intuitionalism ?? self.intuitionalism,
+            lophiostomate: lophiostomate ?? self.lophiostomate,
+            nonbookish: nonbookish ?? self.nonbookish,
+            nonvolition: nonvolition ?? self.nonvolition,
+            palatableness: palatableness ?? self.palatableness,
+            pimpery: pimpery ?? self.pimpery,
+            previolation: previolation ?? self.previolation,
+            reconveyance: reconveyance ?? self.reconveyance,
+            registership: registership ?? self.registership,
+            rhyacolite: rhyacolite ?? self.rhyacolite,
+            smithereens: smithereens ?? self.smithereens,
+            superedification: superedification ?? self.superedification,
+            trust: trust ?? self.trust,
+            whitestone: whitestone ?? self.whitestone
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Montage: Codable {
+    case double(Double)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Montage.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Montage"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Moralness: Codable {
+    case double(Double)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Moralness.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Moralness"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Mulishly: Codable {
+    case double(Double)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Mulishly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Mulishly"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Myoscope: Codable {
+    case bool(Bool)
+    case integer(Int)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Myoscope.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Myoscope"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Neuromastic: Codable {
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Neuromastic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Neuromastic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Noncontributing
+final class Noncontributing: Codable {
+    let estevin: String
+    let jolterhead: Double
+    let sauternes: Int
+    let sparsely: Bool
+    let unrequested: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case estevin = "estevin"
+        case jolterhead = "jolterhead"
+        case sauternes = "sauternes"
+        case sparsely = "sparsely"
+        case unrequested = "unrequested"
+    }
+
+    init(estevin: String, jolterhead: Double, sauternes: Int, sparsely: Bool, unrequested: JSONNull?) {
+        self.estevin = estevin
+        self.jolterhead = jolterhead
+        self.sauternes = sauternes
+        self.sparsely = sparsely
+        self.unrequested = unrequested
+    }
+}
+
+// MARK: Noncontributing convenience initializers and mutators
+
+extension Noncontributing {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Noncontributing.self, from: data)
+        self.init(estevin: me.estevin, jolterhead: me.jolterhead, sauternes: me.sauternes, sparsely: me.sparsely, unrequested: me.unrequested)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        estevin: String? = nil,
+        jolterhead: Double? = nil,
+        sauternes: Int? = nil,
+        sparsely: Bool? = nil,
+        unrequested: JSONNull?? = nil
+    ) -> Noncontributing {
+        return Noncontributing(
+            estevin: estevin ?? self.estevin,
+            jolterhead: jolterhead ?? self.jolterhead,
+            sauternes: sauternes ?? self.sauternes,
+            sparsely: sparsely ?? self.sparsely,
+            unrequested: unrequested ?? self.unrequested
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Nonnervous: Codable {
+    case bool(Bool)
+    case integer(Int)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Nonnervous.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Nonnervous"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Nonvaluation: Codable {
+    case bool(Bool)
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Nonvaluation.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Nonvaluation"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum OccupationalistElement: Codable {
+    case nullArray([JSONNull?])
+    case occupationalistClass(OccupationalistClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(OccupationalistClass.self) {
+            self = .occupationalistClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(OccupationalistElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for OccupationalistElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .occupationalistClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - OccupationalistClass
+final class OccupationalistClass: Codable {
+    let beholdable: JSONNull?
+    let brotuliform: JSONNull?
+    let chimakum: JSONNull?
+    let doodler: JSONNull?
+    let emulsin: JSONNull?
+    let fin: JSONNull?
+    let flourishing: JSONNull?
+    let flueless: JSONNull?
+    let furtively: JSONNull?
+    let gritter: JSONNull?
+    let interwish: JSONNull?
+    let monoxylic: JSONNull?
+    let myristic: JSONNull?
+    let nightwear: JSONNull?
+    let peruser: JSONNull?
+    let theoastrological: JSONNull?
+    let thumby: JSONNull?
+    let tingitid: JSONNull?
+    let trailless: JSONNull?
+    let unpocketed: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case beholdable = "beholdable"
+        case brotuliform = "brotuliform"
+        case chimakum = "Chimakum"
+        case doodler = "doodler"
+        case emulsin = "emulsin"
+        case fin = "Fin"
+        case flourishing = "flourishing"
+        case flueless = "flueless"
+        case furtively = "furtively"
+        case gritter = "gritter"
+        case interwish = "interwish"
+        case monoxylic = "monoxylic"
+        case myristic = "myristic"
+        case nightwear = "nightwear"
+        case peruser = "peruser"
+        case theoastrological = "theoastrological"
+        case thumby = "thumby"
+        case tingitid = "tingitid"
+        case trailless = "trailless"
+        case unpocketed = "unpocketed"
+    }
+
+    init(beholdable: JSONNull?, brotuliform: JSONNull?, chimakum: JSONNull?, doodler: JSONNull?, emulsin: JSONNull?, fin: JSONNull?, flourishing: JSONNull?, flueless: JSONNull?, furtively: JSONNull?, gritter: JSONNull?, interwish: JSONNull?, monoxylic: JSONNull?, myristic: JSONNull?, nightwear: JSONNull?, peruser: JSONNull?, theoastrological: JSONNull?, thumby: JSONNull?, tingitid: JSONNull?, trailless: JSONNull?, unpocketed: JSONNull?) {
+        self.beholdable = beholdable
+        self.brotuliform = brotuliform
+        self.chimakum = chimakum
+        self.doodler = doodler
+        self.emulsin = emulsin
+        self.fin = fin
+        self.flourishing = flourishing
+        self.flueless = flueless
+        self.furtively = furtively
+        self.gritter = gritter
+        self.interwish = interwish
+        self.monoxylic = monoxylic
+        self.myristic = myristic
+        self.nightwear = nightwear
+        self.peruser = peruser
+        self.theoastrological = theoastrological
+        self.thumby = thumby
+        self.tingitid = tingitid
+        self.trailless = trailless
+        self.unpocketed = unpocketed
+    }
+}
+
+// MARK: OccupationalistClass convenience initializers and mutators
+
+extension OccupationalistClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(OccupationalistClass.self, from: data)
+        self.init(beholdable: me.beholdable, brotuliform: me.brotuliform, chimakum: me.chimakum, doodler: me.doodler, emulsin: me.emulsin, fin: me.fin, flourishing: me.flourishing, flueless: me.flueless, furtively: me.furtively, gritter: me.gritter, interwish: me.interwish, monoxylic: me.monoxylic, myristic: me.myristic, nightwear: me.nightwear, peruser: me.peruser, theoastrological: me.theoastrological, thumby: me.thumby, tingitid: me.tingitid, trailless: me.trailless, unpocketed: me.unpocketed)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        beholdable: JSONNull?? = nil,
+        brotuliform: JSONNull?? = nil,
+        chimakum: JSONNull?? = nil,
+        doodler: JSONNull?? = nil,
+        emulsin: JSONNull?? = nil,
+        fin: JSONNull?? = nil,
+        flourishing: JSONNull?? = nil,
+        flueless: JSONNull?? = nil,
+        furtively: JSONNull?? = nil,
+        gritter: JSONNull?? = nil,
+        interwish: JSONNull?? = nil,
+        monoxylic: JSONNull?? = nil,
+        myristic: JSONNull?? = nil,
+        nightwear: JSONNull?? = nil,
+        peruser: JSONNull?? = nil,
+        theoastrological: JSONNull?? = nil,
+        thumby: JSONNull?? = nil,
+        tingitid: JSONNull?? = nil,
+        trailless: JSONNull?? = nil,
+        unpocketed: JSONNull?? = nil
+    ) -> OccupationalistClass {
+        return OccupationalistClass(
+            beholdable: beholdable ?? self.beholdable,
+            brotuliform: brotuliform ?? self.brotuliform,
+            chimakum: chimakum ?? self.chimakum,
+            doodler: doodler ?? self.doodler,
+            emulsin: emulsin ?? self.emulsin,
+            fin: fin ?? self.fin,
+            flourishing: flourishing ?? self.flourishing,
+            flueless: flueless ?? self.flueless,
+            furtively: furtively ?? self.furtively,
+            gritter: gritter ?? self.gritter,
+            interwish: interwish ?? self.interwish,
+            monoxylic: monoxylic ?? self.monoxylic,
+            myristic: myristic ?? self.myristic,
+            nightwear: nightwear ?? self.nightwear,
+            peruser: peruser ?? self.peruser,
+            theoastrological: theoastrological ?? self.theoastrological,
+            thumby: thumby ?? self.thumby,
+            tingitid: tingitid ?? self.tingitid,
+            trailless: trailless ?? self.trailless,
+            unpocketed: unpocketed ?? self.unpocketed
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum OutrivalElement: Codable {
+    case double(Double)
+    case outrivalClass(OutrivalClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(OutrivalClass.self) {
+            self = .outrivalClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(OutrivalElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for OutrivalElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .outrivalClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - OutrivalClass
+final class OutrivalClass: Codable {
+    let adroitly: JSONNull?
+    let bridehood: JSONNull?
+    let castoroides: JSONNull?
+    let czechoslovak: JSONNull?
+    let diagenesis: JSONNull?
+    let dihexahedron: JSONNull?
+    let dopester: JSONNull?
+    let eumerism: JSONNull?
+    let flyness: JSONNull?
+    let fouler: JSONNull?
+    let laudanosine: JSONNull?
+    let lingulidae: JSONNull?
+    let minutary: JSONNull?
+    let mitra: JSONNull?
+    let opisthorchiasis: JSONNull?
+    let pensively: JSONNull?
+    let pubigerous: JSONNull?
+    let rebellious: JSONNull?
+    let recodify: JSONNull?
+    let unpaced: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case adroitly = "adroitly"
+        case bridehood = "bridehood"
+        case castoroides = "Castoroides"
+        case czechoslovak = "Czechoslovak"
+        case diagenesis = "diagenesis"
+        case dihexahedron = "dihexahedron"
+        case dopester = "dopester"
+        case eumerism = "eumerism"
+        case flyness = "flyness"
+        case fouler = "fouler"
+        case laudanosine = "laudanosine"
+        case lingulidae = "Lingulidae"
+        case minutary = "minutary"
+        case mitra = "mitra"
+        case opisthorchiasis = "opisthorchiasis"
+        case pensively = "pensively"
+        case pubigerous = "pubigerous"
+        case rebellious = "rebellious"
+        case recodify = "recodify"
+        case unpaced = "unpaced"
+    }
+
+    init(adroitly: JSONNull?, bridehood: JSONNull?, castoroides: JSONNull?, czechoslovak: JSONNull?, diagenesis: JSONNull?, dihexahedron: JSONNull?, dopester: JSONNull?, eumerism: JSONNull?, flyness: JSONNull?, fouler: JSONNull?, laudanosine: JSONNull?, lingulidae: JSONNull?, minutary: JSONNull?, mitra: JSONNull?, opisthorchiasis: JSONNull?, pensively: JSONNull?, pubigerous: JSONNull?, rebellious: JSONNull?, recodify: JSONNull?, unpaced: JSONNull?) {
+        self.adroitly = adroitly
+        self.bridehood = bridehood
+        self.castoroides = castoroides
+        self.czechoslovak = czechoslovak
+        self.diagenesis = diagenesis
+        self.dihexahedron = dihexahedron
+        self.dopester = dopester
+        self.eumerism = eumerism
+        self.flyness = flyness
+        self.fouler = fouler
+        self.laudanosine = laudanosine
+        self.lingulidae = lingulidae
+        self.minutary = minutary
+        self.mitra = mitra
+        self.opisthorchiasis = opisthorchiasis
+        self.pensively = pensively
+        self.pubigerous = pubigerous
+        self.rebellious = rebellious
+        self.recodify = recodify
+        self.unpaced = unpaced
+    }
+}
+
+// MARK: OutrivalClass convenience initializers and mutators
+
+extension OutrivalClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(OutrivalClass.self, from: data)
+        self.init(adroitly: me.adroitly, bridehood: me.bridehood, castoroides: me.castoroides, czechoslovak: me.czechoslovak, diagenesis: me.diagenesis, dihexahedron: me.dihexahedron, dopester: me.dopester, eumerism: me.eumerism, flyness: me.flyness, fouler: me.fouler, laudanosine: me.laudanosine, lingulidae: me.lingulidae, minutary: me.minutary, mitra: me.mitra, opisthorchiasis: me.opisthorchiasis, pensively: me.pensively, pubigerous: me.pubigerous, rebellious: me.rebellious, recodify: me.recodify, unpaced: me.unpaced)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        adroitly: JSONNull?? = nil,
+        bridehood: JSONNull?? = nil,
+        castoroides: JSONNull?? = nil,
+        czechoslovak: JSONNull?? = nil,
+        diagenesis: JSONNull?? = nil,
+        dihexahedron: JSONNull?? = nil,
+        dopester: JSONNull?? = nil,
+        eumerism: JSONNull?? = nil,
+        flyness: JSONNull?? = nil,
+        fouler: JSONNull?? = nil,
+        laudanosine: JSONNull?? = nil,
+        lingulidae: JSONNull?? = nil,
+        minutary: JSONNull?? = nil,
+        mitra: JSONNull?? = nil,
+        opisthorchiasis: JSONNull?? = nil,
+        pensively: JSONNull?? = nil,
+        pubigerous: JSONNull?? = nil,
+        rebellious: JSONNull?? = nil,
+        recodify: JSONNull?? = nil,
+        unpaced: JSONNull?? = nil
+    ) -> OutrivalClass {
+        return OutrivalClass(
+            adroitly: adroitly ?? self.adroitly,
+            bridehood: bridehood ?? self.bridehood,
+            castoroides: castoroides ?? self.castoroides,
+            czechoslovak: czechoslovak ?? self.czechoslovak,
+            diagenesis: diagenesis ?? self.diagenesis,
+            dihexahedron: dihexahedron ?? self.dihexahedron,
+            dopester: dopester ?? self.dopester,
+            eumerism: eumerism ?? self.eumerism,
+            flyness: flyness ?? self.flyness,
+            fouler: fouler ?? self.fouler,
+            laudanosine: laudanosine ?? self.laudanosine,
+            lingulidae: lingulidae ?? self.lingulidae,
+            minutary: minutary ?? self.minutary,
+            mitra: mitra ?? self.mitra,
+            opisthorchiasis: opisthorchiasis ?? self.opisthorchiasis,
+            pensively: pensively ?? self.pensively,
+            pubigerous: pubigerous ?? self.pubigerous,
+            rebellious: rebellious ?? self.rebellious,
+            recodify: recodify ?? self.recodify,
+            unpaced: unpaced ?? self.unpaced
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Paleographically: Codable {
+    case double(Double)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Paleographically.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Paleographically"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Pamphletwise: Codable {
+    case integer(Int)
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Pamphletwise.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pamphletwise"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Pediatric: Codable {
+    case bool(Bool)
+    case double(Double)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Pediatric.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pediatric"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum PiaculumElement: Codable {
+    case double(Double)
+    case piaculumClass(PiaculumClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(PiaculumClass.self) {
+            self = .piaculumClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(PiaculumElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PiaculumElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .piaculumClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - PiaculumClass
+final class PiaculumClass: Codable {
+    let alada: Int?
+    let amphistomous: Int?
+    let boysenberry: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let decardinalize: Int?
+    let discouragement: Int?
+    let disdiapason: String?
+    let doitrified: Int?
+    let hexaspermous: Int?
+    let homocerc: Bool?
+    let insinking: Int?
+    let loathfulness: Int?
+    let miasmatical: Int?
+    let neurofibril: Int?
+    let nonbookish: JSONNull?
+    let phonendoscope: Int?
+    let pilferment: Int?
+    let predismissory: Int?
+    let preinscription: Int?
+    let quotative: Int?
+    let sienna: Int?
+    let thorax: Int?
+    let yachting: Int?
+    let zipper: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case alada = "alada"
+        case amphistomous = "amphistomous"
+        case boysenberry = "boysenberry"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case decardinalize = "decardinalize"
+        case discouragement = "discouragement"
+        case disdiapason = "disdiapason"
+        case doitrified = "doitrified"
+        case hexaspermous = "hexaspermous"
+        case homocerc = "homocerc"
+        case insinking = "insinking"
+        case loathfulness = "loathfulness"
+        case miasmatical = "miasmatical"
+        case neurofibril = "neurofibril"
+        case nonbookish = "nonbookish"
+        case phonendoscope = "phonendoscope"
+        case pilferment = "pilferment"
+        case predismissory = "predismissory"
+        case preinscription = "preinscription"
+        case quotative = "quotative"
+        case sienna = "sienna"
+        case thorax = "thorax"
+        case yachting = "yachting"
+        case zipper = "Zipper"
+    }
+
+    init(alada: Int?, amphistomous: Int?, boysenberry: Int?, catharticalness: Double?, chirotherium: Int?, decardinalize: Int?, discouragement: Int?, disdiapason: String?, doitrified: Int?, hexaspermous: Int?, homocerc: Bool?, insinking: Int?, loathfulness: Int?, miasmatical: Int?, neurofibril: Int?, nonbookish: JSONNull?, phonendoscope: Int?, pilferment: Int?, predismissory: Int?, preinscription: Int?, quotative: Int?, sienna: Int?, thorax: Int?, yachting: Int?, zipper: Int?) {
+        self.alada = alada
+        self.amphistomous = amphistomous
+        self.boysenberry = boysenberry
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.decardinalize = decardinalize
+        self.discouragement = discouragement
+        self.disdiapason = disdiapason
+        self.doitrified = doitrified
+        self.hexaspermous = hexaspermous
+        self.homocerc = homocerc
+        self.insinking = insinking
+        self.loathfulness = loathfulness
+        self.miasmatical = miasmatical
+        self.neurofibril = neurofibril
+        self.nonbookish = nonbookish
+        self.phonendoscope = phonendoscope
+        self.pilferment = pilferment
+        self.predismissory = predismissory
+        self.preinscription = preinscription
+        self.quotative = quotative
+        self.sienna = sienna
+        self.thorax = thorax
+        self.yachting = yachting
+        self.zipper = zipper
+    }
+}
+
+// MARK: PiaculumClass convenience initializers and mutators
+
+extension PiaculumClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(PiaculumClass.self, from: data)
+        self.init(alada: me.alada, amphistomous: me.amphistomous, boysenberry: me.boysenberry, catharticalness: me.catharticalness, chirotherium: me.chirotherium, decardinalize: me.decardinalize, discouragement: me.discouragement, disdiapason: me.disdiapason, doitrified: me.doitrified, hexaspermous: me.hexaspermous, homocerc: me.homocerc, insinking: me.insinking, loathfulness: me.loathfulness, miasmatical: me.miasmatical, neurofibril: me.neurofibril, nonbookish: me.nonbookish, phonendoscope: me.phonendoscope, pilferment: me.pilferment, predismissory: me.predismissory, preinscription: me.preinscription, quotative: me.quotative, sienna: me.sienna, thorax: me.thorax, yachting: me.yachting, zipper: me.zipper)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        alada: Int?? = nil,
+        amphistomous: Int?? = nil,
+        boysenberry: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        decardinalize: Int?? = nil,
+        discouragement: Int?? = nil,
+        disdiapason: String?? = nil,
+        doitrified: Int?? = nil,
+        hexaspermous: Int?? = nil,
+        homocerc: Bool?? = nil,
+        insinking: Int?? = nil,
+        loathfulness: Int?? = nil,
+        miasmatical: Int?? = nil,
+        neurofibril: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        phonendoscope: Int?? = nil,
+        pilferment: Int?? = nil,
+        predismissory: Int?? = nil,
+        preinscription: Int?? = nil,
+        quotative: Int?? = nil,
+        sienna: Int?? = nil,
+        thorax: Int?? = nil,
+        yachting: Int?? = nil,
+        zipper: Int?? = nil
+    ) -> PiaculumClass {
+        return PiaculumClass(
+            alada: alada ?? self.alada,
+            amphistomous: amphistomous ?? self.amphistomous,
+            boysenberry: boysenberry ?? self.boysenberry,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            decardinalize: decardinalize ?? self.decardinalize,
+            discouragement: discouragement ?? self.discouragement,
+            disdiapason: disdiapason ?? self.disdiapason,
+            doitrified: doitrified ?? self.doitrified,
+            hexaspermous: hexaspermous ?? self.hexaspermous,
+            homocerc: homocerc ?? self.homocerc,
+            insinking: insinking ?? self.insinking,
+            loathfulness: loathfulness ?? self.loathfulness,
+            miasmatical: miasmatical ?? self.miasmatical,
+            neurofibril: neurofibril ?? self.neurofibril,
+            nonbookish: nonbookish ?? self.nonbookish,
+            phonendoscope: phonendoscope ?? self.phonendoscope,
+            pilferment: pilferment ?? self.pilferment,
+            predismissory: predismissory ?? self.predismissory,
+            preinscription: preinscription ?? self.preinscription,
+            quotative: quotative ?? self.quotative,
+            sienna: sienna ?? self.sienna,
+            thorax: thorax ?? self.thorax,
+            yachting: yachting ?? self.yachting,
+            zipper: zipper ?? self.zipper
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Piccadilly: Codable {
+    case double(Double)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Piccadilly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Piccadilly"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Piffler: Codable {
+    case monaziteClass(MonaziteClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Piffler.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Piffler"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .monaziteClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Pithful: Codable {
+    case bool(Bool)
+    case integer(Int)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Pithful.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pithful"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Placuntiti: Codable {
+    case integer(Int)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Placuntiti.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Placuntiti"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Plectopterous: Codable {
+    case double(Double)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Plectopterous.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Plectopterous"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Pneumocele
+final class Pneumocele: Codable {
+    let carbonarism: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let cineolic: JSONNull?
+    let cobbly: JSONNull?
+    let conchyliferous: JSONNull?
+    let congregation: JSONNull?
+    let disdiapason: String?
+    let enterotomy: JSONNull?
+    let entophytal: JSONNull?
+    let fewtrils: JSONNull?
+    let herem: JSONNull?
+    let homocerc: Bool?
+    let koniga: JSONNull?
+    let meticulosity: JSONNull?
+    let micky: JSONNull?
+    let mismarriage: JSONNull?
+    let neurotrophic: JSONNull?
+    let nonbookish: JSONNull?
+    let persuasively: JSONNull?
+    let replaceable: JSONNull?
+    let silex: JSONNull?
+    let taillight: JSONNull?
+    let unjealous: JSONNull?
+    let visitorial: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case carbonarism = "Carbonarism"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case cineolic = "cineolic"
+        case cobbly = "cobbly"
+        case conchyliferous = "conchyliferous"
+        case congregation = "congregation"
+        case disdiapason = "disdiapason"
+        case enterotomy = "enterotomy"
+        case entophytal = "entophytal"
+        case fewtrils = "fewtrils"
+        case herem = "herem"
+        case homocerc = "homocerc"
+        case koniga = "Koniga"
+        case meticulosity = "meticulosity"
+        case micky = "Micky"
+        case mismarriage = "mismarriage"
+        case neurotrophic = "neurotrophic"
+        case nonbookish = "nonbookish"
+        case persuasively = "persuasively"
+        case replaceable = "replaceable"
+        case silex = "silex"
+        case taillight = "taillight"
+        case unjealous = "unjealous"
+        case visitorial = "visitorial"
+    }
+
+    init(carbonarism: JSONNull?, catharticalness: Double?, chirotherium: Int?, cineolic: JSONNull?, cobbly: JSONNull?, conchyliferous: JSONNull?, congregation: JSONNull?, disdiapason: String?, enterotomy: JSONNull?, entophytal: JSONNull?, fewtrils: JSONNull?, herem: JSONNull?, homocerc: Bool?, koniga: JSONNull?, meticulosity: JSONNull?, micky: JSONNull?, mismarriage: JSONNull?, neurotrophic: JSONNull?, nonbookish: JSONNull?, persuasively: JSONNull?, replaceable: JSONNull?, silex: JSONNull?, taillight: JSONNull?, unjealous: JSONNull?, visitorial: JSONNull?) {
+        self.carbonarism = carbonarism
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.cineolic = cineolic
+        self.cobbly = cobbly
+        self.conchyliferous = conchyliferous
+        self.congregation = congregation
+        self.disdiapason = disdiapason
+        self.enterotomy = enterotomy
+        self.entophytal = entophytal
+        self.fewtrils = fewtrils
+        self.herem = herem
+        self.homocerc = homocerc
+        self.koniga = koniga
+        self.meticulosity = meticulosity
+        self.micky = micky
+        self.mismarriage = mismarriage
+        self.neurotrophic = neurotrophic
+        self.nonbookish = nonbookish
+        self.persuasively = persuasively
+        self.replaceable = replaceable
+        self.silex = silex
+        self.taillight = taillight
+        self.unjealous = unjealous
+        self.visitorial = visitorial
+    }
+}
+
+// MARK: Pneumocele convenience initializers and mutators
+
+extension Pneumocele {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Pneumocele.self, from: data)
+        self.init(carbonarism: me.carbonarism, catharticalness: me.catharticalness, chirotherium: me.chirotherium, cineolic: me.cineolic, cobbly: me.cobbly, conchyliferous: me.conchyliferous, congregation: me.congregation, disdiapason: me.disdiapason, enterotomy: me.enterotomy, entophytal: me.entophytal, fewtrils: me.fewtrils, herem: me.herem, homocerc: me.homocerc, koniga: me.koniga, meticulosity: me.meticulosity, micky: me.micky, mismarriage: me.mismarriage, neurotrophic: me.neurotrophic, nonbookish: me.nonbookish, persuasively: me.persuasively, replaceable: me.replaceable, silex: me.silex, taillight: me.taillight, unjealous: me.unjealous, visitorial: me.visitorial)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        carbonarism: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        cineolic: JSONNull?? = nil,
+        cobbly: JSONNull?? = nil,
+        conchyliferous: JSONNull?? = nil,
+        congregation: JSONNull?? = nil,
+        disdiapason: String?? = nil,
+        enterotomy: JSONNull?? = nil,
+        entophytal: JSONNull?? = nil,
+        fewtrils: JSONNull?? = nil,
+        herem: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        koniga: JSONNull?? = nil,
+        meticulosity: JSONNull?? = nil,
+        micky: JSONNull?? = nil,
+        mismarriage: JSONNull?? = nil,
+        neurotrophic: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        persuasively: JSONNull?? = nil,
+        replaceable: JSONNull?? = nil,
+        silex: JSONNull?? = nil,
+        taillight: JSONNull?? = nil,
+        unjealous: JSONNull?? = nil,
+        visitorial: JSONNull?? = nil
+    ) -> Pneumocele {
+        return Pneumocele(
+            carbonarism: carbonarism ?? self.carbonarism,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            cineolic: cineolic ?? self.cineolic,
+            cobbly: cobbly ?? self.cobbly,
+            conchyliferous: conchyliferous ?? self.conchyliferous,
+            congregation: congregation ?? self.congregation,
+            disdiapason: disdiapason ?? self.disdiapason,
+            enterotomy: enterotomy ?? self.enterotomy,
+            entophytal: entophytal ?? self.entophytal,
+            fewtrils: fewtrils ?? self.fewtrils,
+            herem: herem ?? self.herem,
+            homocerc: homocerc ?? self.homocerc,
+            koniga: koniga ?? self.koniga,
+            meticulosity: meticulosity ?? self.meticulosity,
+            micky: micky ?? self.micky,
+            mismarriage: mismarriage ?? self.mismarriage,
+            neurotrophic: neurotrophic ?? self.neurotrophic,
+            nonbookish: nonbookish ?? self.nonbookish,
+            persuasively: persuasively ?? self.persuasively,
+            replaceable: replaceable ?? self.replaceable,
+            silex: silex ?? self.silex,
+            taillight: taillight ?? self.taillight,
+            unjealous: unjealous ?? self.unjealous,
+            visitorial: visitorial ?? self.visitorial
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Poliorcetic: Codable {
+    case bool(Bool)
+    case monaziteClass(MonaziteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Poliorcetic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Poliorcetic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Poormaster: Codable {
+    case integerArray([Int])
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Poormaster.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Poormaster"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum PotwhiskyElement: Codable {
+    case integer(Int)
+    case potwhiskyClass(PotwhiskyClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(PotwhiskyClass.self) {
+            self = .potwhiskyClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(PotwhiskyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PotwhiskyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .potwhiskyClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - PotwhiskyClass
+final class PotwhiskyClass: Codable {
+    let arciform: JSONNull?
+    let cresolin: JSONNull?
+    let disheartener: JSONNull?
+    let disproportionable: JSONNull?
+    let euchorda: JSONNull?
+    let ferryway: JSONNull?
+    let filamentiferous: JSONNull?
+    let flemish: JSONNull?
+    let forgainst: JSONNull?
+    let grainering: JSONNull?
+    let irrevoluble: JSONNull?
+    let kindredship: JSONNull?
+    let pinguitudinous: JSONNull?
+    let simpletonic: JSONNull?
+    let singsong: JSONNull?
+    let submergement: JSONNull?
+    let supraoesophagal: JSONNull?
+    let thrashel: JSONNull?
+    let tyremesis: JSONNull?
+    let yoruba: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case arciform = "arciform"
+        case cresolin = "cresolin"
+        case disheartener = "disheartener"
+        case disproportionable = "disproportionable"
+        case euchorda = "Euchorda"
+        case ferryway = "ferryway"
+        case filamentiferous = "filamentiferous"
+        case flemish = "flemish"
+        case forgainst = "forgainst"
+        case grainering = "grainering"
+        case irrevoluble = "irrevoluble"
+        case kindredship = "kindredship"
+        case pinguitudinous = "pinguitudinous"
+        case simpletonic = "simpletonic"
+        case singsong = "singsong"
+        case submergement = "submergement"
+        case supraoesophagal = "supraoesophagal"
+        case thrashel = "thrashel"
+        case tyremesis = "tyremesis"
+        case yoruba = "Yoruba"
+    }
+
+    init(arciform: JSONNull?, cresolin: JSONNull?, disheartener: JSONNull?, disproportionable: JSONNull?, euchorda: JSONNull?, ferryway: JSONNull?, filamentiferous: JSONNull?, flemish: JSONNull?, forgainst: JSONNull?, grainering: JSONNull?, irrevoluble: JSONNull?, kindredship: JSONNull?, pinguitudinous: JSONNull?, simpletonic: JSONNull?, singsong: JSONNull?, submergement: JSONNull?, supraoesophagal: JSONNull?, thrashel: JSONNull?, tyremesis: JSONNull?, yoruba: JSONNull?) {
+        self.arciform = arciform
+        self.cresolin = cresolin
+        self.disheartener = disheartener
+        self.disproportionable = disproportionable
+        self.euchorda = euchorda
+        self.ferryway = ferryway
+        self.filamentiferous = filamentiferous
+        self.flemish = flemish
+        self.forgainst = forgainst
+        self.grainering = grainering
+        self.irrevoluble = irrevoluble
+        self.kindredship = kindredship
+        self.pinguitudinous = pinguitudinous
+        self.simpletonic = simpletonic
+        self.singsong = singsong
+        self.submergement = submergement
+        self.supraoesophagal = supraoesophagal
+        self.thrashel = thrashel
+        self.tyremesis = tyremesis
+        self.yoruba = yoruba
+    }
+}
+
+// MARK: PotwhiskyClass convenience initializers and mutators
+
+extension PotwhiskyClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(PotwhiskyClass.self, from: data)
+        self.init(arciform: me.arciform, cresolin: me.cresolin, disheartener: me.disheartener, disproportionable: me.disproportionable, euchorda: me.euchorda, ferryway: me.ferryway, filamentiferous: me.filamentiferous, flemish: me.flemish, forgainst: me.forgainst, grainering: me.grainering, irrevoluble: me.irrevoluble, kindredship: me.kindredship, pinguitudinous: me.pinguitudinous, simpletonic: me.simpletonic, singsong: me.singsong, submergement: me.submergement, supraoesophagal: me.supraoesophagal, thrashel: me.thrashel, tyremesis: me.tyremesis, yoruba: me.yoruba)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        arciform: JSONNull?? = nil,
+        cresolin: JSONNull?? = nil,
+        disheartener: JSONNull?? = nil,
+        disproportionable: JSONNull?? = nil,
+        euchorda: JSONNull?? = nil,
+        ferryway: JSONNull?? = nil,
+        filamentiferous: JSONNull?? = nil,
+        flemish: JSONNull?? = nil,
+        forgainst: JSONNull?? = nil,
+        grainering: JSONNull?? = nil,
+        irrevoluble: JSONNull?? = nil,
+        kindredship: JSONNull?? = nil,
+        pinguitudinous: JSONNull?? = nil,
+        simpletonic: JSONNull?? = nil,
+        singsong: JSONNull?? = nil,
+        submergement: JSONNull?? = nil,
+        supraoesophagal: JSONNull?? = nil,
+        thrashel: JSONNull?? = nil,
+        tyremesis: JSONNull?? = nil,
+        yoruba: JSONNull?? = nil
+    ) -> PotwhiskyClass {
+        return PotwhiskyClass(
+            arciform: arciform ?? self.arciform,
+            cresolin: cresolin ?? self.cresolin,
+            disheartener: disheartener ?? self.disheartener,
+            disproportionable: disproportionable ?? self.disproportionable,
+            euchorda: euchorda ?? self.euchorda,
+            ferryway: ferryway ?? self.ferryway,
+            filamentiferous: filamentiferous ?? self.filamentiferous,
+            flemish: flemish ?? self.flemish,
+            forgainst: forgainst ?? self.forgainst,
+            grainering: grainering ?? self.grainering,
+            irrevoluble: irrevoluble ?? self.irrevoluble,
+            kindredship: kindredship ?? self.kindredship,
+            pinguitudinous: pinguitudinous ?? self.pinguitudinous,
+            simpletonic: simpletonic ?? self.simpletonic,
+            singsong: singsong ?? self.singsong,
+            submergement: submergement ?? self.submergement,
+            supraoesophagal: supraoesophagal ?? self.supraoesophagal,
+            thrashel: thrashel ?? self.thrashel,
+            tyremesis: tyremesis ?? self.tyremesis,
+            yoruba: yoruba ?? self.yoruba
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Practicalizer: Codable {
+    case monaziteClass(MonaziteClass)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Practicalizer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Practicalizer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .monaziteClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum PrefreshmanElement: Codable {
+    case nullArray([JSONNull?])
+    case prefreshmanClass(PrefreshmanClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(PrefreshmanClass.self) {
+            self = .prefreshmanClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(PrefreshmanElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PrefreshmanElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .prefreshmanClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - PrefreshmanClass
+final class PrefreshmanClass: Codable {
+    let azorubine: JSONNull?
+    let choroiditis: JSONNull?
+    let coagulatory: JSONNull?
+    let cyclorama: JSONNull?
+    let dolphus: JSONNull?
+    let duckhearted: JSONNull?
+    let ficus: JSONNull?
+    let gemaric: JSONNull?
+    let jugation: JSONNull?
+    let myoliposis: JSONNull?
+    let nonnomination: JSONNull?
+    let palay: JSONNull?
+    let pentactinal: JSONNull?
+    let phaet: JSONNull?
+    let piquant: JSONNull?
+    let registration: JSONNull?
+    let remancipation: JSONNull?
+    let scutatiform: JSONNull?
+    let theodolite: JSONNull?
+    let underward: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case azorubine = "azorubine"
+        case choroiditis = "choroiditis"
+        case coagulatory = "coagulatory"
+        case cyclorama = "cyclorama"
+        case dolphus = "Dolphus"
+        case duckhearted = "duckhearted"
+        case ficus = "Ficus"
+        case gemaric = "Gemaric"
+        case jugation = "jugation"
+        case myoliposis = "myoliposis"
+        case nonnomination = "nonnomination"
+        case palay = "palay"
+        case pentactinal = "pentactinal"
+        case phaet = "Phaet"
+        case piquant = "piquant"
+        case registration = "registration"
+        case remancipation = "remancipation"
+        case scutatiform = "scutatiform"
+        case theodolite = "theodolite"
+        case underward = "underward"
+    }
+
+    init(azorubine: JSONNull?, choroiditis: JSONNull?, coagulatory: JSONNull?, cyclorama: JSONNull?, dolphus: JSONNull?, duckhearted: JSONNull?, ficus: JSONNull?, gemaric: JSONNull?, jugation: JSONNull?, myoliposis: JSONNull?, nonnomination: JSONNull?, palay: JSONNull?, pentactinal: JSONNull?, phaet: JSONNull?, piquant: JSONNull?, registration: JSONNull?, remancipation: JSONNull?, scutatiform: JSONNull?, theodolite: JSONNull?, underward: JSONNull?) {
+        self.azorubine = azorubine
+        self.choroiditis = choroiditis
+        self.coagulatory = coagulatory
+        self.cyclorama = cyclorama
+        self.dolphus = dolphus
+        self.duckhearted = duckhearted
+        self.ficus = ficus
+        self.gemaric = gemaric
+        self.jugation = jugation
+        self.myoliposis = myoliposis
+        self.nonnomination = nonnomination
+        self.palay = palay
+        self.pentactinal = pentactinal
+        self.phaet = phaet
+        self.piquant = piquant
+        self.registration = registration
+        self.remancipation = remancipation
+        self.scutatiform = scutatiform
+        self.theodolite = theodolite
+        self.underward = underward
+    }
+}
+
+// MARK: PrefreshmanClass convenience initializers and mutators
+
+extension PrefreshmanClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(PrefreshmanClass.self, from: data)
+        self.init(azorubine: me.azorubine, choroiditis: me.choroiditis, coagulatory: me.coagulatory, cyclorama: me.cyclorama, dolphus: me.dolphus, duckhearted: me.duckhearted, ficus: me.ficus, gemaric: me.gemaric, jugation: me.jugation, myoliposis: me.myoliposis, nonnomination: me.nonnomination, palay: me.palay, pentactinal: me.pentactinal, phaet: me.phaet, piquant: me.piquant, registration: me.registration, remancipation: me.remancipation, scutatiform: me.scutatiform, theodolite: me.theodolite, underward: me.underward)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        azorubine: JSONNull?? = nil,
+        choroiditis: JSONNull?? = nil,
+        coagulatory: JSONNull?? = nil,
+        cyclorama: JSONNull?? = nil,
+        dolphus: JSONNull?? = nil,
+        duckhearted: JSONNull?? = nil,
+        ficus: JSONNull?? = nil,
+        gemaric: JSONNull?? = nil,
+        jugation: JSONNull?? = nil,
+        myoliposis: JSONNull?? = nil,
+        nonnomination: JSONNull?? = nil,
+        palay: JSONNull?? = nil,
+        pentactinal: JSONNull?? = nil,
+        phaet: JSONNull?? = nil,
+        piquant: JSONNull?? = nil,
+        registration: JSONNull?? = nil,
+        remancipation: JSONNull?? = nil,
+        scutatiform: JSONNull?? = nil,
+        theodolite: JSONNull?? = nil,
+        underward: JSONNull?? = nil
+    ) -> PrefreshmanClass {
+        return PrefreshmanClass(
+            azorubine: azorubine ?? self.azorubine,
+            choroiditis: choroiditis ?? self.choroiditis,
+            coagulatory: coagulatory ?? self.coagulatory,
+            cyclorama: cyclorama ?? self.cyclorama,
+            dolphus: dolphus ?? self.dolphus,
+            duckhearted: duckhearted ?? self.duckhearted,
+            ficus: ficus ?? self.ficus,
+            gemaric: gemaric ?? self.gemaric,
+            jugation: jugation ?? self.jugation,
+            myoliposis: myoliposis ?? self.myoliposis,
+            nonnomination: nonnomination ?? self.nonnomination,
+            palay: palay ?? self.palay,
+            pentactinal: pentactinal ?? self.pentactinal,
+            phaet: phaet ?? self.phaet,
+            piquant: piquant ?? self.piquant,
+            registration: registration ?? self.registration,
+            remancipation: remancipation ?? self.remancipation,
+            scutatiform: scutatiform ?? self.scutatiform,
+            theodolite: theodolite ?? self.theodolite,
+            underward: underward ?? self.underward
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Prehensility: Codable {
+    case bool(Bool)
+    case monaziteClass(MonaziteClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Prehensility.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Prehensility"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Prevoidance: Codable {
+    case integer(Int)
+    case integerArray([Int])
+    case monaziteClass(MonaziteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Prevoidance.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Prevoidance"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Protext: Codable {
+    case bool(Bool)
+    case integerArray([Int])
+    case monaziteClass(MonaziteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Protext.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Protext"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+final class JSONNull: Codable, Hashable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    public func hash(into hasher: inout Hasher) {
+        hasher.combine(0)
+    }
+
+    public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/head/swift/test/inputs/json/priority/combinations3.json/protocol-hashable--739b516c7897/quicktype.swift b/head/swift/test/inputs/json/priority/combinations3.json/protocol-hashable--739b516c7897/quicktype.swift
new file mode 100644
index 0000000..0d99745
--- /dev/null
+++ b/head/swift/test/inputs/json/priority/combinations3.json/protocol-hashable--739b516c7897/quicktype.swift
@@ -0,0 +1,3227 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+import Foundation
+
+// MARK: - TopLevel
+struct TopLevel: Codable, Hashable {
+    let juror: [JurorElement]
+    let kongoni: [Kongoni]
+    let ladronism: [LadronismElement]
+    let landlubberly: [LandlubberlyElement]
+    let listener: [Listener]
+    let lupus: [LupusElement]
+    let maslin: [Maslin]
+    let monazite: [MonaziteElement]
+    let monoliteral: [Monoliteral]
+    let monotheistically: [MonotheisticallyElement]
+    let montage: [Montage]
+    let moralness: [Moralness]
+    let mowra: [MonaziteClass?]
+    let mulishly: [Mulishly]
+    let myoscope: [Myoscope]
+    let nach: [[Int?]?]
+    let neuromastic: [Neuromastic]
+    let noncontributing: [Noncontributing]
+    let nonnervous: [Nonnervous]
+    let nonvaluation: [Nonvaluation]
+    let occupationalist: [OccupationalistElement]
+    let outrival: [OutrivalElement]
+    let paleographically: [Paleographically]
+    let pamphletwise: [Pamphletwise]
+    let pediatrics: [Pediatric]
+    let perceptive: [Bool]
+    let piaculum: [PiaculumElement]
+    let piccadilly: [Piccadilly]
+    let piffler: [Piffler]
+    let pithful: [Pithful]
+    let placuntitis: [Placuntiti]
+    let plectopterous: [Plectopterous]
+    let pneumocele: [Pneumocele?]
+    let poliorcetic: [Poliorcetic]
+    let poormaster: [Poormaster]
+    let potwhisky: [PotwhiskyElement]
+    let practicalizer: [Practicalizer]
+    let prefreshman: [PrefreshmanElement]
+    let prehensility: [Prehensility]
+    let prevoidance: [Prevoidance]
+    let probant: [[String: Int?]]
+    let protext: [Protext]
+
+    enum CodingKeys: String, CodingKey {
+        case juror = "juror"
+        case kongoni = "kongoni"
+        case ladronism = "ladronism"
+        case landlubberly = "landlubberly"
+        case listener = "listener"
+        case lupus = "lupus"
+        case maslin = "maslin"
+        case monazite = "monazite"
+        case monoliteral = "monoliteral"
+        case monotheistically = "monotheistically"
+        case montage = "montage"
+        case moralness = "moralness"
+        case mowra = "mowra"
+        case mulishly = "mulishly"
+        case myoscope = "myoscope"
+        case nach = "nach"
+        case neuromastic = "neuromastic"
+        case noncontributing = "noncontributing"
+        case nonnervous = "nonnervous"
+        case nonvaluation = "nonvaluation"
+        case occupationalist = "occupationalist"
+        case outrival = "outrival"
+        case paleographically = "paleographically"
+        case pamphletwise = "pamphletwise"
+        case pediatrics = "pediatrics"
+        case perceptive = "perceptive"
+        case piaculum = "piaculum"
+        case piccadilly = "piccadilly"
+        case piffler = "piffler"
+        case pithful = "pithful"
+        case placuntitis = "placuntitis"
+        case plectopterous = "plectopterous"
+        case pneumocele = "pneumocele"
+        case poliorcetic = "poliorcetic"
+        case poormaster = "poormaster"
+        case potwhisky = "potwhisky"
+        case practicalizer = "practicalizer"
+        case prefreshman = "prefreshman"
+        case prehensility = "prehensility"
+        case prevoidance = "prevoidance"
+        case probant = "probant"
+        case protext = "protext"
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(TopLevel.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        juror: [JurorElement]? = nil,
+        kongoni: [Kongoni]? = nil,
+        ladronism: [LadronismElement]? = nil,
+        landlubberly: [LandlubberlyElement]? = nil,
+        listener: [Listener]? = nil,
+        lupus: [LupusElement]? = nil,
+        maslin: [Maslin]? = nil,
+        monazite: [MonaziteElement]? = nil,
+        monoliteral: [Monoliteral]? = nil,
+        monotheistically: [MonotheisticallyElement]? = nil,
+        montage: [Montage]? = nil,
+        moralness: [Moralness]? = nil,
+        mowra: [MonaziteClass?]? = nil,
+        mulishly: [Mulishly]? = nil,
+        myoscope: [Myoscope]? = nil,
+        nach: [[Int?]?]? = nil,
+        neuromastic: [Neuromastic]? = nil,
+        noncontributing: [Noncontributing]? = nil,
+        nonnervous: [Nonnervous]? = nil,
+        nonvaluation: [Nonvaluation]? = nil,
+        occupationalist: [OccupationalistElement]? = nil,
+        outrival: [OutrivalElement]? = nil,
+        paleographically: [Paleographically]? = nil,
+        pamphletwise: [Pamphletwise]? = nil,
+        pediatrics: [Pediatric]? = nil,
+        perceptive: [Bool]? = nil,
+        piaculum: [PiaculumElement]? = nil,
+        piccadilly: [Piccadilly]? = nil,
+        piffler: [Piffler]? = nil,
+        pithful: [Pithful]? = nil,
+        placuntitis: [Placuntiti]? = nil,
+        plectopterous: [Plectopterous]? = nil,
+        pneumocele: [Pneumocele?]? = nil,
+        poliorcetic: [Poliorcetic]? = nil,
+        poormaster: [Poormaster]? = nil,
+        potwhisky: [PotwhiskyElement]? = nil,
+        practicalizer: [Practicalizer]? = nil,
+        prefreshman: [PrefreshmanElement]? = nil,
+        prehensility: [Prehensility]? = nil,
+        prevoidance: [Prevoidance]? = nil,
+        probant: [[String: Int?]]? = nil,
+        protext: [Protext]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            juror: juror ?? self.juror,
+            kongoni: kongoni ?? self.kongoni,
+            ladronism: ladronism ?? self.ladronism,
+            landlubberly: landlubberly ?? self.landlubberly,
+            listener: listener ?? self.listener,
+            lupus: lupus ?? self.lupus,
+            maslin: maslin ?? self.maslin,
+            monazite: monazite ?? self.monazite,
+            monoliteral: monoliteral ?? self.monoliteral,
+            monotheistically: monotheistically ?? self.monotheistically,
+            montage: montage ?? self.montage,
+            moralness: moralness ?? self.moralness,
+            mowra: mowra ?? self.mowra,
+            mulishly: mulishly ?? self.mulishly,
+            myoscope: myoscope ?? self.myoscope,
+            nach: nach ?? self.nach,
+            neuromastic: neuromastic ?? self.neuromastic,
+            noncontributing: noncontributing ?? self.noncontributing,
+            nonnervous: nonnervous ?? self.nonnervous,
+            nonvaluation: nonvaluation ?? self.nonvaluation,
+            occupationalist: occupationalist ?? self.occupationalist,
+            outrival: outrival ?? self.outrival,
+            paleographically: paleographically ?? self.paleographically,
+            pamphletwise: pamphletwise ?? self.pamphletwise,
+            pediatrics: pediatrics ?? self.pediatrics,
+            perceptive: perceptive ?? self.perceptive,
+            piaculum: piaculum ?? self.piaculum,
+            piccadilly: piccadilly ?? self.piccadilly,
+            piffler: piffler ?? self.piffler,
+            pithful: pithful ?? self.pithful,
+            placuntitis: placuntitis ?? self.placuntitis,
+            plectopterous: plectopterous ?? self.plectopterous,
+            pneumocele: pneumocele ?? self.pneumocele,
+            poliorcetic: poliorcetic ?? self.poliorcetic,
+            poormaster: poormaster ?? self.poormaster,
+            potwhisky: potwhisky ?? self.potwhisky,
+            practicalizer: practicalizer ?? self.practicalizer,
+            prefreshman: prefreshman ?? self.prefreshman,
+            prehensility: prehensility ?? self.prehensility,
+            prevoidance: prevoidance ?? self.prevoidance,
+            probant: probant ?? self.probant,
+            protext: protext ?? self.protext
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum JurorElement: Codable, Hashable {
+    case bool(Bool)
+    case jurorClass(JurorClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(JurorClass.self) {
+            self = .jurorClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(JurorElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JurorElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .jurorClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - JurorClass
+struct JurorClass: Codable, Hashable {
+    let adipsy: JSONNull?
+    let auxiliator: JSONNull?
+    let benda: JSONNull?
+    let benjamin: JSONNull?
+    let brandling: JSONNull?
+    let epicurishly: JSONNull?
+    let eremochaetous: JSONNull?
+    let marten: JSONNull?
+    let monocline: JSONNull?
+    let olea: JSONNull?
+    let palgat: JSONNull?
+    let pennyworth: JSONNull?
+    let pioury: JSONNull?
+    let pragmatistic: JSONNull?
+    let stylelessness: JSONNull?
+    let systematical: JSONNull?
+    let thready: JSONNull?
+    let uncontemporary: JSONNull?
+    let uncouched: JSONNull?
+    let uninhabitedness: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case adipsy = "adipsy"
+        case auxiliator = "auxiliator"
+        case benda = "benda"
+        case benjamin = "benjamin"
+        case brandling = "brandling"
+        case epicurishly = "epicurishly"
+        case eremochaetous = "eremochaetous"
+        case marten = "marten"
+        case monocline = "monocline"
+        case olea = "Olea"
+        case palgat = "palgat"
+        case pennyworth = "pennyworth"
+        case pioury = "pioury"
+        case pragmatistic = "pragmatistic"
+        case stylelessness = "stylelessness"
+        case systematical = "systematical"
+        case thready = "thready"
+        case uncontemporary = "uncontemporary"
+        case uncouched = "uncouched"
+        case uninhabitedness = "uninhabitedness"
+    }
+}
+
+// MARK: JurorClass convenience initializers and mutators
+
+extension JurorClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(JurorClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        adipsy: JSONNull?? = nil,
+        auxiliator: JSONNull?? = nil,
+        benda: JSONNull?? = nil,
+        benjamin: JSONNull?? = nil,
+        brandling: JSONNull?? = nil,
+        epicurishly: JSONNull?? = nil,
+        eremochaetous: JSONNull?? = nil,
+        marten: JSONNull?? = nil,
+        monocline: JSONNull?? = nil,
+        olea: JSONNull?? = nil,
+        palgat: JSONNull?? = nil,
+        pennyworth: JSONNull?? = nil,
+        pioury: JSONNull?? = nil,
+        pragmatistic: JSONNull?? = nil,
+        stylelessness: JSONNull?? = nil,
+        systematical: JSONNull?? = nil,
+        thready: JSONNull?? = nil,
+        uncontemporary: JSONNull?? = nil,
+        uncouched: JSONNull?? = nil,
+        uninhabitedness: JSONNull?? = nil
+    ) -> JurorClass {
+        return JurorClass(
+            adipsy: adipsy ?? self.adipsy,
+            auxiliator: auxiliator ?? self.auxiliator,
+            benda: benda ?? self.benda,
+            benjamin: benjamin ?? self.benjamin,
+            brandling: brandling ?? self.brandling,
+            epicurishly: epicurishly ?? self.epicurishly,
+            eremochaetous: eremochaetous ?? self.eremochaetous,
+            marten: marten ?? self.marten,
+            monocline: monocline ?? self.monocline,
+            olea: olea ?? self.olea,
+            palgat: palgat ?? self.palgat,
+            pennyworth: pennyworth ?? self.pennyworth,
+            pioury: pioury ?? self.pioury,
+            pragmatistic: pragmatistic ?? self.pragmatistic,
+            stylelessness: stylelessness ?? self.stylelessness,
+            systematical: systematical ?? self.systematical,
+            thready: thready ?? self.thready,
+            uncontemporary: uncontemporary ?? self.uncontemporary,
+            uncouched: uncouched ?? self.uncouched,
+            uninhabitedness: uninhabitedness ?? self.uninhabitedness
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Kongoni: Codable, Hashable {
+    case integerArray([Int])
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Kongoni.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Kongoni"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum LadronismElement: Codable, Hashable {
+    case double(Double)
+    case ladronismClass(LadronismClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(LadronismClass.self) {
+            self = .ladronismClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(LadronismElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LadronismElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .ladronismClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - LadronismClass
+struct LadronismClass: Codable, Hashable {
+    let acclaimer: JSONNull?
+    let achree: JSONNull?
+    let base: JSONNull?
+    let conundrumize: JSONNull?
+    let degerminator: JSONNull?
+    let describable: JSONNull?
+    let exasperatedly: JSONNull?
+    let heroine: JSONNull?
+    let indazin: JSONNull?
+    let luteous: JSONNull?
+    let papular: JSONNull?
+    let pritch: JSONNull?
+    let prodenia: JSONNull?
+    let seege: JSONNull?
+    let shopgirl: JSONNull?
+    let tragedietta: JSONNull?
+    let unsparse: JSONNull?
+    let uplook: JSONNull?
+    let vermiformis: JSONNull?
+    let whafabout: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acclaimer = "acclaimer"
+        case achree = "achree"
+        case base = "base"
+        case conundrumize = "conundrumize"
+        case degerminator = "degerminator"
+        case describable = "describable"
+        case exasperatedly = "exasperatedly"
+        case heroine = "heroine"
+        case indazin = "indazin"
+        case luteous = "luteous"
+        case papular = "papular"
+        case pritch = "pritch"
+        case prodenia = "Prodenia"
+        case seege = "seege"
+        case shopgirl = "shopgirl"
+        case tragedietta = "tragedietta"
+        case unsparse = "unsparse"
+        case uplook = "uplook"
+        case vermiformis = "vermiformis"
+        case whafabout = "whafabout"
+    }
+}
+
+// MARK: LadronismClass convenience initializers and mutators
+
+extension LadronismClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(LadronismClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acclaimer: JSONNull?? = nil,
+        achree: JSONNull?? = nil,
+        base: JSONNull?? = nil,
+        conundrumize: JSONNull?? = nil,
+        degerminator: JSONNull?? = nil,
+        describable: JSONNull?? = nil,
+        exasperatedly: JSONNull?? = nil,
+        heroine: JSONNull?? = nil,
+        indazin: JSONNull?? = nil,
+        luteous: JSONNull?? = nil,
+        papular: JSONNull?? = nil,
+        pritch: JSONNull?? = nil,
+        prodenia: JSONNull?? = nil,
+        seege: JSONNull?? = nil,
+        shopgirl: JSONNull?? = nil,
+        tragedietta: JSONNull?? = nil,
+        unsparse: JSONNull?? = nil,
+        uplook: JSONNull?? = nil,
+        vermiformis: JSONNull?? = nil,
+        whafabout: JSONNull?? = nil
+    ) -> LadronismClass {
+        return LadronismClass(
+            acclaimer: acclaimer ?? self.acclaimer,
+            achree: achree ?? self.achree,
+            base: base ?? self.base,
+            conundrumize: conundrumize ?? self.conundrumize,
+            degerminator: degerminator ?? self.degerminator,
+            describable: describable ?? self.describable,
+            exasperatedly: exasperatedly ?? self.exasperatedly,
+            heroine: heroine ?? self.heroine,
+            indazin: indazin ?? self.indazin,
+            luteous: luteous ?? self.luteous,
+            papular: papular ?? self.papular,
+            pritch: pritch ?? self.pritch,
+            prodenia: prodenia ?? self.prodenia,
+            seege: seege ?? self.seege,
+            shopgirl: shopgirl ?? self.shopgirl,
+            tragedietta: tragedietta ?? self.tragedietta,
+            unsparse: unsparse ?? self.unsparse,
+            uplook: uplook ?? self.uplook,
+            vermiformis: vermiformis ?? self.vermiformis,
+            whafabout: whafabout ?? self.whafabout
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum LandlubberlyElement: Codable, Hashable {
+    case bool(Bool)
+    case integer(Int)
+    case landlubberlyClass(LandlubberlyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(LandlubberlyClass.self) {
+            self = .landlubberlyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(LandlubberlyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LandlubberlyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .landlubberlyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - LandlubberlyClass
+struct LandlubberlyClass: Codable, Hashable {
+    let acropoleis: JSONNull?
+    let aminate: JSONNull?
+    let amyraldism: JSONNull?
+    let bipenniform: JSONNull?
+    let bugre: JSONNull?
+    let calycule: JSONNull?
+    let caoutchouc: JSONNull?
+    let disprover: JSONNull?
+    let fitroot: JSONNull?
+    let fulgently: JSONNull?
+    let kickup: JSONNull?
+    let laevoversion: JSONNull?
+    let moter: JSONNull?
+    let objectivity: JSONNull?
+    let posterity: JSONNull?
+    let postnuptial: JSONNull?
+    let precedentary: JSONNull?
+    let saddling: JSONNull?
+    let subcurrent: JSONNull?
+    let unrecriminative: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acropoleis = "acropoleis"
+        case aminate = "aminate"
+        case amyraldism = "Amyraldism"
+        case bipenniform = "bipenniform"
+        case bugre = "bugre"
+        case calycule = "calycule"
+        case caoutchouc = "caoutchouc"
+        case disprover = "disprover"
+        case fitroot = "fitroot"
+        case fulgently = "fulgently"
+        case kickup = "kickup"
+        case laevoversion = "laevoversion"
+        case moter = "moter"
+        case objectivity = "objectivity"
+        case posterity = "posterity"
+        case postnuptial = "postnuptial"
+        case precedentary = "precedentary"
+        case saddling = "saddling"
+        case subcurrent = "subcurrent"
+        case unrecriminative = "unrecriminative"
+    }
+}
+
+// MARK: LandlubberlyClass convenience initializers and mutators
+
+extension LandlubberlyClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(LandlubberlyClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acropoleis: JSONNull?? = nil,
+        aminate: JSONNull?? = nil,
+        amyraldism: JSONNull?? = nil,
+        bipenniform: JSONNull?? = nil,
+        bugre: JSONNull?? = nil,
+        calycule: JSONNull?? = nil,
+        caoutchouc: JSONNull?? = nil,
+        disprover: JSONNull?? = nil,
+        fitroot: JSONNull?? = nil,
+        fulgently: JSONNull?? = nil,
+        kickup: JSONNull?? = nil,
+        laevoversion: JSONNull?? = nil,
+        moter: JSONNull?? = nil,
+        objectivity: JSONNull?? = nil,
+        posterity: JSONNull?? = nil,
+        postnuptial: JSONNull?? = nil,
+        precedentary: JSONNull?? = nil,
+        saddling: JSONNull?? = nil,
+        subcurrent: JSONNull?? = nil,
+        unrecriminative: JSONNull?? = nil
+    ) -> LandlubberlyClass {
+        return LandlubberlyClass(
+            acropoleis: acropoleis ?? self.acropoleis,
+            aminate: aminate ?? self.aminate,
+            amyraldism: amyraldism ?? self.amyraldism,
+            bipenniform: bipenniform ?? self.bipenniform,
+            bugre: bugre ?? self.bugre,
+            calycule: calycule ?? self.calycule,
+            caoutchouc: caoutchouc ?? self.caoutchouc,
+            disprover: disprover ?? self.disprover,
+            fitroot: fitroot ?? self.fitroot,
+            fulgently: fulgently ?? self.fulgently,
+            kickup: kickup ?? self.kickup,
+            laevoversion: laevoversion ?? self.laevoversion,
+            moter: moter ?? self.moter,
+            objectivity: objectivity ?? self.objectivity,
+            posterity: posterity ?? self.posterity,
+            postnuptial: postnuptial ?? self.postnuptial,
+            precedentary: precedentary ?? self.precedentary,
+            saddling: saddling ?? self.saddling,
+            subcurrent: subcurrent ?? self.subcurrent,
+            unrecriminative: unrecriminative ?? self.unrecriminative
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Listener: Codable, Hashable {
+    case integer(Int)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Listener.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Listener"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum LupusElement: Codable, Hashable {
+    case integer(Int)
+    case lupusClass(LupusClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(LupusClass.self) {
+            self = .lupusClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(LupusElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LupusElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .lupusClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - LupusClass
+struct LupusClass: Codable, Hashable {
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let chlorioninae: Int?
+    let corvinae: Int?
+    let crassina: Int?
+    let disdiapason: String?
+    let exiguity: Int?
+    let farcist: Int?
+    let holographical: Int?
+    let homocerc: Bool?
+    let ichthyophagan: Int?
+    let implacable: Int?
+    let nonbookish: JSONNull?
+    let outshiner: Int?
+    let overweather: Int?
+    let protonegroid: Int?
+    let shallowish: Int?
+    let snoke: Int?
+    let snout: Int?
+    let surveillance: Int?
+    let threshingtime: Int?
+    let thysanocarpus: Int?
+    let unsignificantly: Int?
+    let unsnap: Int?
+    let vendible: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case chlorioninae = "Chlorioninae"
+        case corvinae = "Corvinae"
+        case crassina = "Crassina"
+        case disdiapason = "disdiapason"
+        case exiguity = "exiguity"
+        case farcist = "farcist"
+        case holographical = "holographical"
+        case homocerc = "homocerc"
+        case ichthyophagan = "ichthyophagan"
+        case implacable = "implacable"
+        case nonbookish = "nonbookish"
+        case outshiner = "outshiner"
+        case overweather = "overweather"
+        case protonegroid = "protonegroid"
+        case shallowish = "shallowish"
+        case snoke = "snoke"
+        case snout = "snout"
+        case surveillance = "surveillance"
+        case threshingtime = "threshingtime"
+        case thysanocarpus = "Thysanocarpus"
+        case unsignificantly = "unsignificantly"
+        case unsnap = "unsnap"
+        case vendible = "vendible"
+    }
+}
+
+// MARK: LupusClass convenience initializers and mutators
+
+extension LupusClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(LupusClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        chlorioninae: Int?? = nil,
+        corvinae: Int?? = nil,
+        crassina: Int?? = nil,
+        disdiapason: String?? = nil,
+        exiguity: Int?? = nil,
+        farcist: Int?? = nil,
+        holographical: Int?? = nil,
+        homocerc: Bool?? = nil,
+        ichthyophagan: Int?? = nil,
+        implacable: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        outshiner: Int?? = nil,
+        overweather: Int?? = nil,
+        protonegroid: Int?? = nil,
+        shallowish: Int?? = nil,
+        snoke: Int?? = nil,
+        snout: Int?? = nil,
+        surveillance: Int?? = nil,
+        threshingtime: Int?? = nil,
+        thysanocarpus: Int?? = nil,
+        unsignificantly: Int?? = nil,
+        unsnap: Int?? = nil,
+        vendible: Int?? = nil
+    ) -> LupusClass {
+        return LupusClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chlorioninae: chlorioninae ?? self.chlorioninae,
+            corvinae: corvinae ?? self.corvinae,
+            crassina: crassina ?? self.crassina,
+            disdiapason: disdiapason ?? self.disdiapason,
+            exiguity: exiguity ?? self.exiguity,
+            farcist: farcist ?? self.farcist,
+            holographical: holographical ?? self.holographical,
+            homocerc: homocerc ?? self.homocerc,
+            ichthyophagan: ichthyophagan ?? self.ichthyophagan,
+            implacable: implacable ?? self.implacable,
+            nonbookish: nonbookish ?? self.nonbookish,
+            outshiner: outshiner ?? self.outshiner,
+            overweather: overweather ?? self.overweather,
+            protonegroid: protonegroid ?? self.protonegroid,
+            shallowish: shallowish ?? self.shallowish,
+            snoke: snoke ?? self.snoke,
+            snout: snout ?? self.snout,
+            surveillance: surveillance ?? self.surveillance,
+            threshingtime: threshingtime ?? self.threshingtime,
+            thysanocarpus: thysanocarpus ?? self.thysanocarpus,
+            unsignificantly: unsignificantly ?? self.unsignificantly,
+            unsnap: unsnap ?? self.unsnap,
+            vendible: vendible ?? self.vendible
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Maslin
+struct Maslin: Codable, Hashable {
+    let alicant: Int?
+    let antiatonement: JSONNull?
+    let anticorrosive: Int?
+    let aphidozer: JSONNull?
+    let bakuninist: JSONNull?
+    let be: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let chub: Int?
+    let cuprosilicon: Int?
+    let curtailedly: Int?
+    let dellenite: Int?
+    let dimitry: Int?
+    let disdiapason: String?
+    let edifying: JSONNull?
+    let ethmoiditis: Int?
+    let gastralgy: JSONNull?
+    let goatherd: Int?
+    let hammerdress: Int?
+    let hangfire: JSONNull?
+    let homocerc: Bool?
+    let lacunosity: Int?
+    let longiloquence: JSONNull?
+    let mameliere: Int?
+    let motherless: JSONNull?
+    let nonbookish: JSONNull?
+    let noncorrodible: JSONNull?
+    let nonsensicality: JSONNull?
+    let oafishly: Int?
+    let pfund: JSONNull?
+    let preadvisory: JSONNull?
+    let retroflexed: JSONNull?
+    let saccharulmic: Int?
+    let scowlful: Int?
+    let secluded: JSONNull?
+    let slackage: JSONNull?
+    let sphaeridial: Int?
+    let spondulics: JSONNull?
+    let subsecive: Int?
+    let swellmobsman: JSONNull?
+    let trachyglossate: Int?
+    let trialogue: JSONNull?
+    let unassuaged: Int?
+    let ungross: JSONNull?
+    let unjudiciously: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case alicant = "Alicant"
+        case antiatonement = "antiatonement"
+        case anticorrosive = "anticorrosive"
+        case aphidozer = "aphidozer"
+        case bakuninist = "Bakuninist"
+        case be = "be"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case chub = "chub"
+        case cuprosilicon = "cuprosilicon"
+        case curtailedly = "curtailedly"
+        case dellenite = "dellenite"
+        case dimitry = "Dimitry"
+        case disdiapason = "disdiapason"
+        case edifying = "edifying"
+        case ethmoiditis = "ethmoiditis"
+        case gastralgy = "gastralgy"
+        case goatherd = "goatherd"
+        case hammerdress = "hammerdress"
+        case hangfire = "hangfire"
+        case homocerc = "homocerc"
+        case lacunosity = "lacunosity"
+        case longiloquence = "longiloquence"
+        case mameliere = "mameliere"
+        case motherless = "motherless"
+        case nonbookish = "nonbookish"
+        case noncorrodible = "noncorrodible"
+        case nonsensicality = "nonsensicality"
+        case oafishly = "oafishly"
+        case pfund = "pfund"
+        case preadvisory = "preadvisory"
+        case retroflexed = "retroflexed"
+        case saccharulmic = "saccharulmic"
+        case scowlful = "scowlful"
+        case secluded = "secluded"
+        case slackage = "slackage"
+        case sphaeridial = "sphaeridial"
+        case spondulics = "spondulics"
+        case subsecive = "subsecive"
+        case swellmobsman = "swellmobsman"
+        case trachyglossate = "trachyglossate"
+        case trialogue = "trialogue"
+        case unassuaged = "unassuaged"
+        case ungross = "ungross"
+        case unjudiciously = "unjudiciously"
+    }
+}
+
+// MARK: Maslin convenience initializers and mutators
+
+extension Maslin {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Maslin.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        alicant: Int?? = nil,
+        antiatonement: JSONNull?? = nil,
+        anticorrosive: Int?? = nil,
+        aphidozer: JSONNull?? = nil,
+        bakuninist: JSONNull?? = nil,
+        be: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        chub: Int?? = nil,
+        cuprosilicon: Int?? = nil,
+        curtailedly: Int?? = nil,
+        dellenite: Int?? = nil,
+        dimitry: Int?? = nil,
+        disdiapason: String?? = nil,
+        edifying: JSONNull?? = nil,
+        ethmoiditis: Int?? = nil,
+        gastralgy: JSONNull?? = nil,
+        goatherd: Int?? = nil,
+        hammerdress: Int?? = nil,
+        hangfire: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        lacunosity: Int?? = nil,
+        longiloquence: JSONNull?? = nil,
+        mameliere: Int?? = nil,
+        motherless: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        noncorrodible: JSONNull?? = nil,
+        nonsensicality: JSONNull?? = nil,
+        oafishly: Int?? = nil,
+        pfund: JSONNull?? = nil,
+        preadvisory: JSONNull?? = nil,
+        retroflexed: JSONNull?? = nil,
+        saccharulmic: Int?? = nil,
+        scowlful: Int?? = nil,
+        secluded: JSONNull?? = nil,
+        slackage: JSONNull?? = nil,
+        sphaeridial: Int?? = nil,
+        spondulics: JSONNull?? = nil,
+        subsecive: Int?? = nil,
+        swellmobsman: JSONNull?? = nil,
+        trachyglossate: Int?? = nil,
+        trialogue: JSONNull?? = nil,
+        unassuaged: Int?? = nil,
+        ungross: JSONNull?? = nil,
+        unjudiciously: JSONNull?? = nil
+    ) -> Maslin {
+        return Maslin(
+            alicant: alicant ?? self.alicant,
+            antiatonement: antiatonement ?? self.antiatonement,
+            anticorrosive: anticorrosive ?? self.anticorrosive,
+            aphidozer: aphidozer ?? self.aphidozer,
+            bakuninist: bakuninist ?? self.bakuninist,
+            be: be ?? self.be,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chub: chub ?? self.chub,
+            cuprosilicon: cuprosilicon ?? self.cuprosilicon,
+            curtailedly: curtailedly ?? self.curtailedly,
+            dellenite: dellenite ?? self.dellenite,
+            dimitry: dimitry ?? self.dimitry,
+            disdiapason: disdiapason ?? self.disdiapason,
+            edifying: edifying ?? self.edifying,
+            ethmoiditis: ethmoiditis ?? self.ethmoiditis,
+            gastralgy: gastralgy ?? self.gastralgy,
+            goatherd: goatherd ?? self.goatherd,
+            hammerdress: hammerdress ?? self.hammerdress,
+            hangfire: hangfire ?? self.hangfire,
+            homocerc: homocerc ?? self.homocerc,
+            lacunosity: lacunosity ?? self.lacunosity,
+            longiloquence: longiloquence ?? self.longiloquence,
+            mameliere: mameliere ?? self.mameliere,
+            motherless: motherless ?? self.motherless,
+            nonbookish: nonbookish ?? self.nonbookish,
+            noncorrodible: noncorrodible ?? self.noncorrodible,
+            nonsensicality: nonsensicality ?? self.nonsensicality,
+            oafishly: oafishly ?? self.oafishly,
+            pfund: pfund ?? self.pfund,
+            preadvisory: preadvisory ?? self.preadvisory,
+            retroflexed: retroflexed ?? self.retroflexed,
+            saccharulmic: saccharulmic ?? self.saccharulmic,
+            scowlful: scowlful ?? self.scowlful,
+            secluded: secluded ?? self.secluded,
+            slackage: slackage ?? self.slackage,
+            sphaeridial: sphaeridial ?? self.sphaeridial,
+            spondulics: spondulics ?? self.spondulics,
+            subsecive: subsecive ?? self.subsecive,
+            swellmobsman: swellmobsman ?? self.swellmobsman,
+            trachyglossate: trachyglossate ?? self.trachyglossate,
+            trialogue: trialogue ?? self.trialogue,
+            unassuaged: unassuaged ?? self.unassuaged,
+            ungross: ungross ?? self.ungross,
+            unjudiciously: unjudiciously ?? self.unjudiciously
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum MonaziteElement: Codable, Hashable {
+    case double(Double)
+    case monaziteClass(MonaziteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(MonaziteElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for MonaziteElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - MonaziteClass
+struct MonaziteClass: Codable, Hashable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+}
+
+// MARK: MonaziteClass convenience initializers and mutators
+
+extension MonaziteClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(MonaziteClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> MonaziteClass {
+        return MonaziteClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Monoliteral: Codable, Hashable {
+    case bool(Bool)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Monoliteral.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Monoliteral"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum MonotheisticallyElement: Codable, Hashable {
+    case monotheisticallyClass(MonotheisticallyClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(MonotheisticallyClass.self) {
+            self = .monotheisticallyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(MonotheisticallyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for MonotheisticallyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .monotheisticallyClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - MonotheisticallyClass
+struct MonotheisticallyClass: Codable, Hashable {
+    let blaspheme: JSONNull?
+    let catharticalness: Double?
+    let celiosalpingectomy: JSONNull?
+    let chirotherium: Int?
+    let consummativeness: JSONNull?
+    let disdiapason: String?
+    let egestive: JSONNull?
+    let enchylema: JSONNull?
+    let gasconade: JSONNull?
+    let holidayer: JSONNull?
+    let homocerc: Bool?
+    let intuitionalism: JSONNull?
+    let lophiostomate: JSONNull?
+    let nonbookish: JSONNull?
+    let nonvolition: JSONNull?
+    let palatableness: JSONNull?
+    let pimpery: JSONNull?
+    let previolation: JSONNull?
+    let reconveyance: JSONNull?
+    let registership: JSONNull?
+    let rhyacolite: JSONNull?
+    let smithereens: JSONNull?
+    let superedification: JSONNull?
+    let trust: JSONNull?
+    let whitestone: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case blaspheme = "blaspheme"
+        case catharticalness = "catharticalness"
+        case celiosalpingectomy = "celiosalpingectomy"
+        case chirotherium = "Chirotherium"
+        case consummativeness = "consummativeness"
+        case disdiapason = "disdiapason"
+        case egestive = "egestive"
+        case enchylema = "enchylema"
+        case gasconade = "gasconade"
+        case holidayer = "holidayer"
+        case homocerc = "homocerc"
+        case intuitionalism = "intuitionalism"
+        case lophiostomate = "lophiostomate"
+        case nonbookish = "nonbookish"
+        case nonvolition = "nonvolition"
+        case palatableness = "palatableness"
+        case pimpery = "pimpery"
+        case previolation = "previolation"
+        case reconveyance = "reconveyance"
+        case registership = "registership"
+        case rhyacolite = "rhyacolite"
+        case smithereens = "smithereens"
+        case superedification = "superedification"
+        case trust = "trust"
+        case whitestone = "whitestone"
+    }
+}
+
+// MARK: MonotheisticallyClass convenience initializers and mutators
+
+extension MonotheisticallyClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(MonotheisticallyClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        blaspheme: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        celiosalpingectomy: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        consummativeness: JSONNull?? = nil,
+        disdiapason: String?? = nil,
+        egestive: JSONNull?? = nil,
+        enchylema: JSONNull?? = nil,
+        gasconade: JSONNull?? = nil,
+        holidayer: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        intuitionalism: JSONNull?? = nil,
+        lophiostomate: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        nonvolition: JSONNull?? = nil,
+        palatableness: JSONNull?? = nil,
+        pimpery: JSONNull?? = nil,
+        previolation: JSONNull?? = nil,
+        reconveyance: JSONNull?? = nil,
+        registership: JSONNull?? = nil,
+        rhyacolite: JSONNull?? = nil,
+        smithereens: JSONNull?? = nil,
+        superedification: JSONNull?? = nil,
+        trust: JSONNull?? = nil,
+        whitestone: JSONNull?? = nil
+    ) -> MonotheisticallyClass {
+        return MonotheisticallyClass(
+            blaspheme: blaspheme ?? self.blaspheme,
+            catharticalness: catharticalness ?? self.catharticalness,
+            celiosalpingectomy: celiosalpingectomy ?? self.celiosalpingectomy,
+            chirotherium: chirotherium ?? self.chirotherium,
+            consummativeness: consummativeness ?? self.consummativeness,
+            disdiapason: disdiapason ?? self.disdiapason,
+            egestive: egestive ?? self.egestive,
+            enchylema: enchylema ?? self.enchylema,
+            gasconade: gasconade ?? self.gasconade,
+            holidayer: holidayer ?? self.holidayer,
+            homocerc: homocerc ?? self.homocerc,
+            intuitionalism: intuitionalism ?? self.intuitionalism,
+            lophiostomate: lophiostomate ?? self.lophiostomate,
+            nonbookish: nonbookish ?? self.nonbookish,
+            nonvolition: nonvolition ?? self.nonvolition,
+            palatableness: palatableness ?? self.palatableness,
+            pimpery: pimpery ?? self.pimpery,
+            previolation: previolation ?? self.previolation,
+            reconveyance: reconveyance ?? self.reconveyance,
+            registership: registership ?? self.registership,
+            rhyacolite: rhyacolite ?? self.rhyacolite,
+            smithereens: smithereens ?? self.smithereens,
+            superedification: superedification ?? self.superedification,
+            trust: trust ?? self.trust,
+            whitestone: whitestone ?? self.whitestone
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Montage: Codable, Hashable {
+    case double(Double)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Montage.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Montage"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Moralness: Codable, Hashable {
+    case double(Double)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Moralness.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Moralness"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Mulishly: Codable, Hashable {
+    case double(Double)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Mulishly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Mulishly"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Myoscope: Codable, Hashable {
+    case bool(Bool)
+    case integer(Int)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Myoscope.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Myoscope"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Neuromastic: Codable, Hashable {
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Neuromastic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Neuromastic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Noncontributing
+struct Noncontributing: Codable, Hashable {
+    let estevin: String
+    let jolterhead: Double
+    let sauternes: Int
+    let sparsely: Bool
+    let unrequested: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case estevin = "estevin"
+        case jolterhead = "jolterhead"
+        case sauternes = "sauternes"
+        case sparsely = "sparsely"
+        case unrequested = "unrequested"
+    }
+}
+
+// MARK: Noncontributing convenience initializers and mutators
+
+extension Noncontributing {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Noncontributing.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        estevin: String? = nil,
+        jolterhead: Double? = nil,
+        sauternes: Int? = nil,
+        sparsely: Bool? = nil,
+        unrequested: JSONNull?? = nil
+    ) -> Noncontributing {
+        return Noncontributing(
+            estevin: estevin ?? self.estevin,
+            jolterhead: jolterhead ?? self.jolterhead,
+            sauternes: sauternes ?? self.sauternes,
+            sparsely: sparsely ?? self.sparsely,
+            unrequested: unrequested ?? self.unrequested
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Nonnervous: Codable, Hashable {
+    case bool(Bool)
+    case integer(Int)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Nonnervous.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Nonnervous"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Nonvaluation: Codable, Hashable {
+    case bool(Bool)
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Nonvaluation.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Nonvaluation"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum OccupationalistElement: Codable, Hashable {
+    case nullArray([JSONNull?])
+    case occupationalistClass(OccupationalistClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(OccupationalistClass.self) {
+            self = .occupationalistClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(OccupationalistElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for OccupationalistElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .occupationalistClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - OccupationalistClass
+struct OccupationalistClass: Codable, Hashable {
+    let beholdable: JSONNull?
+    let brotuliform: JSONNull?
+    let chimakum: JSONNull?
+    let doodler: JSONNull?
+    let emulsin: JSONNull?
+    let fin: JSONNull?
+    let flourishing: JSONNull?
+    let flueless: JSONNull?
+    let furtively: JSONNull?
+    let gritter: JSONNull?
+    let interwish: JSONNull?
+    let monoxylic: JSONNull?
+    let myristic: JSONNull?
+    let nightwear: JSONNull?
+    let peruser: JSONNull?
+    let theoastrological: JSONNull?
+    let thumby: JSONNull?
+    let tingitid: JSONNull?
+    let trailless: JSONNull?
+    let unpocketed: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case beholdable = "beholdable"
+        case brotuliform = "brotuliform"
+        case chimakum = "Chimakum"
+        case doodler = "doodler"
+        case emulsin = "emulsin"
+        case fin = "Fin"
+        case flourishing = "flourishing"
+        case flueless = "flueless"
+        case furtively = "furtively"
+        case gritter = "gritter"
+        case interwish = "interwish"
+        case monoxylic = "monoxylic"
+        case myristic = "myristic"
+        case nightwear = "nightwear"
+        case peruser = "peruser"
+        case theoastrological = "theoastrological"
+        case thumby = "thumby"
+        case tingitid = "tingitid"
+        case trailless = "trailless"
+        case unpocketed = "unpocketed"
+    }
+}
+
+// MARK: OccupationalistClass convenience initializers and mutators
+
+extension OccupationalistClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(OccupationalistClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        beholdable: JSONNull?? = nil,
+        brotuliform: JSONNull?? = nil,
+        chimakum: JSONNull?? = nil,
+        doodler: JSONNull?? = nil,
+        emulsin: JSONNull?? = nil,
+        fin: JSONNull?? = nil,
+        flourishing: JSONNull?? = nil,
+        flueless: JSONNull?? = nil,
+        furtively: JSONNull?? = nil,
+        gritter: JSONNull?? = nil,
+        interwish: JSONNull?? = nil,
+        monoxylic: JSONNull?? = nil,
+        myristic: JSONNull?? = nil,
+        nightwear: JSONNull?? = nil,
+        peruser: JSONNull?? = nil,
+        theoastrological: JSONNull?? = nil,
+        thumby: JSONNull?? = nil,
+        tingitid: JSONNull?? = nil,
+        trailless: JSONNull?? = nil,
+        unpocketed: JSONNull?? = nil
+    ) -> OccupationalistClass {
+        return OccupationalistClass(
+            beholdable: beholdable ?? self.beholdable,
+            brotuliform: brotuliform ?? self.brotuliform,
+            chimakum: chimakum ?? self.chimakum,
+            doodler: doodler ?? self.doodler,
+            emulsin: emulsin ?? self.emulsin,
+            fin: fin ?? self.fin,
+            flourishing: flourishing ?? self.flourishing,
+            flueless: flueless ?? self.flueless,
+            furtively: furtively ?? self.furtively,
+            gritter: gritter ?? self.gritter,
+            interwish: interwish ?? self.interwish,
+            monoxylic: monoxylic ?? self.monoxylic,
+            myristic: myristic ?? self.myristic,
+            nightwear: nightwear ?? self.nightwear,
+            peruser: peruser ?? self.peruser,
+            theoastrological: theoastrological ?? self.theoastrological,
+            thumby: thumby ?? self.thumby,
+            tingitid: tingitid ?? self.tingitid,
+            trailless: trailless ?? self.trailless,
+            unpocketed: unpocketed ?? self.unpocketed
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum OutrivalElement: Codable, Hashable {
+    case double(Double)
+    case outrivalClass(OutrivalClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(OutrivalClass.self) {
+            self = .outrivalClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(OutrivalElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for OutrivalElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .outrivalClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - OutrivalClass
+struct OutrivalClass: Codable, Hashable {
+    let adroitly: JSONNull?
+    let bridehood: JSONNull?
+    let castoroides: JSONNull?
+    let czechoslovak: JSONNull?
+    let diagenesis: JSONNull?
+    let dihexahedron: JSONNull?
+    let dopester: JSONNull?
+    let eumerism: JSONNull?
+    let flyness: JSONNull?
+    let fouler: JSONNull?
+    let laudanosine: JSONNull?
+    let lingulidae: JSONNull?
+    let minutary: JSONNull?
+    let mitra: JSONNull?
+    let opisthorchiasis: JSONNull?
+    let pensively: JSONNull?
+    let pubigerous: JSONNull?
+    let rebellious: JSONNull?
+    let recodify: JSONNull?
+    let unpaced: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case adroitly = "adroitly"
+        case bridehood = "bridehood"
+        case castoroides = "Castoroides"
+        case czechoslovak = "Czechoslovak"
+        case diagenesis = "diagenesis"
+        case dihexahedron = "dihexahedron"
+        case dopester = "dopester"
+        case eumerism = "eumerism"
+        case flyness = "flyness"
+        case fouler = "fouler"
+        case laudanosine = "laudanosine"
+        case lingulidae = "Lingulidae"
+        case minutary = "minutary"
+        case mitra = "mitra"
+        case opisthorchiasis = "opisthorchiasis"
+        case pensively = "pensively"
+        case pubigerous = "pubigerous"
+        case rebellious = "rebellious"
+        case recodify = "recodify"
+        case unpaced = "unpaced"
+    }
+}
+
+// MARK: OutrivalClass convenience initializers and mutators
+
+extension OutrivalClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(OutrivalClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        adroitly: JSONNull?? = nil,
+        bridehood: JSONNull?? = nil,
+        castoroides: JSONNull?? = nil,
+        czechoslovak: JSONNull?? = nil,
+        diagenesis: JSONNull?? = nil,
+        dihexahedron: JSONNull?? = nil,
+        dopester: JSONNull?? = nil,
+        eumerism: JSONNull?? = nil,
+        flyness: JSONNull?? = nil,
+        fouler: JSONNull?? = nil,
+        laudanosine: JSONNull?? = nil,
+        lingulidae: JSONNull?? = nil,
+        minutary: JSONNull?? = nil,
+        mitra: JSONNull?? = nil,
+        opisthorchiasis: JSONNull?? = nil,
+        pensively: JSONNull?? = nil,
+        pubigerous: JSONNull?? = nil,
+        rebellious: JSONNull?? = nil,
+        recodify: JSONNull?? = nil,
+        unpaced: JSONNull?? = nil
+    ) -> OutrivalClass {
+        return OutrivalClass(
+            adroitly: adroitly ?? self.adroitly,
+            bridehood: bridehood ?? self.bridehood,
+            castoroides: castoroides ?? self.castoroides,
+            czechoslovak: czechoslovak ?? self.czechoslovak,
+            diagenesis: diagenesis ?? self.diagenesis,
+            dihexahedron: dihexahedron ?? self.dihexahedron,
+            dopester: dopester ?? self.dopester,
+            eumerism: eumerism ?? self.eumerism,
+            flyness: flyness ?? self.flyness,
+            fouler: fouler ?? self.fouler,
+            laudanosine: laudanosine ?? self.laudanosine,
+            lingulidae: lingulidae ?? self.lingulidae,
+            minutary: minutary ?? self.minutary,
+            mitra: mitra ?? self.mitra,
+            opisthorchiasis: opisthorchiasis ?? self.opisthorchiasis,
+            pensively: pensively ?? self.pensively,
+            pubigerous: pubigerous ?? self.pubigerous,
+            rebellious: rebellious ?? self.rebellious,
+            recodify: recodify ?? self.recodify,
+            unpaced: unpaced ?? self.unpaced
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Paleographically: Codable, Hashable {
+    case double(Double)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Paleographically.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Paleographically"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Pamphletwise: Codable, Hashable {
+    case integer(Int)
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Pamphletwise.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pamphletwise"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Pediatric: Codable, Hashable {
+    case bool(Bool)
+    case double(Double)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Pediatric.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pediatric"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum PiaculumElement: Codable, Hashable {
+    case double(Double)
+    case piaculumClass(PiaculumClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(PiaculumClass.self) {
+            self = .piaculumClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(PiaculumElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PiaculumElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .piaculumClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - PiaculumClass
+struct PiaculumClass: Codable, Hashable {
+    let alada: Int?
+    let amphistomous: Int?
+    let boysenberry: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let decardinalize: Int?
+    let discouragement: Int?
+    let disdiapason: String?
+    let doitrified: Int?
+    let hexaspermous: Int?
+    let homocerc: Bool?
+    let insinking: Int?
+    let loathfulness: Int?
+    let miasmatical: Int?
+    let neurofibril: Int?
+    let nonbookish: JSONNull?
+    let phonendoscope: Int?
+    let pilferment: Int?
+    let predismissory: Int?
+    let preinscription: Int?
+    let quotative: Int?
+    let sienna: Int?
+    let thorax: Int?
+    let yachting: Int?
+    let zipper: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case alada = "alada"
+        case amphistomous = "amphistomous"
+        case boysenberry = "boysenberry"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case decardinalize = "decardinalize"
+        case discouragement = "discouragement"
+        case disdiapason = "disdiapason"
+        case doitrified = "doitrified"
+        case hexaspermous = "hexaspermous"
+        case homocerc = "homocerc"
+        case insinking = "insinking"
+        case loathfulness = "loathfulness"
+        case miasmatical = "miasmatical"
+        case neurofibril = "neurofibril"
+        case nonbookish = "nonbookish"
+        case phonendoscope = "phonendoscope"
+        case pilferment = "pilferment"
+        case predismissory = "predismissory"
+        case preinscription = "preinscription"
+        case quotative = "quotative"
+        case sienna = "sienna"
+        case thorax = "thorax"
+        case yachting = "yachting"
+        case zipper = "Zipper"
+    }
+}
+
+// MARK: PiaculumClass convenience initializers and mutators
+
+extension PiaculumClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(PiaculumClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        alada: Int?? = nil,
+        amphistomous: Int?? = nil,
+        boysenberry: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        decardinalize: Int?? = nil,
+        discouragement: Int?? = nil,
+        disdiapason: String?? = nil,
+        doitrified: Int?? = nil,
+        hexaspermous: Int?? = nil,
+        homocerc: Bool?? = nil,
+        insinking: Int?? = nil,
+        loathfulness: Int?? = nil,
+        miasmatical: Int?? = nil,
+        neurofibril: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        phonendoscope: Int?? = nil,
+        pilferment: Int?? = nil,
+        predismissory: Int?? = nil,
+        preinscription: Int?? = nil,
+        quotative: Int?? = nil,
+        sienna: Int?? = nil,
+        thorax: Int?? = nil,
+        yachting: Int?? = nil,
+        zipper: Int?? = nil
+    ) -> PiaculumClass {
+        return PiaculumClass(
+            alada: alada ?? self.alada,
+            amphistomous: amphistomous ?? self.amphistomous,
+            boysenberry: boysenberry ?? self.boysenberry,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            decardinalize: decardinalize ?? self.decardinalize,
+            discouragement: discouragement ?? self.discouragement,
+            disdiapason: disdiapason ?? self.disdiapason,
+            doitrified: doitrified ?? self.doitrified,
+            hexaspermous: hexaspermous ?? self.hexaspermous,
+            homocerc: homocerc ?? self.homocerc,
+            insinking: insinking ?? self.insinking,
+            loathfulness: loathfulness ?? self.loathfulness,
+            miasmatical: miasmatical ?? self.miasmatical,
+            neurofibril: neurofibril ?? self.neurofibril,
+            nonbookish: nonbookish ?? self.nonbookish,
+            phonendoscope: phonendoscope ?? self.phonendoscope,
+            pilferment: pilferment ?? self.pilferment,
+            predismissory: predismissory ?? self.predismissory,
+            preinscription: preinscription ?? self.preinscription,
+            quotative: quotative ?? self.quotative,
+            sienna: sienna ?? self.sienna,
+            thorax: thorax ?? self.thorax,
+            yachting: yachting ?? self.yachting,
+            zipper: zipper ?? self.zipper
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Piccadilly: Codable, Hashable {
+    case double(Double)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Piccadilly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Piccadilly"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Piffler: Codable, Hashable {
+    case monaziteClass(MonaziteClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Piffler.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Piffler"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .monaziteClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Pithful: Codable, Hashable {
+    case bool(Bool)
+    case integer(Int)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Pithful.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pithful"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Placuntiti: Codable, Hashable {
+    case integer(Int)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Placuntiti.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Placuntiti"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Plectopterous: Codable, Hashable {
+    case double(Double)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Plectopterous.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Plectopterous"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Pneumocele
+struct Pneumocele: Codable, Hashable {
+    let carbonarism: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let cineolic: JSONNull?
+    let cobbly: JSONNull?
+    let conchyliferous: JSONNull?
+    let congregation: JSONNull?
+    let disdiapason: String?
+    let enterotomy: JSONNull?
+    let entophytal: JSONNull?
+    let fewtrils: JSONNull?
+    let herem: JSONNull?
+    let homocerc: Bool?
+    let koniga: JSONNull?
+    let meticulosity: JSONNull?
+    let micky: JSONNull?
+    let mismarriage: JSONNull?
+    let neurotrophic: JSONNull?
+    let nonbookish: JSONNull?
+    let persuasively: JSONNull?
+    let replaceable: JSONNull?
+    let silex: JSONNull?
+    let taillight: JSONNull?
+    let unjealous: JSONNull?
+    let visitorial: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case carbonarism = "Carbonarism"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case cineolic = "cineolic"
+        case cobbly = "cobbly"
+        case conchyliferous = "conchyliferous"
+        case congregation = "congregation"
+        case disdiapason = "disdiapason"
+        case enterotomy = "enterotomy"
+        case entophytal = "entophytal"
+        case fewtrils = "fewtrils"
+        case herem = "herem"
+        case homocerc = "homocerc"
+        case koniga = "Koniga"
+        case meticulosity = "meticulosity"
+        case micky = "Micky"
+        case mismarriage = "mismarriage"
+        case neurotrophic = "neurotrophic"
+        case nonbookish = "nonbookish"
+        case persuasively = "persuasively"
+        case replaceable = "replaceable"
+        case silex = "silex"
+        case taillight = "taillight"
+        case unjealous = "unjealous"
+        case visitorial = "visitorial"
+    }
+}
+
+// MARK: Pneumocele convenience initializers and mutators
+
+extension Pneumocele {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Pneumocele.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        carbonarism: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        cineolic: JSONNull?? = nil,
+        cobbly: JSONNull?? = nil,
+        conchyliferous: JSONNull?? = nil,
+        congregation: JSONNull?? = nil,
+        disdiapason: String?? = nil,
+        enterotomy: JSONNull?? = nil,
+        entophytal: JSONNull?? = nil,
+        fewtrils: JSONNull?? = nil,
+        herem: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        koniga: JSONNull?? = nil,
+        meticulosity: JSONNull?? = nil,
+        micky: JSONNull?? = nil,
+        mismarriage: JSONNull?? = nil,
+        neurotrophic: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        persuasively: JSONNull?? = nil,
+        replaceable: JSONNull?? = nil,
+        silex: JSONNull?? = nil,
+        taillight: JSONNull?? = nil,
+        unjealous: JSONNull?? = nil,
+        visitorial: JSONNull?? = nil
+    ) -> Pneumocele {
+        return Pneumocele(
+            carbonarism: carbonarism ?? self.carbonarism,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            cineolic: cineolic ?? self.cineolic,
+            cobbly: cobbly ?? self.cobbly,
+            conchyliferous: conchyliferous ?? self.conchyliferous,
+            congregation: congregation ?? self.congregation,
+            disdiapason: disdiapason ?? self.disdiapason,
+            enterotomy: enterotomy ?? self.enterotomy,
+            entophytal: entophytal ?? self.entophytal,
+            fewtrils: fewtrils ?? self.fewtrils,
+            herem: herem ?? self.herem,
+            homocerc: homocerc ?? self.homocerc,
+            koniga: koniga ?? self.koniga,
+            meticulosity: meticulosity ?? self.meticulosity,
+            micky: micky ?? self.micky,
+            mismarriage: mismarriage ?? self.mismarriage,
+            neurotrophic: neurotrophic ?? self.neurotrophic,
+            nonbookish: nonbookish ?? self.nonbookish,
+            persuasively: persuasively ?? self.persuasively,
+            replaceable: replaceable ?? self.replaceable,
+            silex: silex ?? self.silex,
+            taillight: taillight ?? self.taillight,
+            unjealous: unjealous ?? self.unjealous,
+            visitorial: visitorial ?? self.visitorial
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Poliorcetic: Codable, Hashable {
+    case bool(Bool)
+    case monaziteClass(MonaziteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Poliorcetic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Poliorcetic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Poormaster: Codable, Hashable {
+    case integerArray([Int])
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Poormaster.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Poormaster"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum PotwhiskyElement: Codable, Hashable {
+    case integer(Int)
+    case potwhiskyClass(PotwhiskyClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(PotwhiskyClass.self) {
+            self = .potwhiskyClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(PotwhiskyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PotwhiskyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .potwhiskyClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - PotwhiskyClass
+struct PotwhiskyClass: Codable, Hashable {
+    let arciform: JSONNull?
+    let cresolin: JSONNull?
+    let disheartener: JSONNull?
+    let disproportionable: JSONNull?
+    let euchorda: JSONNull?
+    let ferryway: JSONNull?
+    let filamentiferous: JSONNull?
+    let flemish: JSONNull?
+    let forgainst: JSONNull?
+    let grainering: JSONNull?
+    let irrevoluble: JSONNull?
+    let kindredship: JSONNull?
+    let pinguitudinous: JSONNull?
+    let simpletonic: JSONNull?
+    let singsong: JSONNull?
+    let submergement: JSONNull?
+    let supraoesophagal: JSONNull?
+    let thrashel: JSONNull?
+    let tyremesis: JSONNull?
+    let yoruba: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case arciform = "arciform"
+        case cresolin = "cresolin"
+        case disheartener = "disheartener"
+        case disproportionable = "disproportionable"
+        case euchorda = "Euchorda"
+        case ferryway = "ferryway"
+        case filamentiferous = "filamentiferous"
+        case flemish = "flemish"
+        case forgainst = "forgainst"
+        case grainering = "grainering"
+        case irrevoluble = "irrevoluble"
+        case kindredship = "kindredship"
+        case pinguitudinous = "pinguitudinous"
+        case simpletonic = "simpletonic"
+        case singsong = "singsong"
+        case submergement = "submergement"
+        case supraoesophagal = "supraoesophagal"
+        case thrashel = "thrashel"
+        case tyremesis = "tyremesis"
+        case yoruba = "Yoruba"
+    }
+}
+
+// MARK: PotwhiskyClass convenience initializers and mutators
+
+extension PotwhiskyClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(PotwhiskyClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        arciform: JSONNull?? = nil,
+        cresolin: JSONNull?? = nil,
+        disheartener: JSONNull?? = nil,
+        disproportionable: JSONNull?? = nil,
+        euchorda: JSONNull?? = nil,
+        ferryway: JSONNull?? = nil,
+        filamentiferous: JSONNull?? = nil,
+        flemish: JSONNull?? = nil,
+        forgainst: JSONNull?? = nil,
+        grainering: JSONNull?? = nil,
+        irrevoluble: JSONNull?? = nil,
+        kindredship: JSONNull?? = nil,
+        pinguitudinous: JSONNull?? = nil,
+        simpletonic: JSONNull?? = nil,
+        singsong: JSONNull?? = nil,
+        submergement: JSONNull?? = nil,
+        supraoesophagal: JSONNull?? = nil,
+        thrashel: JSONNull?? = nil,
+        tyremesis: JSONNull?? = nil,
+        yoruba: JSONNull?? = nil
+    ) -> PotwhiskyClass {
+        return PotwhiskyClass(
+            arciform: arciform ?? self.arciform,
+            cresolin: cresolin ?? self.cresolin,
+            disheartener: disheartener ?? self.disheartener,
+            disproportionable: disproportionable ?? self.disproportionable,
+            euchorda: euchorda ?? self.euchorda,
+            ferryway: ferryway ?? self.ferryway,
+            filamentiferous: filamentiferous ?? self.filamentiferous,
+            flemish: flemish ?? self.flemish,
+            forgainst: forgainst ?? self.forgainst,
+            grainering: grainering ?? self.grainering,
+            irrevoluble: irrevoluble ?? self.irrevoluble,
+            kindredship: kindredship ?? self.kindredship,
+            pinguitudinous: pinguitudinous ?? self.pinguitudinous,
+            simpletonic: simpletonic ?? self.simpletonic,
+            singsong: singsong ?? self.singsong,
+            submergement: submergement ?? self.submergement,
+            supraoesophagal: supraoesophagal ?? self.supraoesophagal,
+            thrashel: thrashel ?? self.thrashel,
+            tyremesis: tyremesis ?? self.tyremesis,
+            yoruba: yoruba ?? self.yoruba
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Practicalizer: Codable, Hashable {
+    case monaziteClass(MonaziteClass)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Practicalizer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Practicalizer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .monaziteClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum PrefreshmanElement: Codable, Hashable {
+    case nullArray([JSONNull?])
+    case prefreshmanClass(PrefreshmanClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(PrefreshmanClass.self) {
+            self = .prefreshmanClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(PrefreshmanElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PrefreshmanElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .prefreshmanClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - PrefreshmanClass
+struct PrefreshmanClass: Codable, Hashable {
+    let azorubine: JSONNull?
+    let choroiditis: JSONNull?
+    let coagulatory: JSONNull?
+    let cyclorama: JSONNull?
+    let dolphus: JSONNull?
+    let duckhearted: JSONNull?
+    let ficus: JSONNull?
+    let gemaric: JSONNull?
+    let jugation: JSONNull?
+    let myoliposis: JSONNull?
+    let nonnomination: JSONNull?
+    let palay: JSONNull?
+    let pentactinal: JSONNull?
+    let phaet: JSONNull?
+    let piquant: JSONNull?
+    let registration: JSONNull?
+    let remancipation: JSONNull?
+    let scutatiform: JSONNull?
+    let theodolite: JSONNull?
+    let underward: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case azorubine = "azorubine"
+        case choroiditis = "choroiditis"
+        case coagulatory = "coagulatory"
+        case cyclorama = "cyclorama"
+        case dolphus = "Dolphus"
+        case duckhearted = "duckhearted"
+        case ficus = "Ficus"
+        case gemaric = "Gemaric"
+        case jugation = "jugation"
+        case myoliposis = "myoliposis"
+        case nonnomination = "nonnomination"
+        case palay = "palay"
+        case pentactinal = "pentactinal"
+        case phaet = "Phaet"
+        case piquant = "piquant"
+        case registration = "registration"
+        case remancipation = "remancipation"
+        case scutatiform = "scutatiform"
+        case theodolite = "theodolite"
+        case underward = "underward"
+    }
+}
+
+// MARK: PrefreshmanClass convenience initializers and mutators
+
+extension PrefreshmanClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(PrefreshmanClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        azorubine: JSONNull?? = nil,
+        choroiditis: JSONNull?? = nil,
+        coagulatory: JSONNull?? = nil,
+        cyclorama: JSONNull?? = nil,
+        dolphus: JSONNull?? = nil,
+        duckhearted: JSONNull?? = nil,
+        ficus: JSONNull?? = nil,
+        gemaric: JSONNull?? = nil,
+        jugation: JSONNull?? = nil,
+        myoliposis: JSONNull?? = nil,
+        nonnomination: JSONNull?? = nil,
+        palay: JSONNull?? = nil,
+        pentactinal: JSONNull?? = nil,
+        phaet: JSONNull?? = nil,
+        piquant: JSONNull?? = nil,
+        registration: JSONNull?? = nil,
+        remancipation: JSONNull?? = nil,
+        scutatiform: JSONNull?? = nil,
+        theodolite: JSONNull?? = nil,
+        underward: JSONNull?? = nil
+    ) -> PrefreshmanClass {
+        return PrefreshmanClass(
+            azorubine: azorubine ?? self.azorubine,
+            choroiditis: choroiditis ?? self.choroiditis,
+            coagulatory: coagulatory ?? self.coagulatory,
+            cyclorama: cyclorama ?? self.cyclorama,
+            dolphus: dolphus ?? self.dolphus,
+            duckhearted: duckhearted ?? self.duckhearted,
+            ficus: ficus ?? self.ficus,
+            gemaric: gemaric ?? self.gemaric,
+            jugation: jugation ?? self.jugation,
+            myoliposis: myoliposis ?? self.myoliposis,
+            nonnomination: nonnomination ?? self.nonnomination,
+            palay: palay ?? self.palay,
+            pentactinal: pentactinal ?? self.pentactinal,
+            phaet: phaet ?? self.phaet,
+            piquant: piquant ?? self.piquant,
+            registration: registration ?? self.registration,
+            remancipation: remancipation ?? self.remancipation,
+            scutatiform: scutatiform ?? self.scutatiform,
+            theodolite: theodolite ?? self.theodolite,
+            underward: underward ?? self.underward
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Prehensility: Codable, Hashable {
+    case bool(Bool)
+    case monaziteClass(MonaziteClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Prehensility.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Prehensility"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Prevoidance: Codable, Hashable {
+    case integer(Int)
+    case integerArray([Int])
+    case monaziteClass(MonaziteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Prevoidance.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Prevoidance"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Protext: Codable, Hashable {
+    case bool(Bool)
+    case integerArray([Int])
+    case monaziteClass(MonaziteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Protext.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Protext"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+class JSONNull: Codable, Hashable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    public func hash(into hasher: inout Hasher) {
+        hasher.combine(0)
+    }
+
+    public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/head/swift/test/inputs/json/priority/combinations3.json/sendable-true--1c3982c78639/quicktype.swift b/head/swift/test/inputs/json/priority/combinations3.json/sendable-true--1c3982c78639/quicktype.swift
new file mode 100644
index 0000000..46f0024
--- /dev/null
+++ b/head/swift/test/inputs/json/priority/combinations3.json/sendable-true--1c3982c78639/quicktype.swift
@@ -0,0 +1,3137 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+import Foundation
+
+// MARK: - TopLevel
+struct TopLevel: Codable, Sendable {
+    let juror: [JurorElement]
+    let kongoni: [Kongoni]
+    let ladronism: [LadronismElement]
+    let landlubberly: [LandlubberlyElement]
+    let listener: [Listener]
+    let lupus: [LupusElement]
+    let maslin: [Maslin]
+    let monazite: [MonaziteElement]
+    let monoliteral: [Monoliteral]
+    let monotheistically: [MonotheisticallyElement]
+    let montage: [Montage]
+    let moralness: [Moralness]
+    let mowra: [MonaziteClass?]
+    let mulishly: [Mulishly]
+    let myoscope: [Myoscope]
+    let nach: [[Int?]?]
+    let neuromastic: [Neuromastic]
+    let noncontributing: [Noncontributing]
+    let nonnervous: [Nonnervous]
+    let nonvaluation: [Nonvaluation]
+    let occupationalist: [OccupationalistElement]
+    let outrival: [OutrivalElement]
+    let paleographically: [Paleographically]
+    let pamphletwise: [Pamphletwise]
+    let pediatrics: [Pediatric]
+    let perceptive: [Bool]
+    let piaculum: [PiaculumElement]
+    let piccadilly: [Piccadilly]
+    let piffler: [Piffler]
+    let pithful: [Pithful]
+    let placuntitis: [Placuntiti]
+    let plectopterous: [Plectopterous]
+    let pneumocele: [Pneumocele?]
+    let poliorcetic: [Poliorcetic]
+    let poormaster: [Poormaster]
+    let potwhisky: [PotwhiskyElement]
+    let practicalizer: [Practicalizer]
+    let prefreshman: [PrefreshmanElement]
+    let prehensility: [Prehensility]
+    let prevoidance: [Prevoidance]
+    let probant: [[String: Int?]]
+    let protext: [Protext]
+
+    enum CodingKeys: String, CodingKey {
+        case juror = "juror"
+        case kongoni = "kongoni"
+        case ladronism = "ladronism"
+        case landlubberly = "landlubberly"
+        case listener = "listener"
+        case lupus = "lupus"
+        case maslin = "maslin"
+        case monazite = "monazite"
+        case monoliteral = "monoliteral"
+        case monotheistically = "monotheistically"
+        case montage = "montage"
+        case moralness = "moralness"
+        case mowra = "mowra"
+        case mulishly = "mulishly"
+        case myoscope = "myoscope"
+        case nach = "nach"
+        case neuromastic = "neuromastic"
+        case noncontributing = "noncontributing"
+        case nonnervous = "nonnervous"
+        case nonvaluation = "nonvaluation"
+        case occupationalist = "occupationalist"
+        case outrival = "outrival"
+        case paleographically = "paleographically"
+        case pamphletwise = "pamphletwise"
+        case pediatrics = "pediatrics"
+        case perceptive = "perceptive"
+        case piaculum = "piaculum"
+        case piccadilly = "piccadilly"
+        case piffler = "piffler"
+        case pithful = "pithful"
+        case placuntitis = "placuntitis"
+        case plectopterous = "plectopterous"
+        case pneumocele = "pneumocele"
+        case poliorcetic = "poliorcetic"
+        case poormaster = "poormaster"
+        case potwhisky = "potwhisky"
+        case practicalizer = "practicalizer"
+        case prefreshman = "prefreshman"
+        case prehensility = "prehensility"
+        case prevoidance = "prevoidance"
+        case probant = "probant"
+        case protext = "protext"
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(TopLevel.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        juror: [JurorElement]? = nil,
+        kongoni: [Kongoni]? = nil,
+        ladronism: [LadronismElement]? = nil,
+        landlubberly: [LandlubberlyElement]? = nil,
+        listener: [Listener]? = nil,
+        lupus: [LupusElement]? = nil,
+        maslin: [Maslin]? = nil,
+        monazite: [MonaziteElement]? = nil,
+        monoliteral: [Monoliteral]? = nil,
+        monotheistically: [MonotheisticallyElement]? = nil,
+        montage: [Montage]? = nil,
+        moralness: [Moralness]? = nil,
+        mowra: [MonaziteClass?]? = nil,
+        mulishly: [Mulishly]? = nil,
+        myoscope: [Myoscope]? = nil,
+        nach: [[Int?]?]? = nil,
+        neuromastic: [Neuromastic]? = nil,
+        noncontributing: [Noncontributing]? = nil,
+        nonnervous: [Nonnervous]? = nil,
+        nonvaluation: [Nonvaluation]? = nil,
+        occupationalist: [OccupationalistElement]? = nil,
+        outrival: [OutrivalElement]? = nil,
+        paleographically: [Paleographically]? = nil,
+        pamphletwise: [Pamphletwise]? = nil,
+        pediatrics: [Pediatric]? = nil,
+        perceptive: [Bool]? = nil,
+        piaculum: [PiaculumElement]? = nil,
+        piccadilly: [Piccadilly]? = nil,
+        piffler: [Piffler]? = nil,
+        pithful: [Pithful]? = nil,
+        placuntitis: [Placuntiti]? = nil,
+        plectopterous: [Plectopterous]? = nil,
+        pneumocele: [Pneumocele?]? = nil,
+        poliorcetic: [Poliorcetic]? = nil,
+        poormaster: [Poormaster]? = nil,
+        potwhisky: [PotwhiskyElement]? = nil,
+        practicalizer: [Practicalizer]? = nil,
+        prefreshman: [PrefreshmanElement]? = nil,
+        prehensility: [Prehensility]? = nil,
+        prevoidance: [Prevoidance]? = nil,
+        probant: [[String: Int?]]? = nil,
+        protext: [Protext]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            juror: juror ?? self.juror,
+            kongoni: kongoni ?? self.kongoni,
+            ladronism: ladronism ?? self.ladronism,
+            landlubberly: landlubberly ?? self.landlubberly,
+            listener: listener ?? self.listener,
+            lupus: lupus ?? self.lupus,
+            maslin: maslin ?? self.maslin,
+            monazite: monazite ?? self.monazite,
+            monoliteral: monoliteral ?? self.monoliteral,
+            monotheistically: monotheistically ?? self.monotheistically,
+            montage: montage ?? self.montage,
+            moralness: moralness ?? self.moralness,
+            mowra: mowra ?? self.mowra,
+            mulishly: mulishly ?? self.mulishly,
+            myoscope: myoscope ?? self.myoscope,
+            nach: nach ?? self.nach,
+            neuromastic: neuromastic ?? self.neuromastic,
+            noncontributing: noncontributing ?? self.noncontributing,
+            nonnervous: nonnervous ?? self.nonnervous,
+            nonvaluation: nonvaluation ?? self.nonvaluation,
+            occupationalist: occupationalist ?? self.occupationalist,
+            outrival: outrival ?? self.outrival,
+            paleographically: paleographically ?? self.paleographically,
+            pamphletwise: pamphletwise ?? self.pamphletwise,
+            pediatrics: pediatrics ?? self.pediatrics,
+            perceptive: perceptive ?? self.perceptive,
+            piaculum: piaculum ?? self.piaculum,
+            piccadilly: piccadilly ?? self.piccadilly,
+            piffler: piffler ?? self.piffler,
+            pithful: pithful ?? self.pithful,
+            placuntitis: placuntitis ?? self.placuntitis,
+            plectopterous: plectopterous ?? self.plectopterous,
+            pneumocele: pneumocele ?? self.pneumocele,
+            poliorcetic: poliorcetic ?? self.poliorcetic,
+            poormaster: poormaster ?? self.poormaster,
+            potwhisky: potwhisky ?? self.potwhisky,
+            practicalizer: practicalizer ?? self.practicalizer,
+            prefreshman: prefreshman ?? self.prefreshman,
+            prehensility: prehensility ?? self.prehensility,
+            prevoidance: prevoidance ?? self.prevoidance,
+            probant: probant ?? self.probant,
+            protext: protext ?? self.protext
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum JurorElement: Codable, Sendable {
+    case bool(Bool)
+    case jurorClass(JurorClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(JurorClass.self) {
+            self = .jurorClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(JurorElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JurorElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .jurorClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - JurorClass
+struct JurorClass: Codable, Sendable {
+    let adipsy: JSONNull?
+    let auxiliator: JSONNull?
+    let benda: JSONNull?
+    let benjamin: JSONNull?
+    let brandling: JSONNull?
+    let epicurishly: JSONNull?
+    let eremochaetous: JSONNull?
+    let marten: JSONNull?
+    let monocline: JSONNull?
+    let olea: JSONNull?
+    let palgat: JSONNull?
+    let pennyworth: JSONNull?
+    let pioury: JSONNull?
+    let pragmatistic: JSONNull?
+    let stylelessness: JSONNull?
+    let systematical: JSONNull?
+    let thready: JSONNull?
+    let uncontemporary: JSONNull?
+    let uncouched: JSONNull?
+    let uninhabitedness: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case adipsy = "adipsy"
+        case auxiliator = "auxiliator"
+        case benda = "benda"
+        case benjamin = "benjamin"
+        case brandling = "brandling"
+        case epicurishly = "epicurishly"
+        case eremochaetous = "eremochaetous"
+        case marten = "marten"
+        case monocline = "monocline"
+        case olea = "Olea"
+        case palgat = "palgat"
+        case pennyworth = "pennyworth"
+        case pioury = "pioury"
+        case pragmatistic = "pragmatistic"
+        case stylelessness = "stylelessness"
+        case systematical = "systematical"
+        case thready = "thready"
+        case uncontemporary = "uncontemporary"
+        case uncouched = "uncouched"
+        case uninhabitedness = "uninhabitedness"
+    }
+}
+
+// MARK: JurorClass convenience initializers and mutators
+
+extension JurorClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(JurorClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        adipsy: JSONNull?? = nil,
+        auxiliator: JSONNull?? = nil,
+        benda: JSONNull?? = nil,
+        benjamin: JSONNull?? = nil,
+        brandling: JSONNull?? = nil,
+        epicurishly: JSONNull?? = nil,
+        eremochaetous: JSONNull?? = nil,
+        marten: JSONNull?? = nil,
+        monocline: JSONNull?? = nil,
+        olea: JSONNull?? = nil,
+        palgat: JSONNull?? = nil,
+        pennyworth: JSONNull?? = nil,
+        pioury: JSONNull?? = nil,
+        pragmatistic: JSONNull?? = nil,
+        stylelessness: JSONNull?? = nil,
+        systematical: JSONNull?? = nil,
+        thready: JSONNull?? = nil,
+        uncontemporary: JSONNull?? = nil,
+        uncouched: JSONNull?? = nil,
+        uninhabitedness: JSONNull?? = nil
+    ) -> JurorClass {
+        return JurorClass(
+            adipsy: adipsy ?? self.adipsy,
+            auxiliator: auxiliator ?? self.auxiliator,
+            benda: benda ?? self.benda,
+            benjamin: benjamin ?? self.benjamin,
+            brandling: brandling ?? self.brandling,
+            epicurishly: epicurishly ?? self.epicurishly,
+            eremochaetous: eremochaetous ?? self.eremochaetous,
+            marten: marten ?? self.marten,
+            monocline: monocline ?? self.monocline,
+            olea: olea ?? self.olea,
+            palgat: palgat ?? self.palgat,
+            pennyworth: pennyworth ?? self.pennyworth,
+            pioury: pioury ?? self.pioury,
+            pragmatistic: pragmatistic ?? self.pragmatistic,
+            stylelessness: stylelessness ?? self.stylelessness,
+            systematical: systematical ?? self.systematical,
+            thready: thready ?? self.thready,
+            uncontemporary: uncontemporary ?? self.uncontemporary,
+            uncouched: uncouched ?? self.uncouched,
+            uninhabitedness: uninhabitedness ?? self.uninhabitedness
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Kongoni: Codable, Sendable {
+    case integerArray([Int])
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Kongoni.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Kongoni"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum LadronismElement: Codable, Sendable {
+    case double(Double)
+    case ladronismClass(LadronismClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(LadronismClass.self) {
+            self = .ladronismClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(LadronismElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LadronismElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .ladronismClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - LadronismClass
+struct LadronismClass: Codable, Sendable {
+    let acclaimer: JSONNull?
+    let achree: JSONNull?
+    let base: JSONNull?
+    let conundrumize: JSONNull?
+    let degerminator: JSONNull?
+    let describable: JSONNull?
+    let exasperatedly: JSONNull?
+    let heroine: JSONNull?
+    let indazin: JSONNull?
+    let luteous: JSONNull?
+    let papular: JSONNull?
+    let pritch: JSONNull?
+    let prodenia: JSONNull?
+    let seege: JSONNull?
+    let shopgirl: JSONNull?
+    let tragedietta: JSONNull?
+    let unsparse: JSONNull?
+    let uplook: JSONNull?
+    let vermiformis: JSONNull?
+    let whafabout: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acclaimer = "acclaimer"
+        case achree = "achree"
+        case base = "base"
+        case conundrumize = "conundrumize"
+        case degerminator = "degerminator"
+        case describable = "describable"
+        case exasperatedly = "exasperatedly"
+        case heroine = "heroine"
+        case indazin = "indazin"
+        case luteous = "luteous"
+        case papular = "papular"
+        case pritch = "pritch"
+        case prodenia = "Prodenia"
+        case seege = "seege"
+        case shopgirl = "shopgirl"
+        case tragedietta = "tragedietta"
+        case unsparse = "unsparse"
+        case uplook = "uplook"
+        case vermiformis = "vermiformis"
+        case whafabout = "whafabout"
+    }
+}
+
+// MARK: LadronismClass convenience initializers and mutators
+
+extension LadronismClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(LadronismClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acclaimer: JSONNull?? = nil,
+        achree: JSONNull?? = nil,
+        base: JSONNull?? = nil,
+        conundrumize: JSONNull?? = nil,
+        degerminator: JSONNull?? = nil,
+        describable: JSONNull?? = nil,
+        exasperatedly: JSONNull?? = nil,
+        heroine: JSONNull?? = nil,
+        indazin: JSONNull?? = nil,
+        luteous: JSONNull?? = nil,
+        papular: JSONNull?? = nil,
+        pritch: JSONNull?? = nil,
+        prodenia: JSONNull?? = nil,
+        seege: JSONNull?? = nil,
+        shopgirl: JSONNull?? = nil,
+        tragedietta: JSONNull?? = nil,
+        unsparse: JSONNull?? = nil,
+        uplook: JSONNull?? = nil,
+        vermiformis: JSONNull?? = nil,
+        whafabout: JSONNull?? = nil
+    ) -> LadronismClass {
+        return LadronismClass(
+            acclaimer: acclaimer ?? self.acclaimer,
+            achree: achree ?? self.achree,
+            base: base ?? self.base,
+            conundrumize: conundrumize ?? self.conundrumize,
+            degerminator: degerminator ?? self.degerminator,
+            describable: describable ?? self.describable,
+            exasperatedly: exasperatedly ?? self.exasperatedly,
+            heroine: heroine ?? self.heroine,
+            indazin: indazin ?? self.indazin,
+            luteous: luteous ?? self.luteous,
+            papular: papular ?? self.papular,
+            pritch: pritch ?? self.pritch,
+            prodenia: prodenia ?? self.prodenia,
+            seege: seege ?? self.seege,
+            shopgirl: shopgirl ?? self.shopgirl,
+            tragedietta: tragedietta ?? self.tragedietta,
+            unsparse: unsparse ?? self.unsparse,
+            uplook: uplook ?? self.uplook,
+            vermiformis: vermiformis ?? self.vermiformis,
+            whafabout: whafabout ?? self.whafabout
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum LandlubberlyElement: Codable, Sendable {
+    case bool(Bool)
+    case integer(Int)
+    case landlubberlyClass(LandlubberlyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(LandlubberlyClass.self) {
+            self = .landlubberlyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(LandlubberlyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LandlubberlyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .landlubberlyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - LandlubberlyClass
+struct LandlubberlyClass: Codable, Sendable {
+    let acropoleis: JSONNull?
+    let aminate: JSONNull?
+    let amyraldism: JSONNull?
+    let bipenniform: JSONNull?
+    let bugre: JSONNull?
+    let calycule: JSONNull?
+    let caoutchouc: JSONNull?
+    let disprover: JSONNull?
+    let fitroot: JSONNull?
+    let fulgently: JSONNull?
+    let kickup: JSONNull?
+    let laevoversion: JSONNull?
+    let moter: JSONNull?
+    let objectivity: JSONNull?
+    let posterity: JSONNull?
+    let postnuptial: JSONNull?
+    let precedentary: JSONNull?
+    let saddling: JSONNull?
+    let subcurrent: JSONNull?
+    let unrecriminative: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acropoleis = "acropoleis"
+        case aminate = "aminate"
+        case amyraldism = "Amyraldism"
+        case bipenniform = "bipenniform"
+        case bugre = "bugre"
+        case calycule = "calycule"
+        case caoutchouc = "caoutchouc"
+        case disprover = "disprover"
+        case fitroot = "fitroot"
+        case fulgently = "fulgently"
+        case kickup = "kickup"
+        case laevoversion = "laevoversion"
+        case moter = "moter"
+        case objectivity = "objectivity"
+        case posterity = "posterity"
+        case postnuptial = "postnuptial"
+        case precedentary = "precedentary"
+        case saddling = "saddling"
+        case subcurrent = "subcurrent"
+        case unrecriminative = "unrecriminative"
+    }
+}
+
+// MARK: LandlubberlyClass convenience initializers and mutators
+
+extension LandlubberlyClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(LandlubberlyClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acropoleis: JSONNull?? = nil,
+        aminate: JSONNull?? = nil,
+        amyraldism: JSONNull?? = nil,
+        bipenniform: JSONNull?? = nil,
+        bugre: JSONNull?? = nil,
+        calycule: JSONNull?? = nil,
+        caoutchouc: JSONNull?? = nil,
+        disprover: JSONNull?? = nil,
+        fitroot: JSONNull?? = nil,
+        fulgently: JSONNull?? = nil,
+        kickup: JSONNull?? = nil,
+        laevoversion: JSONNull?? = nil,
+        moter: JSONNull?? = nil,
+        objectivity: JSONNull?? = nil,
+        posterity: JSONNull?? = nil,
+        postnuptial: JSONNull?? = nil,
+        precedentary: JSONNull?? = nil,
+        saddling: JSONNull?? = nil,
+        subcurrent: JSONNull?? = nil,
+        unrecriminative: JSONNull?? = nil
+    ) -> LandlubberlyClass {
+        return LandlubberlyClass(
+            acropoleis: acropoleis ?? self.acropoleis,
+            aminate: aminate ?? self.aminate,
+            amyraldism: amyraldism ?? self.amyraldism,
+            bipenniform: bipenniform ?? self.bipenniform,
+            bugre: bugre ?? self.bugre,
+            calycule: calycule ?? self.calycule,
+            caoutchouc: caoutchouc ?? self.caoutchouc,
+            disprover: disprover ?? self.disprover,
+            fitroot: fitroot ?? self.fitroot,
+            fulgently: fulgently ?? self.fulgently,
+            kickup: kickup ?? self.kickup,
+            laevoversion: laevoversion ?? self.laevoversion,
+            moter: moter ?? self.moter,
+            objectivity: objectivity ?? self.objectivity,
+            posterity: posterity ?? self.posterity,
+            postnuptial: postnuptial ?? self.postnuptial,
+            precedentary: precedentary ?? self.precedentary,
+            saddling: saddling ?? self.saddling,
+            subcurrent: subcurrent ?? self.subcurrent,
+            unrecriminative: unrecriminative ?? self.unrecriminative
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Listener: Codable, Sendable {
+    case integer(Int)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Listener.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Listener"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum LupusElement: Codable, Sendable {
+    case integer(Int)
+    case lupusClass(LupusClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(LupusClass.self) {
+            self = .lupusClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(LupusElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LupusElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .lupusClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - LupusClass
+struct LupusClass: Codable, Sendable {
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let chlorioninae: Int?
+    let corvinae: Int?
+    let crassina: Int?
+    let disdiapason: String?
+    let exiguity: Int?
+    let farcist: Int?
+    let holographical: Int?
+    let homocerc: Bool?
+    let ichthyophagan: Int?
+    let implacable: Int?
+    let nonbookish: JSONNull?
+    let outshiner: Int?
+    let overweather: Int?
+    let protonegroid: Int?
+    let shallowish: Int?
+    let snoke: Int?
+    let snout: Int?
+    let surveillance: Int?
+    let threshingtime: Int?
+    let thysanocarpus: Int?
+    let unsignificantly: Int?
+    let unsnap: Int?
+    let vendible: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case chlorioninae = "Chlorioninae"
+        case corvinae = "Corvinae"
+        case crassina = "Crassina"
+        case disdiapason = "disdiapason"
+        case exiguity = "exiguity"
+        case farcist = "farcist"
+        case holographical = "holographical"
+        case homocerc = "homocerc"
+        case ichthyophagan = "ichthyophagan"
+        case implacable = "implacable"
+        case nonbookish = "nonbookish"
+        case outshiner = "outshiner"
+        case overweather = "overweather"
+        case protonegroid = "protonegroid"
+        case shallowish = "shallowish"
+        case snoke = "snoke"
+        case snout = "snout"
+        case surveillance = "surveillance"
+        case threshingtime = "threshingtime"
+        case thysanocarpus = "Thysanocarpus"
+        case unsignificantly = "unsignificantly"
+        case unsnap = "unsnap"
+        case vendible = "vendible"
+    }
+}
+
+// MARK: LupusClass convenience initializers and mutators
+
+extension LupusClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(LupusClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        chlorioninae: Int?? = nil,
+        corvinae: Int?? = nil,
+        crassina: Int?? = nil,
+        disdiapason: String?? = nil,
+        exiguity: Int?? = nil,
+        farcist: Int?? = nil,
+        holographical: Int?? = nil,
+        homocerc: Bool?? = nil,
+        ichthyophagan: Int?? = nil,
+        implacable: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        outshiner: Int?? = nil,
+        overweather: Int?? = nil,
+        protonegroid: Int?? = nil,
+        shallowish: Int?? = nil,
+        snoke: Int?? = nil,
+        snout: Int?? = nil,
+        surveillance: Int?? = nil,
+        threshingtime: Int?? = nil,
+        thysanocarpus: Int?? = nil,
+        unsignificantly: Int?? = nil,
+        unsnap: Int?? = nil,
+        vendible: Int?? = nil
+    ) -> LupusClass {
+        return LupusClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chlorioninae: chlorioninae ?? self.chlorioninae,
+            corvinae: corvinae ?? self.corvinae,
+            crassina: crassina ?? self.crassina,
+            disdiapason: disdiapason ?? self.disdiapason,
+            exiguity: exiguity ?? self.exiguity,
+            farcist: farcist ?? self.farcist,
+            holographical: holographical ?? self.holographical,
+            homocerc: homocerc ?? self.homocerc,
+            ichthyophagan: ichthyophagan ?? self.ichthyophagan,
+            implacable: implacable ?? self.implacable,
+            nonbookish: nonbookish ?? self.nonbookish,
+            outshiner: outshiner ?? self.outshiner,
+            overweather: overweather ?? self.overweather,
+            protonegroid: protonegroid ?? self.protonegroid,
+            shallowish: shallowish ?? self.shallowish,
+            snoke: snoke ?? self.snoke,
+            snout: snout ?? self.snout,
+            surveillance: surveillance ?? self.surveillance,
+            threshingtime: threshingtime ?? self.threshingtime,
+            thysanocarpus: thysanocarpus ?? self.thysanocarpus,
+            unsignificantly: unsignificantly ?? self.unsignificantly,
+            unsnap: unsnap ?? self.unsnap,
+            vendible: vendible ?? self.vendible
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Maslin
+struct Maslin: Codable, Sendable {
+    let alicant: Int?
+    let antiatonement: JSONNull?
+    let anticorrosive: Int?
+    let aphidozer: JSONNull?
+    let bakuninist: JSONNull?
+    let be: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let chub: Int?
+    let cuprosilicon: Int?
+    let curtailedly: Int?
+    let dellenite: Int?
+    let dimitry: Int?
+    let disdiapason: String?
+    let edifying: JSONNull?
+    let ethmoiditis: Int?
+    let gastralgy: JSONNull?
+    let goatherd: Int?
+    let hammerdress: Int?
+    let hangfire: JSONNull?
+    let homocerc: Bool?
+    let lacunosity: Int?
+    let longiloquence: JSONNull?
+    let mameliere: Int?
+    let motherless: JSONNull?
+    let nonbookish: JSONNull?
+    let noncorrodible: JSONNull?
+    let nonsensicality: JSONNull?
+    let oafishly: Int?
+    let pfund: JSONNull?
+    let preadvisory: JSONNull?
+    let retroflexed: JSONNull?
+    let saccharulmic: Int?
+    let scowlful: Int?
+    let secluded: JSONNull?
+    let slackage: JSONNull?
+    let sphaeridial: Int?
+    let spondulics: JSONNull?
+    let subsecive: Int?
+    let swellmobsman: JSONNull?
+    let trachyglossate: Int?
+    let trialogue: JSONNull?
+    let unassuaged: Int?
+    let ungross: JSONNull?
+    let unjudiciously: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case alicant = "Alicant"
+        case antiatonement = "antiatonement"
+        case anticorrosive = "anticorrosive"
+        case aphidozer = "aphidozer"
+        case bakuninist = "Bakuninist"
+        case be = "be"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case chub = "chub"
+        case cuprosilicon = "cuprosilicon"
+        case curtailedly = "curtailedly"
+        case dellenite = "dellenite"
+        case dimitry = "Dimitry"
+        case disdiapason = "disdiapason"
+        case edifying = "edifying"
+        case ethmoiditis = "ethmoiditis"
+        case gastralgy = "gastralgy"
+        case goatherd = "goatherd"
+        case hammerdress = "hammerdress"
+        case hangfire = "hangfire"
+        case homocerc = "homocerc"
+        case lacunosity = "lacunosity"
+        case longiloquence = "longiloquence"
+        case mameliere = "mameliere"
+        case motherless = "motherless"
+        case nonbookish = "nonbookish"
+        case noncorrodible = "noncorrodible"
+        case nonsensicality = "nonsensicality"
+        case oafishly = "oafishly"
+        case pfund = "pfund"
+        case preadvisory = "preadvisory"
+        case retroflexed = "retroflexed"
+        case saccharulmic = "saccharulmic"
+        case scowlful = "scowlful"
+        case secluded = "secluded"
+        case slackage = "slackage"
+        case sphaeridial = "sphaeridial"
+        case spondulics = "spondulics"
+        case subsecive = "subsecive"
+        case swellmobsman = "swellmobsman"
+        case trachyglossate = "trachyglossate"
+        case trialogue = "trialogue"
+        case unassuaged = "unassuaged"
+        case ungross = "ungross"
+        case unjudiciously = "unjudiciously"
+    }
+}
+
+// MARK: Maslin convenience initializers and mutators
+
+extension Maslin {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Maslin.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        alicant: Int?? = nil,
+        antiatonement: JSONNull?? = nil,
+        anticorrosive: Int?? = nil,
+        aphidozer: JSONNull?? = nil,
+        bakuninist: JSONNull?? = nil,
+        be: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        chub: Int?? = nil,
+        cuprosilicon: Int?? = nil,
+        curtailedly: Int?? = nil,
+        dellenite: Int?? = nil,
+        dimitry: Int?? = nil,
+        disdiapason: String?? = nil,
+        edifying: JSONNull?? = nil,
+        ethmoiditis: Int?? = nil,
+        gastralgy: JSONNull?? = nil,
+        goatherd: Int?? = nil,
+        hammerdress: Int?? = nil,
+        hangfire: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        lacunosity: Int?? = nil,
+        longiloquence: JSONNull?? = nil,
+        mameliere: Int?? = nil,
+        motherless: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        noncorrodible: JSONNull?? = nil,
+        nonsensicality: JSONNull?? = nil,
+        oafishly: Int?? = nil,
+        pfund: JSONNull?? = nil,
+        preadvisory: JSONNull?? = nil,
+        retroflexed: JSONNull?? = nil,
+        saccharulmic: Int?? = nil,
+        scowlful: Int?? = nil,
+        secluded: JSONNull?? = nil,
+        slackage: JSONNull?? = nil,
+        sphaeridial: Int?? = nil,
+        spondulics: JSONNull?? = nil,
+        subsecive: Int?? = nil,
+        swellmobsman: JSONNull?? = nil,
+        trachyglossate: Int?? = nil,
+        trialogue: JSONNull?? = nil,
+        unassuaged: Int?? = nil,
+        ungross: JSONNull?? = nil,
+        unjudiciously: JSONNull?? = nil
+    ) -> Maslin {
+        return Maslin(
+            alicant: alicant ?? self.alicant,
+            antiatonement: antiatonement ?? self.antiatonement,
+            anticorrosive: anticorrosive ?? self.anticorrosive,
+            aphidozer: aphidozer ?? self.aphidozer,
+            bakuninist: bakuninist ?? self.bakuninist,
+            be: be ?? self.be,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chub: chub ?? self.chub,
+            cuprosilicon: cuprosilicon ?? self.cuprosilicon,
+            curtailedly: curtailedly ?? self.curtailedly,
+            dellenite: dellenite ?? self.dellenite,
+            dimitry: dimitry ?? self.dimitry,
+            disdiapason: disdiapason ?? self.disdiapason,
+            edifying: edifying ?? self.edifying,
+            ethmoiditis: ethmoiditis ?? self.ethmoiditis,
+            gastralgy: gastralgy ?? self.gastralgy,
+            goatherd: goatherd ?? self.goatherd,
+            hammerdress: hammerdress ?? self.hammerdress,
+            hangfire: hangfire ?? self.hangfire,
+            homocerc: homocerc ?? self.homocerc,
+            lacunosity: lacunosity ?? self.lacunosity,
+            longiloquence: longiloquence ?? self.longiloquence,
+            mameliere: mameliere ?? self.mameliere,
+            motherless: motherless ?? self.motherless,
+            nonbookish: nonbookish ?? self.nonbookish,
+            noncorrodible: noncorrodible ?? self.noncorrodible,
+            nonsensicality: nonsensicality ?? self.nonsensicality,
+            oafishly: oafishly ?? self.oafishly,
+            pfund: pfund ?? self.pfund,
+            preadvisory: preadvisory ?? self.preadvisory,
+            retroflexed: retroflexed ?? self.retroflexed,
+            saccharulmic: saccharulmic ?? self.saccharulmic,
+            scowlful: scowlful ?? self.scowlful,
+            secluded: secluded ?? self.secluded,
+            slackage: slackage ?? self.slackage,
+            sphaeridial: sphaeridial ?? self.sphaeridial,
+            spondulics: spondulics ?? self.spondulics,
+            subsecive: subsecive ?? self.subsecive,
+            swellmobsman: swellmobsman ?? self.swellmobsman,
+            trachyglossate: trachyglossate ?? self.trachyglossate,
+            trialogue: trialogue ?? self.trialogue,
+            unassuaged: unassuaged ?? self.unassuaged,
+            ungross: ungross ?? self.ungross,
+            unjudiciously: unjudiciously ?? self.unjudiciously
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum MonaziteElement: Codable, Sendable {
+    case double(Double)
+    case monaziteClass(MonaziteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(MonaziteElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for MonaziteElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - MonaziteClass
+struct MonaziteClass: Codable, Sendable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+}
+
+// MARK: MonaziteClass convenience initializers and mutators
+
+extension MonaziteClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(MonaziteClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> MonaziteClass {
+        return MonaziteClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Monoliteral: Codable, Sendable {
+    case bool(Bool)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Monoliteral.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Monoliteral"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum MonotheisticallyElement: Codable, Sendable {
+    case monotheisticallyClass(MonotheisticallyClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(MonotheisticallyClass.self) {
+            self = .monotheisticallyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(MonotheisticallyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for MonotheisticallyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .monotheisticallyClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - MonotheisticallyClass
+struct MonotheisticallyClass: Codable, Sendable {
+    let blaspheme: JSONNull?
+    let catharticalness: Double?
+    let celiosalpingectomy: JSONNull?
+    let chirotherium: Int?
+    let consummativeness: JSONNull?
+    let disdiapason: String?
+    let egestive: JSONNull?
+    let enchylema: JSONNull?
+    let gasconade: JSONNull?
+    let holidayer: JSONNull?
+    let homocerc: Bool?
+    let intuitionalism: JSONNull?
+    let lophiostomate: JSONNull?
+    let nonbookish: JSONNull?
+    let nonvolition: JSONNull?
+    let palatableness: JSONNull?
+    let pimpery: JSONNull?
+    let previolation: JSONNull?
+    let reconveyance: JSONNull?
+    let registership: JSONNull?
+    let rhyacolite: JSONNull?
+    let smithereens: JSONNull?
+    let superedification: JSONNull?
+    let trust: JSONNull?
+    let whitestone: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case blaspheme = "blaspheme"
+        case catharticalness = "catharticalness"
+        case celiosalpingectomy = "celiosalpingectomy"
+        case chirotherium = "Chirotherium"
+        case consummativeness = "consummativeness"
+        case disdiapason = "disdiapason"
+        case egestive = "egestive"
+        case enchylema = "enchylema"
+        case gasconade = "gasconade"
+        case holidayer = "holidayer"
+        case homocerc = "homocerc"
+        case intuitionalism = "intuitionalism"
+        case lophiostomate = "lophiostomate"
+        case nonbookish = "nonbookish"
+        case nonvolition = "nonvolition"
+        case palatableness = "palatableness"
+        case pimpery = "pimpery"
+        case previolation = "previolation"
+        case reconveyance = "reconveyance"
+        case registership = "registership"
+        case rhyacolite = "rhyacolite"
+        case smithereens = "smithereens"
+        case superedification = "superedification"
+        case trust = "trust"
+        case whitestone = "whitestone"
+    }
+}
+
+// MARK: MonotheisticallyClass convenience initializers and mutators
+
+extension MonotheisticallyClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(MonotheisticallyClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        blaspheme: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        celiosalpingectomy: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        consummativeness: JSONNull?? = nil,
+        disdiapason: String?? = nil,
+        egestive: JSONNull?? = nil,
+        enchylema: JSONNull?? = nil,
+        gasconade: JSONNull?? = nil,
+        holidayer: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        intuitionalism: JSONNull?? = nil,
+        lophiostomate: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        nonvolition: JSONNull?? = nil,
+        palatableness: JSONNull?? = nil,
+        pimpery: JSONNull?? = nil,
+        previolation: JSONNull?? = nil,
+        reconveyance: JSONNull?? = nil,
+        registership: JSONNull?? = nil,
+        rhyacolite: JSONNull?? = nil,
+        smithereens: JSONNull?? = nil,
+        superedification: JSONNull?? = nil,
+        trust: JSONNull?? = nil,
+        whitestone: JSONNull?? = nil
+    ) -> MonotheisticallyClass {
+        return MonotheisticallyClass(
+            blaspheme: blaspheme ?? self.blaspheme,
+            catharticalness: catharticalness ?? self.catharticalness,
+            celiosalpingectomy: celiosalpingectomy ?? self.celiosalpingectomy,
+            chirotherium: chirotherium ?? self.chirotherium,
+            consummativeness: consummativeness ?? self.consummativeness,
+            disdiapason: disdiapason ?? self.disdiapason,
+            egestive: egestive ?? self.egestive,
+            enchylema: enchylema ?? self.enchylema,
+            gasconade: gasconade ?? self.gasconade,
+            holidayer: holidayer ?? self.holidayer,
+            homocerc: homocerc ?? self.homocerc,
+            intuitionalism: intuitionalism ?? self.intuitionalism,
+            lophiostomate: lophiostomate ?? self.lophiostomate,
+            nonbookish: nonbookish ?? self.nonbookish,
+            nonvolition: nonvolition ?? self.nonvolition,
+            palatableness: palatableness ?? self.palatableness,
+            pimpery: pimpery ?? self.pimpery,
+            previolation: previolation ?? self.previolation,
+            reconveyance: reconveyance ?? self.reconveyance,
+            registership: registership ?? self.registership,
+            rhyacolite: rhyacolite ?? self.rhyacolite,
+            smithereens: smithereens ?? self.smithereens,
+            superedification: superedification ?? self.superedification,
+            trust: trust ?? self.trust,
+            whitestone: whitestone ?? self.whitestone
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Montage: Codable, Sendable {
+    case double(Double)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Montage.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Montage"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Moralness: Codable, Sendable {
+    case double(Double)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Moralness.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Moralness"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Mulishly: Codable, Sendable {
+    case double(Double)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Mulishly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Mulishly"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Myoscope: Codable, Sendable {
+    case bool(Bool)
+    case integer(Int)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Myoscope.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Myoscope"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Neuromastic: Codable, Sendable {
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Neuromastic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Neuromastic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Noncontributing
+struct Noncontributing: Codable, Sendable {
+    let estevin: String
+    let jolterhead: Double
+    let sauternes: Int
+    let sparsely: Bool
+    let unrequested: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case estevin = "estevin"
+        case jolterhead = "jolterhead"
+        case sauternes = "sauternes"
+        case sparsely = "sparsely"
+        case unrequested = "unrequested"
+    }
+}
+
+// MARK: Noncontributing convenience initializers and mutators
+
+extension Noncontributing {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Noncontributing.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        estevin: String? = nil,
+        jolterhead: Double? = nil,
+        sauternes: Int? = nil,
+        sparsely: Bool? = nil,
+        unrequested: JSONNull?? = nil
+    ) -> Noncontributing {
+        return Noncontributing(
+            estevin: estevin ?? self.estevin,
+            jolterhead: jolterhead ?? self.jolterhead,
+            sauternes: sauternes ?? self.sauternes,
+            sparsely: sparsely ?? self.sparsely,
+            unrequested: unrequested ?? self.unrequested
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Nonnervous: Codable, Sendable {
+    case bool(Bool)
+    case integer(Int)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Nonnervous.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Nonnervous"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Nonvaluation: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Nonvaluation.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Nonvaluation"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum OccupationalistElement: Codable, Sendable {
+    case nullArray([JSONNull?])
+    case occupationalistClass(OccupationalistClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(OccupationalistClass.self) {
+            self = .occupationalistClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(OccupationalistElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for OccupationalistElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .occupationalistClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - OccupationalistClass
+struct OccupationalistClass: Codable, Sendable {
+    let beholdable: JSONNull?
+    let brotuliform: JSONNull?
+    let chimakum: JSONNull?
+    let doodler: JSONNull?
+    let emulsin: JSONNull?
+    let fin: JSONNull?
+    let flourishing: JSONNull?
+    let flueless: JSONNull?
+    let furtively: JSONNull?
+    let gritter: JSONNull?
+    let interwish: JSONNull?
+    let monoxylic: JSONNull?
+    let myristic: JSONNull?
+    let nightwear: JSONNull?
+    let peruser: JSONNull?
+    let theoastrological: JSONNull?
+    let thumby: JSONNull?
+    let tingitid: JSONNull?
+    let trailless: JSONNull?
+    let unpocketed: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case beholdable = "beholdable"
+        case brotuliform = "brotuliform"
+        case chimakum = "Chimakum"
+        case doodler = "doodler"
+        case emulsin = "emulsin"
+        case fin = "Fin"
+        case flourishing = "flourishing"
+        case flueless = "flueless"
+        case furtively = "furtively"
+        case gritter = "gritter"
+        case interwish = "interwish"
+        case monoxylic = "monoxylic"
+        case myristic = "myristic"
+        case nightwear = "nightwear"
+        case peruser = "peruser"
+        case theoastrological = "theoastrological"
+        case thumby = "thumby"
+        case tingitid = "tingitid"
+        case trailless = "trailless"
+        case unpocketed = "unpocketed"
+    }
+}
+
+// MARK: OccupationalistClass convenience initializers and mutators
+
+extension OccupationalistClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(OccupationalistClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        beholdable: JSONNull?? = nil,
+        brotuliform: JSONNull?? = nil,
+        chimakum: JSONNull?? = nil,
+        doodler: JSONNull?? = nil,
+        emulsin: JSONNull?? = nil,
+        fin: JSONNull?? = nil,
+        flourishing: JSONNull?? = nil,
+        flueless: JSONNull?? = nil,
+        furtively: JSONNull?? = nil,
+        gritter: JSONNull?? = nil,
+        interwish: JSONNull?? = nil,
+        monoxylic: JSONNull?? = nil,
+        myristic: JSONNull?? = nil,
+        nightwear: JSONNull?? = nil,
+        peruser: JSONNull?? = nil,
+        theoastrological: JSONNull?? = nil,
+        thumby: JSONNull?? = nil,
+        tingitid: JSONNull?? = nil,
+        trailless: JSONNull?? = nil,
+        unpocketed: JSONNull?? = nil
+    ) -> OccupationalistClass {
+        return OccupationalistClass(
+            beholdable: beholdable ?? self.beholdable,
+            brotuliform: brotuliform ?? self.brotuliform,
+            chimakum: chimakum ?? self.chimakum,
+            doodler: doodler ?? self.doodler,
+            emulsin: emulsin ?? self.emulsin,
+            fin: fin ?? self.fin,
+            flourishing: flourishing ?? self.flourishing,
+            flueless: flueless ?? self.flueless,
+            furtively: furtively ?? self.furtively,
+            gritter: gritter ?? self.gritter,
+            interwish: interwish ?? self.interwish,
+            monoxylic: monoxylic ?? self.monoxylic,
+            myristic: myristic ?? self.myristic,
+            nightwear: nightwear ?? self.nightwear,
+            peruser: peruser ?? self.peruser,
+            theoastrological: theoastrological ?? self.theoastrological,
+            thumby: thumby ?? self.thumby,
+            tingitid: tingitid ?? self.tingitid,
+            trailless: trailless ?? self.trailless,
+            unpocketed: unpocketed ?? self.unpocketed
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum OutrivalElement: Codable, Sendable {
+    case double(Double)
+    case outrivalClass(OutrivalClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(OutrivalClass.self) {
+            self = .outrivalClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(OutrivalElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for OutrivalElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .outrivalClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - OutrivalClass
+struct OutrivalClass: Codable, Sendable {
+    let adroitly: JSONNull?
+    let bridehood: JSONNull?
+    let castoroides: JSONNull?
+    let czechoslovak: JSONNull?
+    let diagenesis: JSONNull?
+    let dihexahedron: JSONNull?
+    let dopester: JSONNull?
+    let eumerism: JSONNull?
+    let flyness: JSONNull?
+    let fouler: JSONNull?
+    let laudanosine: JSONNull?
+    let lingulidae: JSONNull?
+    let minutary: JSONNull?
+    let mitra: JSONNull?
+    let opisthorchiasis: JSONNull?
+    let pensively: JSONNull?
+    let pubigerous: JSONNull?
+    let rebellious: JSONNull?
+    let recodify: JSONNull?
+    let unpaced: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case adroitly = "adroitly"
+        case bridehood = "bridehood"
+        case castoroides = "Castoroides"
+        case czechoslovak = "Czechoslovak"
+        case diagenesis = "diagenesis"
+        case dihexahedron = "dihexahedron"
+        case dopester = "dopester"
+        case eumerism = "eumerism"
+        case flyness = "flyness"
+        case fouler = "fouler"
+        case laudanosine = "laudanosine"
+        case lingulidae = "Lingulidae"
+        case minutary = "minutary"
+        case mitra = "mitra"
+        case opisthorchiasis = "opisthorchiasis"
+        case pensively = "pensively"
+        case pubigerous = "pubigerous"
+        case rebellious = "rebellious"
+        case recodify = "recodify"
+        case unpaced = "unpaced"
+    }
+}
+
+// MARK: OutrivalClass convenience initializers and mutators
+
+extension OutrivalClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(OutrivalClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        adroitly: JSONNull?? = nil,
+        bridehood: JSONNull?? = nil,
+        castoroides: JSONNull?? = nil,
+        czechoslovak: JSONNull?? = nil,
+        diagenesis: JSONNull?? = nil,
+        dihexahedron: JSONNull?? = nil,
+        dopester: JSONNull?? = nil,
+        eumerism: JSONNull?? = nil,
+        flyness: JSONNull?? = nil,
+        fouler: JSONNull?? = nil,
+        laudanosine: JSONNull?? = nil,
+        lingulidae: JSONNull?? = nil,
+        minutary: JSONNull?? = nil,
+        mitra: JSONNull?? = nil,
+        opisthorchiasis: JSONNull?? = nil,
+        pensively: JSONNull?? = nil,
+        pubigerous: JSONNull?? = nil,
+        rebellious: JSONNull?? = nil,
+        recodify: JSONNull?? = nil,
+        unpaced: JSONNull?? = nil
+    ) -> OutrivalClass {
+        return OutrivalClass(
+            adroitly: adroitly ?? self.adroitly,
+            bridehood: bridehood ?? self.bridehood,
+            castoroides: castoroides ?? self.castoroides,
+            czechoslovak: czechoslovak ?? self.czechoslovak,
+            diagenesis: diagenesis ?? self.diagenesis,
+            dihexahedron: dihexahedron ?? self.dihexahedron,
+            dopester: dopester ?? self.dopester,
+            eumerism: eumerism ?? self.eumerism,
+            flyness: flyness ?? self.flyness,
+            fouler: fouler ?? self.fouler,
+            laudanosine: laudanosine ?? self.laudanosine,
+            lingulidae: lingulidae ?? self.lingulidae,
+            minutary: minutary ?? self.minutary,
+            mitra: mitra ?? self.mitra,
+            opisthorchiasis: opisthorchiasis ?? self.opisthorchiasis,
+            pensively: pensively ?? self.pensively,
+            pubigerous: pubigerous ?? self.pubigerous,
+            rebellious: rebellious ?? self.rebellious,
+            recodify: recodify ?? self.recodify,
+            unpaced: unpaced ?? self.unpaced
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Paleographically: Codable, Sendable {
+    case double(Double)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Paleographically.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Paleographically"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Pamphletwise: Codable, Sendable {
+    case integer(Int)
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Pamphletwise.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pamphletwise"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Pediatric: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Pediatric.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pediatric"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum PiaculumElement: Codable, Sendable {
+    case double(Double)
+    case piaculumClass(PiaculumClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(PiaculumClass.self) {
+            self = .piaculumClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(PiaculumElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PiaculumElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .piaculumClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - PiaculumClass
+struct PiaculumClass: Codable, Sendable {
+    let alada: Int?
+    let amphistomous: Int?
+    let boysenberry: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let decardinalize: Int?
+    let discouragement: Int?
+    let disdiapason: String?
+    let doitrified: Int?
+    let hexaspermous: Int?
+    let homocerc: Bool?
+    let insinking: Int?
+    let loathfulness: Int?
+    let miasmatical: Int?
+    let neurofibril: Int?
+    let nonbookish: JSONNull?
+    let phonendoscope: Int?
+    let pilferment: Int?
+    let predismissory: Int?
+    let preinscription: Int?
+    let quotative: Int?
+    let sienna: Int?
+    let thorax: Int?
+    let yachting: Int?
+    let zipper: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case alada = "alada"
+        case amphistomous = "amphistomous"
+        case boysenberry = "boysenberry"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case decardinalize = "decardinalize"
+        case discouragement = "discouragement"
+        case disdiapason = "disdiapason"
+        case doitrified = "doitrified"
+        case hexaspermous = "hexaspermous"
+        case homocerc = "homocerc"
+        case insinking = "insinking"
+        case loathfulness = "loathfulness"
+        case miasmatical = "miasmatical"
+        case neurofibril = "neurofibril"
+        case nonbookish = "nonbookish"
+        case phonendoscope = "phonendoscope"
+        case pilferment = "pilferment"
+        case predismissory = "predismissory"
+        case preinscription = "preinscription"
+        case quotative = "quotative"
+        case sienna = "sienna"
+        case thorax = "thorax"
+        case yachting = "yachting"
+        case zipper = "Zipper"
+    }
+}
+
+// MARK: PiaculumClass convenience initializers and mutators
+
+extension PiaculumClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(PiaculumClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        alada: Int?? = nil,
+        amphistomous: Int?? = nil,
+        boysenberry: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        decardinalize: Int?? = nil,
+        discouragement: Int?? = nil,
+        disdiapason: String?? = nil,
+        doitrified: Int?? = nil,
+        hexaspermous: Int?? = nil,
+        homocerc: Bool?? = nil,
+        insinking: Int?? = nil,
+        loathfulness: Int?? = nil,
+        miasmatical: Int?? = nil,
+        neurofibril: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        phonendoscope: Int?? = nil,
+        pilferment: Int?? = nil,
+        predismissory: Int?? = nil,
+        preinscription: Int?? = nil,
+        quotative: Int?? = nil,
+        sienna: Int?? = nil,
+        thorax: Int?? = nil,
+        yachting: Int?? = nil,
+        zipper: Int?? = nil
+    ) -> PiaculumClass {
+        return PiaculumClass(
+            alada: alada ?? self.alada,
+            amphistomous: amphistomous ?? self.amphistomous,
+            boysenberry: boysenberry ?? self.boysenberry,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            decardinalize: decardinalize ?? self.decardinalize,
+            discouragement: discouragement ?? self.discouragement,
+            disdiapason: disdiapason ?? self.disdiapason,
+            doitrified: doitrified ?? self.doitrified,
+            hexaspermous: hexaspermous ?? self.hexaspermous,
+            homocerc: homocerc ?? self.homocerc,
+            insinking: insinking ?? self.insinking,
+            loathfulness: loathfulness ?? self.loathfulness,
+            miasmatical: miasmatical ?? self.miasmatical,
+            neurofibril: neurofibril ?? self.neurofibril,
+            nonbookish: nonbookish ?? self.nonbookish,
+            phonendoscope: phonendoscope ?? self.phonendoscope,
+            pilferment: pilferment ?? self.pilferment,
+            predismissory: predismissory ?? self.predismissory,
+            preinscription: preinscription ?? self.preinscription,
+            quotative: quotative ?? self.quotative,
+            sienna: sienna ?? self.sienna,
+            thorax: thorax ?? self.thorax,
+            yachting: yachting ?? self.yachting,
+            zipper: zipper ?? self.zipper
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Piccadilly: Codable, Sendable {
+    case double(Double)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Piccadilly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Piccadilly"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Piffler: Codable, Sendable {
+    case monaziteClass(MonaziteClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Piffler.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Piffler"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .monaziteClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Pithful: Codable, Sendable {
+    case bool(Bool)
+    case integer(Int)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Pithful.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pithful"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Placuntiti: Codable, Sendable {
+    case integer(Int)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Placuntiti.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Placuntiti"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Plectopterous: Codable, Sendable {
+    case double(Double)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Plectopterous.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Plectopterous"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Pneumocele
+struct Pneumocele: Codable, Sendable {
+    let carbonarism: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let cineolic: JSONNull?
+    let cobbly: JSONNull?
+    let conchyliferous: JSONNull?
+    let congregation: JSONNull?
+    let disdiapason: String?
+    let enterotomy: JSONNull?
+    let entophytal: JSONNull?
+    let fewtrils: JSONNull?
+    let herem: JSONNull?
+    let homocerc: Bool?
+    let koniga: JSONNull?
+    let meticulosity: JSONNull?
+    let micky: JSONNull?
+    let mismarriage: JSONNull?
+    let neurotrophic: JSONNull?
+    let nonbookish: JSONNull?
+    let persuasively: JSONNull?
+    let replaceable: JSONNull?
+    let silex: JSONNull?
+    let taillight: JSONNull?
+    let unjealous: JSONNull?
+    let visitorial: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case carbonarism = "Carbonarism"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case cineolic = "cineolic"
+        case cobbly = "cobbly"
+        case conchyliferous = "conchyliferous"
+        case congregation = "congregation"
+        case disdiapason = "disdiapason"
+        case enterotomy = "enterotomy"
+        case entophytal = "entophytal"
+        case fewtrils = "fewtrils"
+        case herem = "herem"
+        case homocerc = "homocerc"
+        case koniga = "Koniga"
+        case meticulosity = "meticulosity"
+        case micky = "Micky"
+        case mismarriage = "mismarriage"
+        case neurotrophic = "neurotrophic"
+        case nonbookish = "nonbookish"
+        case persuasively = "persuasively"
+        case replaceable = "replaceable"
+        case silex = "silex"
+        case taillight = "taillight"
+        case unjealous = "unjealous"
+        case visitorial = "visitorial"
+    }
+}
+
+// MARK: Pneumocele convenience initializers and mutators
+
+extension Pneumocele {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Pneumocele.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        carbonarism: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        cineolic: JSONNull?? = nil,
+        cobbly: JSONNull?? = nil,
+        conchyliferous: JSONNull?? = nil,
+        congregation: JSONNull?? = nil,
+        disdiapason: String?? = nil,
+        enterotomy: JSONNull?? = nil,
+        entophytal: JSONNull?? = nil,
+        fewtrils: JSONNull?? = nil,
+        herem: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        koniga: JSONNull?? = nil,
+        meticulosity: JSONNull?? = nil,
+        micky: JSONNull?? = nil,
+        mismarriage: JSONNull?? = nil,
+        neurotrophic: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        persuasively: JSONNull?? = nil,
+        replaceable: JSONNull?? = nil,
+        silex: JSONNull?? = nil,
+        taillight: JSONNull?? = nil,
+        unjealous: JSONNull?? = nil,
+        visitorial: JSONNull?? = nil
+    ) -> Pneumocele {
+        return Pneumocele(
+            carbonarism: carbonarism ?? self.carbonarism,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            cineolic: cineolic ?? self.cineolic,
+            cobbly: cobbly ?? self.cobbly,
+            conchyliferous: conchyliferous ?? self.conchyliferous,
+            congregation: congregation ?? self.congregation,
+            disdiapason: disdiapason ?? self.disdiapason,
+            enterotomy: enterotomy ?? self.enterotomy,
+            entophytal: entophytal ?? self.entophytal,
+            fewtrils: fewtrils ?? self.fewtrils,
+            herem: herem ?? self.herem,
+            homocerc: homocerc ?? self.homocerc,
+            koniga: koniga ?? self.koniga,
+            meticulosity: meticulosity ?? self.meticulosity,
+            micky: micky ?? self.micky,
+            mismarriage: mismarriage ?? self.mismarriage,
+            neurotrophic: neurotrophic ?? self.neurotrophic,
+            nonbookish: nonbookish ?? self.nonbookish,
+            persuasively: persuasively ?? self.persuasively,
+            replaceable: replaceable ?? self.replaceable,
+            silex: silex ?? self.silex,
+            taillight: taillight ?? self.taillight,
+            unjealous: unjealous ?? self.unjealous,
+            visitorial: visitorial ?? self.visitorial
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Poliorcetic: Codable, Sendable {
+    case bool(Bool)
+    case monaziteClass(MonaziteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Poliorcetic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Poliorcetic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Poormaster: Codable, Sendable {
+    case integerArray([Int])
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Poormaster.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Poormaster"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum PotwhiskyElement: Codable, Sendable {
+    case integer(Int)
+    case potwhiskyClass(PotwhiskyClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(PotwhiskyClass.self) {
+            self = .potwhiskyClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(PotwhiskyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PotwhiskyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .potwhiskyClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - PotwhiskyClass
+struct PotwhiskyClass: Codable, Sendable {
+    let arciform: JSONNull?
+    let cresolin: JSONNull?
+    let disheartener: JSONNull?
+    let disproportionable: JSONNull?
+    let euchorda: JSONNull?
+    let ferryway: JSONNull?
+    let filamentiferous: JSONNull?
+    let flemish: JSONNull?
+    let forgainst: JSONNull?
+    let grainering: JSONNull?
+    let irrevoluble: JSONNull?
+    let kindredship: JSONNull?
+    let pinguitudinous: JSONNull?
+    let simpletonic: JSONNull?
+    let singsong: JSONNull?
+    let submergement: JSONNull?
+    let supraoesophagal: JSONNull?
+    let thrashel: JSONNull?
+    let tyremesis: JSONNull?
+    let yoruba: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case arciform = "arciform"
+        case cresolin = "cresolin"
+        case disheartener = "disheartener"
+        case disproportionable = "disproportionable"
+        case euchorda = "Euchorda"
+        case ferryway = "ferryway"
+        case filamentiferous = "filamentiferous"
+        case flemish = "flemish"
+        case forgainst = "forgainst"
+        case grainering = "grainering"
+        case irrevoluble = "irrevoluble"
+        case kindredship = "kindredship"
+        case pinguitudinous = "pinguitudinous"
+        case simpletonic = "simpletonic"
+        case singsong = "singsong"
+        case submergement = "submergement"
+        case supraoesophagal = "supraoesophagal"
+        case thrashel = "thrashel"
+        case tyremesis = "tyremesis"
+        case yoruba = "Yoruba"
+    }
+}
+
+// MARK: PotwhiskyClass convenience initializers and mutators
+
+extension PotwhiskyClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(PotwhiskyClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        arciform: JSONNull?? = nil,
+        cresolin: JSONNull?? = nil,
+        disheartener: JSONNull?? = nil,
+        disproportionable: JSONNull?? = nil,
+        euchorda: JSONNull?? = nil,
+        ferryway: JSONNull?? = nil,
+        filamentiferous: JSONNull?? = nil,
+        flemish: JSONNull?? = nil,
+        forgainst: JSONNull?? = nil,
+        grainering: JSONNull?? = nil,
+        irrevoluble: JSONNull?? = nil,
+        kindredship: JSONNull?? = nil,
+        pinguitudinous: JSONNull?? = nil,
+        simpletonic: JSONNull?? = nil,
+        singsong: JSONNull?? = nil,
+        submergement: JSONNull?? = nil,
+        supraoesophagal: JSONNull?? = nil,
+        thrashel: JSONNull?? = nil,
+        tyremesis: JSONNull?? = nil,
+        yoruba: JSONNull?? = nil
+    ) -> PotwhiskyClass {
+        return PotwhiskyClass(
+            arciform: arciform ?? self.arciform,
+            cresolin: cresolin ?? self.cresolin,
+            disheartener: disheartener ?? self.disheartener,
+            disproportionable: disproportionable ?? self.disproportionable,
+            euchorda: euchorda ?? self.euchorda,
+            ferryway: ferryway ?? self.ferryway,
+            filamentiferous: filamentiferous ?? self.filamentiferous,
+            flemish: flemish ?? self.flemish,
+            forgainst: forgainst ?? self.forgainst,
+            grainering: grainering ?? self.grainering,
+            irrevoluble: irrevoluble ?? self.irrevoluble,
+            kindredship: kindredship ?? self.kindredship,
+            pinguitudinous: pinguitudinous ?? self.pinguitudinous,
+            simpletonic: simpletonic ?? self.simpletonic,
+            singsong: singsong ?? self.singsong,
+            submergement: submergement ?? self.submergement,
+            supraoesophagal: supraoesophagal ?? self.supraoesophagal,
+            thrashel: thrashel ?? self.thrashel,
+            tyremesis: tyremesis ?? self.tyremesis,
+            yoruba: yoruba ?? self.yoruba
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Practicalizer: Codable, Sendable {
+    case monaziteClass(MonaziteClass)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Practicalizer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Practicalizer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .monaziteClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum PrefreshmanElement: Codable, Sendable {
+    case nullArray([JSONNull?])
+    case prefreshmanClass(PrefreshmanClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(PrefreshmanClass.self) {
+            self = .prefreshmanClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(PrefreshmanElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PrefreshmanElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .prefreshmanClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - PrefreshmanClass
+struct PrefreshmanClass: Codable, Sendable {
+    let azorubine: JSONNull?
+    let choroiditis: JSONNull?
+    let coagulatory: JSONNull?
+    let cyclorama: JSONNull?
+    let dolphus: JSONNull?
+    let duckhearted: JSONNull?
+    let ficus: JSONNull?
+    let gemaric: JSONNull?
+    let jugation: JSONNull?
+    let myoliposis: JSONNull?
+    let nonnomination: JSONNull?
+    let palay: JSONNull?
+    let pentactinal: JSONNull?
+    let phaet: JSONNull?
+    let piquant: JSONNull?
+    let registration: JSONNull?
+    let remancipation: JSONNull?
+    let scutatiform: JSONNull?
+    let theodolite: JSONNull?
+    let underward: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case azorubine = "azorubine"
+        case choroiditis = "choroiditis"
+        case coagulatory = "coagulatory"
+        case cyclorama = "cyclorama"
+        case dolphus = "Dolphus"
+        case duckhearted = "duckhearted"
+        case ficus = "Ficus"
+        case gemaric = "Gemaric"
+        case jugation = "jugation"
+        case myoliposis = "myoliposis"
+        case nonnomination = "nonnomination"
+        case palay = "palay"
+        case pentactinal = "pentactinal"
+        case phaet = "Phaet"
+        case piquant = "piquant"
+        case registration = "registration"
+        case remancipation = "remancipation"
+        case scutatiform = "scutatiform"
+        case theodolite = "theodolite"
+        case underward = "underward"
+    }
+}
+
+// MARK: PrefreshmanClass convenience initializers and mutators
+
+extension PrefreshmanClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(PrefreshmanClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        azorubine: JSONNull?? = nil,
+        choroiditis: JSONNull?? = nil,
+        coagulatory: JSONNull?? = nil,
+        cyclorama: JSONNull?? = nil,
+        dolphus: JSONNull?? = nil,
+        duckhearted: JSONNull?? = nil,
+        ficus: JSONNull?? = nil,
+        gemaric: JSONNull?? = nil,
+        jugation: JSONNull?? = nil,
+        myoliposis: JSONNull?? = nil,
+        nonnomination: JSONNull?? = nil,
+        palay: JSONNull?? = nil,
+        pentactinal: JSONNull?? = nil,
+        phaet: JSONNull?? = nil,
+        piquant: JSONNull?? = nil,
+        registration: JSONNull?? = nil,
+        remancipation: JSONNull?? = nil,
+        scutatiform: JSONNull?? = nil,
+        theodolite: JSONNull?? = nil,
+        underward: JSONNull?? = nil
+    ) -> PrefreshmanClass {
+        return PrefreshmanClass(
+            azorubine: azorubine ?? self.azorubine,
+            choroiditis: choroiditis ?? self.choroiditis,
+            coagulatory: coagulatory ?? self.coagulatory,
+            cyclorama: cyclorama ?? self.cyclorama,
+            dolphus: dolphus ?? self.dolphus,
+            duckhearted: duckhearted ?? self.duckhearted,
+            ficus: ficus ?? self.ficus,
+            gemaric: gemaric ?? self.gemaric,
+            jugation: jugation ?? self.jugation,
+            myoliposis: myoliposis ?? self.myoliposis,
+            nonnomination: nonnomination ?? self.nonnomination,
+            palay: palay ?? self.palay,
+            pentactinal: pentactinal ?? self.pentactinal,
+            phaet: phaet ?? self.phaet,
+            piquant: piquant ?? self.piquant,
+            registration: registration ?? self.registration,
+            remancipation: remancipation ?? self.remancipation,
+            scutatiform: scutatiform ?? self.scutatiform,
+            theodolite: theodolite ?? self.theodolite,
+            underward: underward ?? self.underward
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Prehensility: Codable, Sendable {
+    case bool(Bool)
+    case monaziteClass(MonaziteClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Prehensility.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Prehensility"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Prevoidance: Codable, Sendable {
+    case integer(Int)
+    case integerArray([Int])
+    case monaziteClass(MonaziteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Prevoidance.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Prevoidance"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Protext: Codable, Sendable {
+    case bool(Bool)
+    case integerArray([Int])
+    case monaziteClass(MonaziteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Protext.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Protext"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+final class JSONNull: Codable, Hashable, Sendable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    public func hash(into hasher: inout Hasher) {
+        hasher.combine(0)
+    }
+
+    public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/head/swift/test/inputs/json/priority/combinations3.json/sendable-true__struct-or-class-class--265b1fe2e96e/quicktype.swift b/head/swift/test/inputs/json/priority/combinations3.json/sendable-true__struct-or-class-class--265b1fe2e96e/quicktype.swift
new file mode 100644
index 0000000..16a375b
--- /dev/null
+++ b/head/swift/test/inputs/json/priority/combinations3.json/sendable-true__struct-or-class-class--265b1fe2e96e/quicktype.swift
@@ -0,0 +1,3534 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+import Foundation
+
+// MARK: - TopLevel
+final class TopLevel: Codable, Sendable {
+    let juror: [JurorElement]
+    let kongoni: [Kongoni]
+    let ladronism: [LadronismElement]
+    let landlubberly: [LandlubberlyElement]
+    let listener: [Listener]
+    let lupus: [LupusElement]
+    let maslin: [Maslin]
+    let monazite: [MonaziteElement]
+    let monoliteral: [Monoliteral]
+    let monotheistically: [MonotheisticallyElement]
+    let montage: [Montage]
+    let moralness: [Moralness]
+    let mowra: [MonaziteClass?]
+    let mulishly: [Mulishly]
+    let myoscope: [Myoscope]
+    let nach: [[Int?]?]
+    let neuromastic: [Neuromastic]
+    let noncontributing: [Noncontributing]
+    let nonnervous: [Nonnervous]
+    let nonvaluation: [Nonvaluation]
+    let occupationalist: [OccupationalistElement]
+    let outrival: [OutrivalElement]
+    let paleographically: [Paleographically]
+    let pamphletwise: [Pamphletwise]
+    let pediatrics: [Pediatric]
+    let perceptive: [Bool]
+    let piaculum: [PiaculumElement]
+    let piccadilly: [Piccadilly]
+    let piffler: [Piffler]
+    let pithful: [Pithful]
+    let placuntitis: [Placuntiti]
+    let plectopterous: [Plectopterous]
+    let pneumocele: [Pneumocele?]
+    let poliorcetic: [Poliorcetic]
+    let poormaster: [Poormaster]
+    let potwhisky: [PotwhiskyElement]
+    let practicalizer: [Practicalizer]
+    let prefreshman: [PrefreshmanElement]
+    let prehensility: [Prehensility]
+    let prevoidance: [Prevoidance]
+    let probant: [[String: Int?]]
+    let protext: [Protext]
+
+    enum CodingKeys: String, CodingKey {
+        case juror = "juror"
+        case kongoni = "kongoni"
+        case ladronism = "ladronism"
+        case landlubberly = "landlubberly"
+        case listener = "listener"
+        case lupus = "lupus"
+        case maslin = "maslin"
+        case monazite = "monazite"
+        case monoliteral = "monoliteral"
+        case monotheistically = "monotheistically"
+        case montage = "montage"
+        case moralness = "moralness"
+        case mowra = "mowra"
+        case mulishly = "mulishly"
+        case myoscope = "myoscope"
+        case nach = "nach"
+        case neuromastic = "neuromastic"
+        case noncontributing = "noncontributing"
+        case nonnervous = "nonnervous"
+        case nonvaluation = "nonvaluation"
+        case occupationalist = "occupationalist"
+        case outrival = "outrival"
+        case paleographically = "paleographically"
+        case pamphletwise = "pamphletwise"
+        case pediatrics = "pediatrics"
+        case perceptive = "perceptive"
+        case piaculum = "piaculum"
+        case piccadilly = "piccadilly"
+        case piffler = "piffler"
+        case pithful = "pithful"
+        case placuntitis = "placuntitis"
+        case plectopterous = "plectopterous"
+        case pneumocele = "pneumocele"
+        case poliorcetic = "poliorcetic"
+        case poormaster = "poormaster"
+        case potwhisky = "potwhisky"
+        case practicalizer = "practicalizer"
+        case prefreshman = "prefreshman"
+        case prehensility = "prehensility"
+        case prevoidance = "prevoidance"
+        case probant = "probant"
+        case protext = "protext"
+    }
+
+    init(juror: [JurorElement], kongoni: [Kongoni], ladronism: [LadronismElement], landlubberly: [LandlubberlyElement], listener: [Listener], lupus: [LupusElement], maslin: [Maslin], monazite: [MonaziteElement], monoliteral: [Monoliteral], monotheistically: [MonotheisticallyElement], montage: [Montage], moralness: [Moralness], mowra: [MonaziteClass?], mulishly: [Mulishly], myoscope: [Myoscope], nach: [[Int?]?], neuromastic: [Neuromastic], noncontributing: [Noncontributing], nonnervous: [Nonnervous], nonvaluation: [Nonvaluation], occupationalist: [OccupationalistElement], outrival: [OutrivalElement], paleographically: [Paleographically], pamphletwise: [Pamphletwise], pediatrics: [Pediatric], perceptive: [Bool], piaculum: [PiaculumElement], piccadilly: [Piccadilly], piffler: [Piffler], pithful: [Pithful], placuntitis: [Placuntiti], plectopterous: [Plectopterous], pneumocele: [Pneumocele?], poliorcetic: [Poliorcetic], poormaster: [Poormaster], potwhisky: [PotwhiskyElement], practicalizer: [Practicalizer], prefreshman: [PrefreshmanElement], prehensility: [Prehensility], prevoidance: [Prevoidance], probant: [[String: Int?]], protext: [Protext]) {
+        self.juror = juror
+        self.kongoni = kongoni
+        self.ladronism = ladronism
+        self.landlubberly = landlubberly
+        self.listener = listener
+        self.lupus = lupus
+        self.maslin = maslin
+        self.monazite = monazite
+        self.monoliteral = monoliteral
+        self.monotheistically = monotheistically
+        self.montage = montage
+        self.moralness = moralness
+        self.mowra = mowra
+        self.mulishly = mulishly
+        self.myoscope = myoscope
+        self.nach = nach
+        self.neuromastic = neuromastic
+        self.noncontributing = noncontributing
+        self.nonnervous = nonnervous
+        self.nonvaluation = nonvaluation
+        self.occupationalist = occupationalist
+        self.outrival = outrival
+        self.paleographically = paleographically
+        self.pamphletwise = pamphletwise
+        self.pediatrics = pediatrics
+        self.perceptive = perceptive
+        self.piaculum = piaculum
+        self.piccadilly = piccadilly
+        self.piffler = piffler
+        self.pithful = pithful
+        self.placuntitis = placuntitis
+        self.plectopterous = plectopterous
+        self.pneumocele = pneumocele
+        self.poliorcetic = poliorcetic
+        self.poormaster = poormaster
+        self.potwhisky = potwhisky
+        self.practicalizer = practicalizer
+        self.prefreshman = prefreshman
+        self.prehensility = prehensility
+        self.prevoidance = prevoidance
+        self.probant = probant
+        self.protext = protext
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(TopLevel.self, from: data)
+        self.init(juror: me.juror, kongoni: me.kongoni, ladronism: me.ladronism, landlubberly: me.landlubberly, listener: me.listener, lupus: me.lupus, maslin: me.maslin, monazite: me.monazite, monoliteral: me.monoliteral, monotheistically: me.monotheistically, montage: me.montage, moralness: me.moralness, mowra: me.mowra, mulishly: me.mulishly, myoscope: me.myoscope, nach: me.nach, neuromastic: me.neuromastic, noncontributing: me.noncontributing, nonnervous: me.nonnervous, nonvaluation: me.nonvaluation, occupationalist: me.occupationalist, outrival: me.outrival, paleographically: me.paleographically, pamphletwise: me.pamphletwise, pediatrics: me.pediatrics, perceptive: me.perceptive, piaculum: me.piaculum, piccadilly: me.piccadilly, piffler: me.piffler, pithful: me.pithful, placuntitis: me.placuntitis, plectopterous: me.plectopterous, pneumocele: me.pneumocele, poliorcetic: me.poliorcetic, poormaster: me.poormaster, potwhisky: me.potwhisky, practicalizer: me.practicalizer, prefreshman: me.prefreshman, prehensility: me.prehensility, prevoidance: me.prevoidance, probant: me.probant, protext: me.protext)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        juror: [JurorElement]? = nil,
+        kongoni: [Kongoni]? = nil,
+        ladronism: [LadronismElement]? = nil,
+        landlubberly: [LandlubberlyElement]? = nil,
+        listener: [Listener]? = nil,
+        lupus: [LupusElement]? = nil,
+        maslin: [Maslin]? = nil,
+        monazite: [MonaziteElement]? = nil,
+        monoliteral: [Monoliteral]? = nil,
+        monotheistically: [MonotheisticallyElement]? = nil,
+        montage: [Montage]? = nil,
+        moralness: [Moralness]? = nil,
+        mowra: [MonaziteClass?]? = nil,
+        mulishly: [Mulishly]? = nil,
+        myoscope: [Myoscope]? = nil,
+        nach: [[Int?]?]? = nil,
+        neuromastic: [Neuromastic]? = nil,
+        noncontributing: [Noncontributing]? = nil,
+        nonnervous: [Nonnervous]? = nil,
+        nonvaluation: [Nonvaluation]? = nil,
+        occupationalist: [OccupationalistElement]? = nil,
+        outrival: [OutrivalElement]? = nil,
+        paleographically: [Paleographically]? = nil,
+        pamphletwise: [Pamphletwise]? = nil,
+        pediatrics: [Pediatric]? = nil,
+        perceptive: [Bool]? = nil,
+        piaculum: [PiaculumElement]? = nil,
+        piccadilly: [Piccadilly]? = nil,
+        piffler: [Piffler]? = nil,
+        pithful: [Pithful]? = nil,
+        placuntitis: [Placuntiti]? = nil,
+        plectopterous: [Plectopterous]? = nil,
+        pneumocele: [Pneumocele?]? = nil,
+        poliorcetic: [Poliorcetic]? = nil,
+        poormaster: [Poormaster]? = nil,
+        potwhisky: [PotwhiskyElement]? = nil,
+        practicalizer: [Practicalizer]? = nil,
+        prefreshman: [PrefreshmanElement]? = nil,
+        prehensility: [Prehensility]? = nil,
+        prevoidance: [Prevoidance]? = nil,
+        probant: [[String: Int?]]? = nil,
+        protext: [Protext]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            juror: juror ?? self.juror,
+            kongoni: kongoni ?? self.kongoni,
+            ladronism: ladronism ?? self.ladronism,
+            landlubberly: landlubberly ?? self.landlubberly,
+            listener: listener ?? self.listener,
+            lupus: lupus ?? self.lupus,
+            maslin: maslin ?? self.maslin,
+            monazite: monazite ?? self.monazite,
+            monoliteral: monoliteral ?? self.monoliteral,
+            monotheistically: monotheistically ?? self.monotheistically,
+            montage: montage ?? self.montage,
+            moralness: moralness ?? self.moralness,
+            mowra: mowra ?? self.mowra,
+            mulishly: mulishly ?? self.mulishly,
+            myoscope: myoscope ?? self.myoscope,
+            nach: nach ?? self.nach,
+            neuromastic: neuromastic ?? self.neuromastic,
+            noncontributing: noncontributing ?? self.noncontributing,
+            nonnervous: nonnervous ?? self.nonnervous,
+            nonvaluation: nonvaluation ?? self.nonvaluation,
+            occupationalist: occupationalist ?? self.occupationalist,
+            outrival: outrival ?? self.outrival,
+            paleographically: paleographically ?? self.paleographically,
+            pamphletwise: pamphletwise ?? self.pamphletwise,
+            pediatrics: pediatrics ?? self.pediatrics,
+            perceptive: perceptive ?? self.perceptive,
+            piaculum: piaculum ?? self.piaculum,
+            piccadilly: piccadilly ?? self.piccadilly,
+            piffler: piffler ?? self.piffler,
+            pithful: pithful ?? self.pithful,
+            placuntitis: placuntitis ?? self.placuntitis,
+            plectopterous: plectopterous ?? self.plectopterous,
+            pneumocele: pneumocele ?? self.pneumocele,
+            poliorcetic: poliorcetic ?? self.poliorcetic,
+            poormaster: poormaster ?? self.poormaster,
+            potwhisky: potwhisky ?? self.potwhisky,
+            practicalizer: practicalizer ?? self.practicalizer,
+            prefreshman: prefreshman ?? self.prefreshman,
+            prehensility: prehensility ?? self.prehensility,
+            prevoidance: prevoidance ?? self.prevoidance,
+            probant: probant ?? self.probant,
+            protext: protext ?? self.protext
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum JurorElement: Codable, Sendable {
+    case bool(Bool)
+    case jurorClass(JurorClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(JurorClass.self) {
+            self = .jurorClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(JurorElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JurorElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .jurorClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - JurorClass
+final class JurorClass: Codable, Sendable {
+    let adipsy: JSONNull?
+    let auxiliator: JSONNull?
+    let benda: JSONNull?
+    let benjamin: JSONNull?
+    let brandling: JSONNull?
+    let epicurishly: JSONNull?
+    let eremochaetous: JSONNull?
+    let marten: JSONNull?
+    let monocline: JSONNull?
+    let olea: JSONNull?
+    let palgat: JSONNull?
+    let pennyworth: JSONNull?
+    let pioury: JSONNull?
+    let pragmatistic: JSONNull?
+    let stylelessness: JSONNull?
+    let systematical: JSONNull?
+    let thready: JSONNull?
+    let uncontemporary: JSONNull?
+    let uncouched: JSONNull?
+    let uninhabitedness: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case adipsy = "adipsy"
+        case auxiliator = "auxiliator"
+        case benda = "benda"
+        case benjamin = "benjamin"
+        case brandling = "brandling"
+        case epicurishly = "epicurishly"
+        case eremochaetous = "eremochaetous"
+        case marten = "marten"
+        case monocline = "monocline"
+        case olea = "Olea"
+        case palgat = "palgat"
+        case pennyworth = "pennyworth"
+        case pioury = "pioury"
+        case pragmatistic = "pragmatistic"
+        case stylelessness = "stylelessness"
+        case systematical = "systematical"
+        case thready = "thready"
+        case uncontemporary = "uncontemporary"
+        case uncouched = "uncouched"
+        case uninhabitedness = "uninhabitedness"
+    }
+
+    init(adipsy: JSONNull?, auxiliator: JSONNull?, benda: JSONNull?, benjamin: JSONNull?, brandling: JSONNull?, epicurishly: JSONNull?, eremochaetous: JSONNull?, marten: JSONNull?, monocline: JSONNull?, olea: JSONNull?, palgat: JSONNull?, pennyworth: JSONNull?, pioury: JSONNull?, pragmatistic: JSONNull?, stylelessness: JSONNull?, systematical: JSONNull?, thready: JSONNull?, uncontemporary: JSONNull?, uncouched: JSONNull?, uninhabitedness: JSONNull?) {
+        self.adipsy = adipsy
+        self.auxiliator = auxiliator
+        self.benda = benda
+        self.benjamin = benjamin
+        self.brandling = brandling
+        self.epicurishly = epicurishly
+        self.eremochaetous = eremochaetous
+        self.marten = marten
+        self.monocline = monocline
+        self.olea = olea
+        self.palgat = palgat
+        self.pennyworth = pennyworth
+        self.pioury = pioury
+        self.pragmatistic = pragmatistic
+        self.stylelessness = stylelessness
+        self.systematical = systematical
+        self.thready = thready
+        self.uncontemporary = uncontemporary
+        self.uncouched = uncouched
+        self.uninhabitedness = uninhabitedness
+    }
+}
+
+// MARK: JurorClass convenience initializers and mutators
+
+extension JurorClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(JurorClass.self, from: data)
+        self.init(adipsy: me.adipsy, auxiliator: me.auxiliator, benda: me.benda, benjamin: me.benjamin, brandling: me.brandling, epicurishly: me.epicurishly, eremochaetous: me.eremochaetous, marten: me.marten, monocline: me.monocline, olea: me.olea, palgat: me.palgat, pennyworth: me.pennyworth, pioury: me.pioury, pragmatistic: me.pragmatistic, stylelessness: me.stylelessness, systematical: me.systematical, thready: me.thready, uncontemporary: me.uncontemporary, uncouched: me.uncouched, uninhabitedness: me.uninhabitedness)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        adipsy: JSONNull?? = nil,
+        auxiliator: JSONNull?? = nil,
+        benda: JSONNull?? = nil,
+        benjamin: JSONNull?? = nil,
+        brandling: JSONNull?? = nil,
+        epicurishly: JSONNull?? = nil,
+        eremochaetous: JSONNull?? = nil,
+        marten: JSONNull?? = nil,
+        monocline: JSONNull?? = nil,
+        olea: JSONNull?? = nil,
+        palgat: JSONNull?? = nil,
+        pennyworth: JSONNull?? = nil,
+        pioury: JSONNull?? = nil,
+        pragmatistic: JSONNull?? = nil,
+        stylelessness: JSONNull?? = nil,
+        systematical: JSONNull?? = nil,
+        thready: JSONNull?? = nil,
+        uncontemporary: JSONNull?? = nil,
+        uncouched: JSONNull?? = nil,
+        uninhabitedness: JSONNull?? = nil
+    ) -> JurorClass {
+        return JurorClass(
+            adipsy: adipsy ?? self.adipsy,
+            auxiliator: auxiliator ?? self.auxiliator,
+            benda: benda ?? self.benda,
+            benjamin: benjamin ?? self.benjamin,
+            brandling: brandling ?? self.brandling,
+            epicurishly: epicurishly ?? self.epicurishly,
+            eremochaetous: eremochaetous ?? self.eremochaetous,
+            marten: marten ?? self.marten,
+            monocline: monocline ?? self.monocline,
+            olea: olea ?? self.olea,
+            palgat: palgat ?? self.palgat,
+            pennyworth: pennyworth ?? self.pennyworth,
+            pioury: pioury ?? self.pioury,
+            pragmatistic: pragmatistic ?? self.pragmatistic,
+            stylelessness: stylelessness ?? self.stylelessness,
+            systematical: systematical ?? self.systematical,
+            thready: thready ?? self.thready,
+            uncontemporary: uncontemporary ?? self.uncontemporary,
+            uncouched: uncouched ?? self.uncouched,
+            uninhabitedness: uninhabitedness ?? self.uninhabitedness
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Kongoni: Codable, Sendable {
+    case integerArray([Int])
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Kongoni.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Kongoni"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum LadronismElement: Codable, Sendable {
+    case double(Double)
+    case ladronismClass(LadronismClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(LadronismClass.self) {
+            self = .ladronismClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(LadronismElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LadronismElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .ladronismClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - LadronismClass
+final class LadronismClass: Codable, Sendable {
+    let acclaimer: JSONNull?
+    let achree: JSONNull?
+    let base: JSONNull?
+    let conundrumize: JSONNull?
+    let degerminator: JSONNull?
+    let describable: JSONNull?
+    let exasperatedly: JSONNull?
+    let heroine: JSONNull?
+    let indazin: JSONNull?
+    let luteous: JSONNull?
+    let papular: JSONNull?
+    let pritch: JSONNull?
+    let prodenia: JSONNull?
+    let seege: JSONNull?
+    let shopgirl: JSONNull?
+    let tragedietta: JSONNull?
+    let unsparse: JSONNull?
+    let uplook: JSONNull?
+    let vermiformis: JSONNull?
+    let whafabout: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acclaimer = "acclaimer"
+        case achree = "achree"
+        case base = "base"
+        case conundrumize = "conundrumize"
+        case degerminator = "degerminator"
+        case describable = "describable"
+        case exasperatedly = "exasperatedly"
+        case heroine = "heroine"
+        case indazin = "indazin"
+        case luteous = "luteous"
+        case papular = "papular"
+        case pritch = "pritch"
+        case prodenia = "Prodenia"
+        case seege = "seege"
+        case shopgirl = "shopgirl"
+        case tragedietta = "tragedietta"
+        case unsparse = "unsparse"
+        case uplook = "uplook"
+        case vermiformis = "vermiformis"
+        case whafabout = "whafabout"
+    }
+
+    init(acclaimer: JSONNull?, achree: JSONNull?, base: JSONNull?, conundrumize: JSONNull?, degerminator: JSONNull?, describable: JSONNull?, exasperatedly: JSONNull?, heroine: JSONNull?, indazin: JSONNull?, luteous: JSONNull?, papular: JSONNull?, pritch: JSONNull?, prodenia: JSONNull?, seege: JSONNull?, shopgirl: JSONNull?, tragedietta: JSONNull?, unsparse: JSONNull?, uplook: JSONNull?, vermiformis: JSONNull?, whafabout: JSONNull?) {
+        self.acclaimer = acclaimer
+        self.achree = achree
+        self.base = base
+        self.conundrumize = conundrumize
+        self.degerminator = degerminator
+        self.describable = describable
+        self.exasperatedly = exasperatedly
+        self.heroine = heroine
+        self.indazin = indazin
+        self.luteous = luteous
+        self.papular = papular
+        self.pritch = pritch
+        self.prodenia = prodenia
+        self.seege = seege
+        self.shopgirl = shopgirl
+        self.tragedietta = tragedietta
+        self.unsparse = unsparse
+        self.uplook = uplook
+        self.vermiformis = vermiformis
+        self.whafabout = whafabout
+    }
+}
+
+// MARK: LadronismClass convenience initializers and mutators
+
+extension LadronismClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(LadronismClass.self, from: data)
+        self.init(acclaimer: me.acclaimer, achree: me.achree, base: me.base, conundrumize: me.conundrumize, degerminator: me.degerminator, describable: me.describable, exasperatedly: me.exasperatedly, heroine: me.heroine, indazin: me.indazin, luteous: me.luteous, papular: me.papular, pritch: me.pritch, prodenia: me.prodenia, seege: me.seege, shopgirl: me.shopgirl, tragedietta: me.tragedietta, unsparse: me.unsparse, uplook: me.uplook, vermiformis: me.vermiformis, whafabout: me.whafabout)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acclaimer: JSONNull?? = nil,
+        achree: JSONNull?? = nil,
+        base: JSONNull?? = nil,
+        conundrumize: JSONNull?? = nil,
+        degerminator: JSONNull?? = nil,
+        describable: JSONNull?? = nil,
+        exasperatedly: JSONNull?? = nil,
+        heroine: JSONNull?? = nil,
+        indazin: JSONNull?? = nil,
+        luteous: JSONNull?? = nil,
+        papular: JSONNull?? = nil,
+        pritch: JSONNull?? = nil,
+        prodenia: JSONNull?? = nil,
+        seege: JSONNull?? = nil,
+        shopgirl: JSONNull?? = nil,
+        tragedietta: JSONNull?? = nil,
+        unsparse: JSONNull?? = nil,
+        uplook: JSONNull?? = nil,
+        vermiformis: JSONNull?? = nil,
+        whafabout: JSONNull?? = nil
+    ) -> LadronismClass {
+        return LadronismClass(
+            acclaimer: acclaimer ?? self.acclaimer,
+            achree: achree ?? self.achree,
+            base: base ?? self.base,
+            conundrumize: conundrumize ?? self.conundrumize,
+            degerminator: degerminator ?? self.degerminator,
+            describable: describable ?? self.describable,
+            exasperatedly: exasperatedly ?? self.exasperatedly,
+            heroine: heroine ?? self.heroine,
+            indazin: indazin ?? self.indazin,
+            luteous: luteous ?? self.luteous,
+            papular: papular ?? self.papular,
+            pritch: pritch ?? self.pritch,
+            prodenia: prodenia ?? self.prodenia,
+            seege: seege ?? self.seege,
+            shopgirl: shopgirl ?? self.shopgirl,
+            tragedietta: tragedietta ?? self.tragedietta,
+            unsparse: unsparse ?? self.unsparse,
+            uplook: uplook ?? self.uplook,
+            vermiformis: vermiformis ?? self.vermiformis,
+            whafabout: whafabout ?? self.whafabout
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum LandlubberlyElement: Codable, Sendable {
+    case bool(Bool)
+    case integer(Int)
+    case landlubberlyClass(LandlubberlyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(LandlubberlyClass.self) {
+            self = .landlubberlyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(LandlubberlyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LandlubberlyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .landlubberlyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - LandlubberlyClass
+final class LandlubberlyClass: Codable, Sendable {
+    let acropoleis: JSONNull?
+    let aminate: JSONNull?
+    let amyraldism: JSONNull?
+    let bipenniform: JSONNull?
+    let bugre: JSONNull?
+    let calycule: JSONNull?
+    let caoutchouc: JSONNull?
+    let disprover: JSONNull?
+    let fitroot: JSONNull?
+    let fulgently: JSONNull?
+    let kickup: JSONNull?
+    let laevoversion: JSONNull?
+    let moter: JSONNull?
+    let objectivity: JSONNull?
+    let posterity: JSONNull?
+    let postnuptial: JSONNull?
+    let precedentary: JSONNull?
+    let saddling: JSONNull?
+    let subcurrent: JSONNull?
+    let unrecriminative: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acropoleis = "acropoleis"
+        case aminate = "aminate"
+        case amyraldism = "Amyraldism"
+        case bipenniform = "bipenniform"
+        case bugre = "bugre"
+        case calycule = "calycule"
+        case caoutchouc = "caoutchouc"
+        case disprover = "disprover"
+        case fitroot = "fitroot"
+        case fulgently = "fulgently"
+        case kickup = "kickup"
+        case laevoversion = "laevoversion"
+        case moter = "moter"
+        case objectivity = "objectivity"
+        case posterity = "posterity"
+        case postnuptial = "postnuptial"
+        case precedentary = "precedentary"
+        case saddling = "saddling"
+        case subcurrent = "subcurrent"
+        case unrecriminative = "unrecriminative"
+    }
+
+    init(acropoleis: JSONNull?, aminate: JSONNull?, amyraldism: JSONNull?, bipenniform: JSONNull?, bugre: JSONNull?, calycule: JSONNull?, caoutchouc: JSONNull?, disprover: JSONNull?, fitroot: JSONNull?, fulgently: JSONNull?, kickup: JSONNull?, laevoversion: JSONNull?, moter: JSONNull?, objectivity: JSONNull?, posterity: JSONNull?, postnuptial: JSONNull?, precedentary: JSONNull?, saddling: JSONNull?, subcurrent: JSONNull?, unrecriminative: JSONNull?) {
+        self.acropoleis = acropoleis
+        self.aminate = aminate
+        self.amyraldism = amyraldism
+        self.bipenniform = bipenniform
+        self.bugre = bugre
+        self.calycule = calycule
+        self.caoutchouc = caoutchouc
+        self.disprover = disprover
+        self.fitroot = fitroot
+        self.fulgently = fulgently
+        self.kickup = kickup
+        self.laevoversion = laevoversion
+        self.moter = moter
+        self.objectivity = objectivity
+        self.posterity = posterity
+        self.postnuptial = postnuptial
+        self.precedentary = precedentary
+        self.saddling = saddling
+        self.subcurrent = subcurrent
+        self.unrecriminative = unrecriminative
+    }
+}
+
+// MARK: LandlubberlyClass convenience initializers and mutators
+
+extension LandlubberlyClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(LandlubberlyClass.self, from: data)
+        self.init(acropoleis: me.acropoleis, aminate: me.aminate, amyraldism: me.amyraldism, bipenniform: me.bipenniform, bugre: me.bugre, calycule: me.calycule, caoutchouc: me.caoutchouc, disprover: me.disprover, fitroot: me.fitroot, fulgently: me.fulgently, kickup: me.kickup, laevoversion: me.laevoversion, moter: me.moter, objectivity: me.objectivity, posterity: me.posterity, postnuptial: me.postnuptial, precedentary: me.precedentary, saddling: me.saddling, subcurrent: me.subcurrent, unrecriminative: me.unrecriminative)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acropoleis: JSONNull?? = nil,
+        aminate: JSONNull?? = nil,
+        amyraldism: JSONNull?? = nil,
+        bipenniform: JSONNull?? = nil,
+        bugre: JSONNull?? = nil,
+        calycule: JSONNull?? = nil,
+        caoutchouc: JSONNull?? = nil,
+        disprover: JSONNull?? = nil,
+        fitroot: JSONNull?? = nil,
+        fulgently: JSONNull?? = nil,
+        kickup: JSONNull?? = nil,
+        laevoversion: JSONNull?? = nil,
+        moter: JSONNull?? = nil,
+        objectivity: JSONNull?? = nil,
+        posterity: JSONNull?? = nil,
+        postnuptial: JSONNull?? = nil,
+        precedentary: JSONNull?? = nil,
+        saddling: JSONNull?? = nil,
+        subcurrent: JSONNull?? = nil,
+        unrecriminative: JSONNull?? = nil
+    ) -> LandlubberlyClass {
+        return LandlubberlyClass(
+            acropoleis: acropoleis ?? self.acropoleis,
+            aminate: aminate ?? self.aminate,
+            amyraldism: amyraldism ?? self.amyraldism,
+            bipenniform: bipenniform ?? self.bipenniform,
+            bugre: bugre ?? self.bugre,
+            calycule: calycule ?? self.calycule,
+            caoutchouc: caoutchouc ?? self.caoutchouc,
+            disprover: disprover ?? self.disprover,
+            fitroot: fitroot ?? self.fitroot,
+            fulgently: fulgently ?? self.fulgently,
+            kickup: kickup ?? self.kickup,
+            laevoversion: laevoversion ?? self.laevoversion,
+            moter: moter ?? self.moter,
+            objectivity: objectivity ?? self.objectivity,
+            posterity: posterity ?? self.posterity,
+            postnuptial: postnuptial ?? self.postnuptial,
+            precedentary: precedentary ?? self.precedentary,
+            saddling: saddling ?? self.saddling,
+            subcurrent: subcurrent ?? self.subcurrent,
+            unrecriminative: unrecriminative ?? self.unrecriminative
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Listener: Codable, Sendable {
+    case integer(Int)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Listener.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Listener"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum LupusElement: Codable, Sendable {
+    case integer(Int)
+    case lupusClass(LupusClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(LupusClass.self) {
+            self = .lupusClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(LupusElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LupusElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .lupusClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - LupusClass
+final class LupusClass: Codable, Sendable {
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let chlorioninae: Int?
+    let corvinae: Int?
+    let crassina: Int?
+    let disdiapason: String?
+    let exiguity: Int?
+    let farcist: Int?
+    let holographical: Int?
+    let homocerc: Bool?
+    let ichthyophagan: Int?
+    let implacable: Int?
+    let nonbookish: JSONNull?
+    let outshiner: Int?
+    let overweather: Int?
+    let protonegroid: Int?
+    let shallowish: Int?
+    let snoke: Int?
+    let snout: Int?
+    let surveillance: Int?
+    let threshingtime: Int?
+    let thysanocarpus: Int?
+    let unsignificantly: Int?
+    let unsnap: Int?
+    let vendible: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case chlorioninae = "Chlorioninae"
+        case corvinae = "Corvinae"
+        case crassina = "Crassina"
+        case disdiapason = "disdiapason"
+        case exiguity = "exiguity"
+        case farcist = "farcist"
+        case holographical = "holographical"
+        case homocerc = "homocerc"
+        case ichthyophagan = "ichthyophagan"
+        case implacable = "implacable"
+        case nonbookish = "nonbookish"
+        case outshiner = "outshiner"
+        case overweather = "overweather"
+        case protonegroid = "protonegroid"
+        case shallowish = "shallowish"
+        case snoke = "snoke"
+        case snout = "snout"
+        case surveillance = "surveillance"
+        case threshingtime = "threshingtime"
+        case thysanocarpus = "Thysanocarpus"
+        case unsignificantly = "unsignificantly"
+        case unsnap = "unsnap"
+        case vendible = "vendible"
+    }
+
+    init(catharticalness: Double?, chirotherium: Int?, chlorioninae: Int?, corvinae: Int?, crassina: Int?, disdiapason: String?, exiguity: Int?, farcist: Int?, holographical: Int?, homocerc: Bool?, ichthyophagan: Int?, implacable: Int?, nonbookish: JSONNull?, outshiner: Int?, overweather: Int?, protonegroid: Int?, shallowish: Int?, snoke: Int?, snout: Int?, surveillance: Int?, threshingtime: Int?, thysanocarpus: Int?, unsignificantly: Int?, unsnap: Int?, vendible: Int?) {
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.chlorioninae = chlorioninae
+        self.corvinae = corvinae
+        self.crassina = crassina
+        self.disdiapason = disdiapason
+        self.exiguity = exiguity
+        self.farcist = farcist
+        self.holographical = holographical
+        self.homocerc = homocerc
+        self.ichthyophagan = ichthyophagan
+        self.implacable = implacable
+        self.nonbookish = nonbookish
+        self.outshiner = outshiner
+        self.overweather = overweather
+        self.protonegroid = protonegroid
+        self.shallowish = shallowish
+        self.snoke = snoke
+        self.snout = snout
+        self.surveillance = surveillance
+        self.threshingtime = threshingtime
+        self.thysanocarpus = thysanocarpus
+        self.unsignificantly = unsignificantly
+        self.unsnap = unsnap
+        self.vendible = vendible
+    }
+}
+
+// MARK: LupusClass convenience initializers and mutators
+
+extension LupusClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(LupusClass.self, from: data)
+        self.init(catharticalness: me.catharticalness, chirotherium: me.chirotherium, chlorioninae: me.chlorioninae, corvinae: me.corvinae, crassina: me.crassina, disdiapason: me.disdiapason, exiguity: me.exiguity, farcist: me.farcist, holographical: me.holographical, homocerc: me.homocerc, ichthyophagan: me.ichthyophagan, implacable: me.implacable, nonbookish: me.nonbookish, outshiner: me.outshiner, overweather: me.overweather, protonegroid: me.protonegroid, shallowish: me.shallowish, snoke: me.snoke, snout: me.snout, surveillance: me.surveillance, threshingtime: me.threshingtime, thysanocarpus: me.thysanocarpus, unsignificantly: me.unsignificantly, unsnap: me.unsnap, vendible: me.vendible)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        chlorioninae: Int?? = nil,
+        corvinae: Int?? = nil,
+        crassina: Int?? = nil,
+        disdiapason: String?? = nil,
+        exiguity: Int?? = nil,
+        farcist: Int?? = nil,
+        holographical: Int?? = nil,
+        homocerc: Bool?? = nil,
+        ichthyophagan: Int?? = nil,
+        implacable: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        outshiner: Int?? = nil,
+        overweather: Int?? = nil,
+        protonegroid: Int?? = nil,
+        shallowish: Int?? = nil,
+        snoke: Int?? = nil,
+        snout: Int?? = nil,
+        surveillance: Int?? = nil,
+        threshingtime: Int?? = nil,
+        thysanocarpus: Int?? = nil,
+        unsignificantly: Int?? = nil,
+        unsnap: Int?? = nil,
+        vendible: Int?? = nil
+    ) -> LupusClass {
+        return LupusClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chlorioninae: chlorioninae ?? self.chlorioninae,
+            corvinae: corvinae ?? self.corvinae,
+            crassina: crassina ?? self.crassina,
+            disdiapason: disdiapason ?? self.disdiapason,
+            exiguity: exiguity ?? self.exiguity,
+            farcist: farcist ?? self.farcist,
+            holographical: holographical ?? self.holographical,
+            homocerc: homocerc ?? self.homocerc,
+            ichthyophagan: ichthyophagan ?? self.ichthyophagan,
+            implacable: implacable ?? self.implacable,
+            nonbookish: nonbookish ?? self.nonbookish,
+            outshiner: outshiner ?? self.outshiner,
+            overweather: overweather ?? self.overweather,
+            protonegroid: protonegroid ?? self.protonegroid,
+            shallowish: shallowish ?? self.shallowish,
+            snoke: snoke ?? self.snoke,
+            snout: snout ?? self.snout,
+            surveillance: surveillance ?? self.surveillance,
+            threshingtime: threshingtime ?? self.threshingtime,
+            thysanocarpus: thysanocarpus ?? self.thysanocarpus,
+            unsignificantly: unsignificantly ?? self.unsignificantly,
+            unsnap: unsnap ?? self.unsnap,
+            vendible: vendible ?? self.vendible
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Maslin
+final class Maslin: Codable, Sendable {
+    let alicant: Int?
+    let antiatonement: JSONNull?
+    let anticorrosive: Int?
+    let aphidozer: JSONNull?
+    let bakuninist: JSONNull?
+    let be: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let chub: Int?
+    let cuprosilicon: Int?
+    let curtailedly: Int?
+    let dellenite: Int?
+    let dimitry: Int?
+    let disdiapason: String?
+    let edifying: JSONNull?
+    let ethmoiditis: Int?
+    let gastralgy: JSONNull?
+    let goatherd: Int?
+    let hammerdress: Int?
+    let hangfire: JSONNull?
+    let homocerc: Bool?
+    let lacunosity: Int?
+    let longiloquence: JSONNull?
+    let mameliere: Int?
+    let motherless: JSONNull?
+    let nonbookish: JSONNull?
+    let noncorrodible: JSONNull?
+    let nonsensicality: JSONNull?
+    let oafishly: Int?
+    let pfund: JSONNull?
+    let preadvisory: JSONNull?
+    let retroflexed: JSONNull?
+    let saccharulmic: Int?
+    let scowlful: Int?
+    let secluded: JSONNull?
+    let slackage: JSONNull?
+    let sphaeridial: Int?
+    let spondulics: JSONNull?
+    let subsecive: Int?
+    let swellmobsman: JSONNull?
+    let trachyglossate: Int?
+    let trialogue: JSONNull?
+    let unassuaged: Int?
+    let ungross: JSONNull?
+    let unjudiciously: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case alicant = "Alicant"
+        case antiatonement = "antiatonement"
+        case anticorrosive = "anticorrosive"
+        case aphidozer = "aphidozer"
+        case bakuninist = "Bakuninist"
+        case be = "be"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case chub = "chub"
+        case cuprosilicon = "cuprosilicon"
+        case curtailedly = "curtailedly"
+        case dellenite = "dellenite"
+        case dimitry = "Dimitry"
+        case disdiapason = "disdiapason"
+        case edifying = "edifying"
+        case ethmoiditis = "ethmoiditis"
+        case gastralgy = "gastralgy"
+        case goatherd = "goatherd"
+        case hammerdress = "hammerdress"
+        case hangfire = "hangfire"
+        case homocerc = "homocerc"
+        case lacunosity = "lacunosity"
+        case longiloquence = "longiloquence"
+        case mameliere = "mameliere"
+        case motherless = "motherless"
+        case nonbookish = "nonbookish"
+        case noncorrodible = "noncorrodible"
+        case nonsensicality = "nonsensicality"
+        case oafishly = "oafishly"
+        case pfund = "pfund"
+        case preadvisory = "preadvisory"
+        case retroflexed = "retroflexed"
+        case saccharulmic = "saccharulmic"
+        case scowlful = "scowlful"
+        case secluded = "secluded"
+        case slackage = "slackage"
+        case sphaeridial = "sphaeridial"
+        case spondulics = "spondulics"
+        case subsecive = "subsecive"
+        case swellmobsman = "swellmobsman"
+        case trachyglossate = "trachyglossate"
+        case trialogue = "trialogue"
+        case unassuaged = "unassuaged"
+        case ungross = "ungross"
+        case unjudiciously = "unjudiciously"
+    }
+
+    init(alicant: Int?, antiatonement: JSONNull?, anticorrosive: Int?, aphidozer: JSONNull?, bakuninist: JSONNull?, be: Int?, catharticalness: Double?, chirotherium: Int?, chub: Int?, cuprosilicon: Int?, curtailedly: Int?, dellenite: Int?, dimitry: Int?, disdiapason: String?, edifying: JSONNull?, ethmoiditis: Int?, gastralgy: JSONNull?, goatherd: Int?, hammerdress: Int?, hangfire: JSONNull?, homocerc: Bool?, lacunosity: Int?, longiloquence: JSONNull?, mameliere: Int?, motherless: JSONNull?, nonbookish: JSONNull?, noncorrodible: JSONNull?, nonsensicality: JSONNull?, oafishly: Int?, pfund: JSONNull?, preadvisory: JSONNull?, retroflexed: JSONNull?, saccharulmic: Int?, scowlful: Int?, secluded: JSONNull?, slackage: JSONNull?, sphaeridial: Int?, spondulics: JSONNull?, subsecive: Int?, swellmobsman: JSONNull?, trachyglossate: Int?, trialogue: JSONNull?, unassuaged: Int?, ungross: JSONNull?, unjudiciously: JSONNull?) {
+        self.alicant = alicant
+        self.antiatonement = antiatonement
+        self.anticorrosive = anticorrosive
+        self.aphidozer = aphidozer
+        self.bakuninist = bakuninist
+        self.be = be
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.chub = chub
+        self.cuprosilicon = cuprosilicon
+        self.curtailedly = curtailedly
+        self.dellenite = dellenite
+        self.dimitry = dimitry
+        self.disdiapason = disdiapason
+        self.edifying = edifying
+        self.ethmoiditis = ethmoiditis
+        self.gastralgy = gastralgy
+        self.goatherd = goatherd
+        self.hammerdress = hammerdress
+        self.hangfire = hangfire
+        self.homocerc = homocerc
+        self.lacunosity = lacunosity
+        self.longiloquence = longiloquence
+        self.mameliere = mameliere
+        self.motherless = motherless
+        self.nonbookish = nonbookish
+        self.noncorrodible = noncorrodible
+        self.nonsensicality = nonsensicality
+        self.oafishly = oafishly
+        self.pfund = pfund
+        self.preadvisory = preadvisory
+        self.retroflexed = retroflexed
+        self.saccharulmic = saccharulmic
+        self.scowlful = scowlful
+        self.secluded = secluded
+        self.slackage = slackage
+        self.sphaeridial = sphaeridial
+        self.spondulics = spondulics
+        self.subsecive = subsecive
+        self.swellmobsman = swellmobsman
+        self.trachyglossate = trachyglossate
+        self.trialogue = trialogue
+        self.unassuaged = unassuaged
+        self.ungross = ungross
+        self.unjudiciously = unjudiciously
+    }
+}
+
+// MARK: Maslin convenience initializers and mutators
+
+extension Maslin {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Maslin.self, from: data)
+        self.init(alicant: me.alicant, antiatonement: me.antiatonement, anticorrosive: me.anticorrosive, aphidozer: me.aphidozer, bakuninist: me.bakuninist, be: me.be, catharticalness: me.catharticalness, chirotherium: me.chirotherium, chub: me.chub, cuprosilicon: me.cuprosilicon, curtailedly: me.curtailedly, dellenite: me.dellenite, dimitry: me.dimitry, disdiapason: me.disdiapason, edifying: me.edifying, ethmoiditis: me.ethmoiditis, gastralgy: me.gastralgy, goatherd: me.goatherd, hammerdress: me.hammerdress, hangfire: me.hangfire, homocerc: me.homocerc, lacunosity: me.lacunosity, longiloquence: me.longiloquence, mameliere: me.mameliere, motherless: me.motherless, nonbookish: me.nonbookish, noncorrodible: me.noncorrodible, nonsensicality: me.nonsensicality, oafishly: me.oafishly, pfund: me.pfund, preadvisory: me.preadvisory, retroflexed: me.retroflexed, saccharulmic: me.saccharulmic, scowlful: me.scowlful, secluded: me.secluded, slackage: me.slackage, sphaeridial: me.sphaeridial, spondulics: me.spondulics, subsecive: me.subsecive, swellmobsman: me.swellmobsman, trachyglossate: me.trachyglossate, trialogue: me.trialogue, unassuaged: me.unassuaged, ungross: me.ungross, unjudiciously: me.unjudiciously)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        alicant: Int?? = nil,
+        antiatonement: JSONNull?? = nil,
+        anticorrosive: Int?? = nil,
+        aphidozer: JSONNull?? = nil,
+        bakuninist: JSONNull?? = nil,
+        be: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        chub: Int?? = nil,
+        cuprosilicon: Int?? = nil,
+        curtailedly: Int?? = nil,
+        dellenite: Int?? = nil,
+        dimitry: Int?? = nil,
+        disdiapason: String?? = nil,
+        edifying: JSONNull?? = nil,
+        ethmoiditis: Int?? = nil,
+        gastralgy: JSONNull?? = nil,
+        goatherd: Int?? = nil,
+        hammerdress: Int?? = nil,
+        hangfire: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        lacunosity: Int?? = nil,
+        longiloquence: JSONNull?? = nil,
+        mameliere: Int?? = nil,
+        motherless: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        noncorrodible: JSONNull?? = nil,
+        nonsensicality: JSONNull?? = nil,
+        oafishly: Int?? = nil,
+        pfund: JSONNull?? = nil,
+        preadvisory: JSONNull?? = nil,
+        retroflexed: JSONNull?? = nil,
+        saccharulmic: Int?? = nil,
+        scowlful: Int?? = nil,
+        secluded: JSONNull?? = nil,
+        slackage: JSONNull?? = nil,
+        sphaeridial: Int?? = nil,
+        spondulics: JSONNull?? = nil,
+        subsecive: Int?? = nil,
+        swellmobsman: JSONNull?? = nil,
+        trachyglossate: Int?? = nil,
+        trialogue: JSONNull?? = nil,
+        unassuaged: Int?? = nil,
+        ungross: JSONNull?? = nil,
+        unjudiciously: JSONNull?? = nil
+    ) -> Maslin {
+        return Maslin(
+            alicant: alicant ?? self.alicant,
+            antiatonement: antiatonement ?? self.antiatonement,
+            anticorrosive: anticorrosive ?? self.anticorrosive,
+            aphidozer: aphidozer ?? self.aphidozer,
+            bakuninist: bakuninist ?? self.bakuninist,
+            be: be ?? self.be,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chub: chub ?? self.chub,
+            cuprosilicon: cuprosilicon ?? self.cuprosilicon,
+            curtailedly: curtailedly ?? self.curtailedly,
+            dellenite: dellenite ?? self.dellenite,
+            dimitry: dimitry ?? self.dimitry,
+            disdiapason: disdiapason ?? self.disdiapason,
+            edifying: edifying ?? self.edifying,
+            ethmoiditis: ethmoiditis ?? self.ethmoiditis,
+            gastralgy: gastralgy ?? self.gastralgy,
+            goatherd: goatherd ?? self.goatherd,
+            hammerdress: hammerdress ?? self.hammerdress,
+            hangfire: hangfire ?? self.hangfire,
+            homocerc: homocerc ?? self.homocerc,
+            lacunosity: lacunosity ?? self.lacunosity,
+            longiloquence: longiloquence ?? self.longiloquence,
+            mameliere: mameliere ?? self.mameliere,
+            motherless: motherless ?? self.motherless,
+            nonbookish: nonbookish ?? self.nonbookish,
+            noncorrodible: noncorrodible ?? self.noncorrodible,
+            nonsensicality: nonsensicality ?? self.nonsensicality,
+            oafishly: oafishly ?? self.oafishly,
+            pfund: pfund ?? self.pfund,
+            preadvisory: preadvisory ?? self.preadvisory,
+            retroflexed: retroflexed ?? self.retroflexed,
+            saccharulmic: saccharulmic ?? self.saccharulmic,
+            scowlful: scowlful ?? self.scowlful,
+            secluded: secluded ?? self.secluded,
+            slackage: slackage ?? self.slackage,
+            sphaeridial: sphaeridial ?? self.sphaeridial,
+            spondulics: spondulics ?? self.spondulics,
+            subsecive: subsecive ?? self.subsecive,
+            swellmobsman: swellmobsman ?? self.swellmobsman,
+            trachyglossate: trachyglossate ?? self.trachyglossate,
+            trialogue: trialogue ?? self.trialogue,
+            unassuaged: unassuaged ?? self.unassuaged,
+            ungross: ungross ?? self.ungross,
+            unjudiciously: unjudiciously ?? self.unjudiciously
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum MonaziteElement: Codable, Sendable {
+    case double(Double)
+    case monaziteClass(MonaziteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(MonaziteElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for MonaziteElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - MonaziteClass
+final class MonaziteClass: Codable, Sendable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+
+    init(catharticalness: Double, chirotherium: Int, disdiapason: String, homocerc: Bool, nonbookish: JSONNull?) {
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.homocerc = homocerc
+        self.nonbookish = nonbookish
+    }
+}
+
+// MARK: MonaziteClass convenience initializers and mutators
+
+extension MonaziteClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(MonaziteClass.self, from: data)
+        self.init(catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, homocerc: me.homocerc, nonbookish: me.nonbookish)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> MonaziteClass {
+        return MonaziteClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Monoliteral: Codable, Sendable {
+    case bool(Bool)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Monoliteral.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Monoliteral"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum MonotheisticallyElement: Codable, Sendable {
+    case monotheisticallyClass(MonotheisticallyClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(MonotheisticallyClass.self) {
+            self = .monotheisticallyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(MonotheisticallyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for MonotheisticallyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .monotheisticallyClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - MonotheisticallyClass
+final class MonotheisticallyClass: Codable, Sendable {
+    let blaspheme: JSONNull?
+    let catharticalness: Double?
+    let celiosalpingectomy: JSONNull?
+    let chirotherium: Int?
+    let consummativeness: JSONNull?
+    let disdiapason: String?
+    let egestive: JSONNull?
+    let enchylema: JSONNull?
+    let gasconade: JSONNull?
+    let holidayer: JSONNull?
+    let homocerc: Bool?
+    let intuitionalism: JSONNull?
+    let lophiostomate: JSONNull?
+    let nonbookish: JSONNull?
+    let nonvolition: JSONNull?
+    let palatableness: JSONNull?
+    let pimpery: JSONNull?
+    let previolation: JSONNull?
+    let reconveyance: JSONNull?
+    let registership: JSONNull?
+    let rhyacolite: JSONNull?
+    let smithereens: JSONNull?
+    let superedification: JSONNull?
+    let trust: JSONNull?
+    let whitestone: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case blaspheme = "blaspheme"
+        case catharticalness = "catharticalness"
+        case celiosalpingectomy = "celiosalpingectomy"
+        case chirotherium = "Chirotherium"
+        case consummativeness = "consummativeness"
+        case disdiapason = "disdiapason"
+        case egestive = "egestive"
+        case enchylema = "enchylema"
+        case gasconade = "gasconade"
+        case holidayer = "holidayer"
+        case homocerc = "homocerc"
+        case intuitionalism = "intuitionalism"
+        case lophiostomate = "lophiostomate"
+        case nonbookish = "nonbookish"
+        case nonvolition = "nonvolition"
+        case palatableness = "palatableness"
+        case pimpery = "pimpery"
+        case previolation = "previolation"
+        case reconveyance = "reconveyance"
+        case registership = "registership"
+        case rhyacolite = "rhyacolite"
+        case smithereens = "smithereens"
+        case superedification = "superedification"
+        case trust = "trust"
+        case whitestone = "whitestone"
+    }
+
+    init(blaspheme: JSONNull?, catharticalness: Double?, celiosalpingectomy: JSONNull?, chirotherium: Int?, consummativeness: JSONNull?, disdiapason: String?, egestive: JSONNull?, enchylema: JSONNull?, gasconade: JSONNull?, holidayer: JSONNull?, homocerc: Bool?, intuitionalism: JSONNull?, lophiostomate: JSONNull?, nonbookish: JSONNull?, nonvolition: JSONNull?, palatableness: JSONNull?, pimpery: JSONNull?, previolation: JSONNull?, reconveyance: JSONNull?, registership: JSONNull?, rhyacolite: JSONNull?, smithereens: JSONNull?, superedification: JSONNull?, trust: JSONNull?, whitestone: JSONNull?) {
+        self.blaspheme = blaspheme
+        self.catharticalness = catharticalness
+        self.celiosalpingectomy = celiosalpingectomy
+        self.chirotherium = chirotherium
+        self.consummativeness = consummativeness
+        self.disdiapason = disdiapason
+        self.egestive = egestive
+        self.enchylema = enchylema
+        self.gasconade = gasconade
+        self.holidayer = holidayer
+        self.homocerc = homocerc
+        self.intuitionalism = intuitionalism
+        self.lophiostomate = lophiostomate
+        self.nonbookish = nonbookish
+        self.nonvolition = nonvolition
+        self.palatableness = palatableness
+        self.pimpery = pimpery
+        self.previolation = previolation
+        self.reconveyance = reconveyance
+        self.registership = registership
+        self.rhyacolite = rhyacolite
+        self.smithereens = smithereens
+        self.superedification = superedification
+        self.trust = trust
+        self.whitestone = whitestone
+    }
+}
+
+// MARK: MonotheisticallyClass convenience initializers and mutators
+
+extension MonotheisticallyClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(MonotheisticallyClass.self, from: data)
+        self.init(blaspheme: me.blaspheme, catharticalness: me.catharticalness, celiosalpingectomy: me.celiosalpingectomy, chirotherium: me.chirotherium, consummativeness: me.consummativeness, disdiapason: me.disdiapason, egestive: me.egestive, enchylema: me.enchylema, gasconade: me.gasconade, holidayer: me.holidayer, homocerc: me.homocerc, intuitionalism: me.intuitionalism, lophiostomate: me.lophiostomate, nonbookish: me.nonbookish, nonvolition: me.nonvolition, palatableness: me.palatableness, pimpery: me.pimpery, previolation: me.previolation, reconveyance: me.reconveyance, registership: me.registership, rhyacolite: me.rhyacolite, smithereens: me.smithereens, superedification: me.superedification, trust: me.trust, whitestone: me.whitestone)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        blaspheme: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        celiosalpingectomy: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        consummativeness: JSONNull?? = nil,
+        disdiapason: String?? = nil,
+        egestive: JSONNull?? = nil,
+        enchylema: JSONNull?? = nil,
+        gasconade: JSONNull?? = nil,
+        holidayer: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        intuitionalism: JSONNull?? = nil,
+        lophiostomate: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        nonvolition: JSONNull?? = nil,
+        palatableness: JSONNull?? = nil,
+        pimpery: JSONNull?? = nil,
+        previolation: JSONNull?? = nil,
+        reconveyance: JSONNull?? = nil,
+        registership: JSONNull?? = nil,
+        rhyacolite: JSONNull?? = nil,
+        smithereens: JSONNull?? = nil,
+        superedification: JSONNull?? = nil,
+        trust: JSONNull?? = nil,
+        whitestone: JSONNull?? = nil
+    ) -> MonotheisticallyClass {
+        return MonotheisticallyClass(
+            blaspheme: blaspheme ?? self.blaspheme,
+            catharticalness: catharticalness ?? self.catharticalness,
+            celiosalpingectomy: celiosalpingectomy ?? self.celiosalpingectomy,
+            chirotherium: chirotherium ?? self.chirotherium,
+            consummativeness: consummativeness ?? self.consummativeness,
+            disdiapason: disdiapason ?? self.disdiapason,
+            egestive: egestive ?? self.egestive,
+            enchylema: enchylema ?? self.enchylema,
+            gasconade: gasconade ?? self.gasconade,
+            holidayer: holidayer ?? self.holidayer,
+            homocerc: homocerc ?? self.homocerc,
+            intuitionalism: intuitionalism ?? self.intuitionalism,
+            lophiostomate: lophiostomate ?? self.lophiostomate,
+            nonbookish: nonbookish ?? self.nonbookish,
+            nonvolition: nonvolition ?? self.nonvolition,
+            palatableness: palatableness ?? self.palatableness,
+            pimpery: pimpery ?? self.pimpery,
+            previolation: previolation ?? self.previolation,
+            reconveyance: reconveyance ?? self.reconveyance,
+            registership: registership ?? self.registership,
+            rhyacolite: rhyacolite ?? self.rhyacolite,
+            smithereens: smithereens ?? self.smithereens,
+            superedification: superedification ?? self.superedification,
+            trust: trust ?? self.trust,
+            whitestone: whitestone ?? self.whitestone
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Montage: Codable, Sendable {
+    case double(Double)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Montage.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Montage"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Moralness: Codable, Sendable {
+    case double(Double)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Moralness.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Moralness"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Mulishly: Codable, Sendable {
+    case double(Double)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Mulishly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Mulishly"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Myoscope: Codable, Sendable {
+    case bool(Bool)
+    case integer(Int)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Myoscope.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Myoscope"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Neuromastic: Codable, Sendable {
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Neuromastic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Neuromastic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Noncontributing
+final class Noncontributing: Codable, Sendable {
+    let estevin: String
+    let jolterhead: Double
+    let sauternes: Int
+    let sparsely: Bool
+    let unrequested: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case estevin = "estevin"
+        case jolterhead = "jolterhead"
+        case sauternes = "sauternes"
+        case sparsely = "sparsely"
+        case unrequested = "unrequested"
+    }
+
+    init(estevin: String, jolterhead: Double, sauternes: Int, sparsely: Bool, unrequested: JSONNull?) {
+        self.estevin = estevin
+        self.jolterhead = jolterhead
+        self.sauternes = sauternes
+        self.sparsely = sparsely
+        self.unrequested = unrequested
+    }
+}
+
+// MARK: Noncontributing convenience initializers and mutators
+
+extension Noncontributing {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Noncontributing.self, from: data)
+        self.init(estevin: me.estevin, jolterhead: me.jolterhead, sauternes: me.sauternes, sparsely: me.sparsely, unrequested: me.unrequested)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        estevin: String? = nil,
+        jolterhead: Double? = nil,
+        sauternes: Int? = nil,
+        sparsely: Bool? = nil,
+        unrequested: JSONNull?? = nil
+    ) -> Noncontributing {
+        return Noncontributing(
+            estevin: estevin ?? self.estevin,
+            jolterhead: jolterhead ?? self.jolterhead,
+            sauternes: sauternes ?? self.sauternes,
+            sparsely: sparsely ?? self.sparsely,
+            unrequested: unrequested ?? self.unrequested
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Nonnervous: Codable, Sendable {
+    case bool(Bool)
+    case integer(Int)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Nonnervous.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Nonnervous"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Nonvaluation: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Nonvaluation.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Nonvaluation"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum OccupationalistElement: Codable, Sendable {
+    case nullArray([JSONNull?])
+    case occupationalistClass(OccupationalistClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(OccupationalistClass.self) {
+            self = .occupationalistClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(OccupationalistElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for OccupationalistElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .occupationalistClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - OccupationalistClass
+final class OccupationalistClass: Codable, Sendable {
+    let beholdable: JSONNull?
+    let brotuliform: JSONNull?
+    let chimakum: JSONNull?
+    let doodler: JSONNull?
+    let emulsin: JSONNull?
+    let fin: JSONNull?
+    let flourishing: JSONNull?
+    let flueless: JSONNull?
+    let furtively: JSONNull?
+    let gritter: JSONNull?
+    let interwish: JSONNull?
+    let monoxylic: JSONNull?
+    let myristic: JSONNull?
+    let nightwear: JSONNull?
+    let peruser: JSONNull?
+    let theoastrological: JSONNull?
+    let thumby: JSONNull?
+    let tingitid: JSONNull?
+    let trailless: JSONNull?
+    let unpocketed: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case beholdable = "beholdable"
+        case brotuliform = "brotuliform"
+        case chimakum = "Chimakum"
+        case doodler = "doodler"
+        case emulsin = "emulsin"
+        case fin = "Fin"
+        case flourishing = "flourishing"
+        case flueless = "flueless"
+        case furtively = "furtively"
+        case gritter = "gritter"
+        case interwish = "interwish"
+        case monoxylic = "monoxylic"
+        case myristic = "myristic"
+        case nightwear = "nightwear"
+        case peruser = "peruser"
+        case theoastrological = "theoastrological"
+        case thumby = "thumby"
+        case tingitid = "tingitid"
+        case trailless = "trailless"
+        case unpocketed = "unpocketed"
+    }
+
+    init(beholdable: JSONNull?, brotuliform: JSONNull?, chimakum: JSONNull?, doodler: JSONNull?, emulsin: JSONNull?, fin: JSONNull?, flourishing: JSONNull?, flueless: JSONNull?, furtively: JSONNull?, gritter: JSONNull?, interwish: JSONNull?, monoxylic: JSONNull?, myristic: JSONNull?, nightwear: JSONNull?, peruser: JSONNull?, theoastrological: JSONNull?, thumby: JSONNull?, tingitid: JSONNull?, trailless: JSONNull?, unpocketed: JSONNull?) {
+        self.beholdable = beholdable
+        self.brotuliform = brotuliform
+        self.chimakum = chimakum
+        self.doodler = doodler
+        self.emulsin = emulsin
+        self.fin = fin
+        self.flourishing = flourishing
+        self.flueless = flueless
+        self.furtively = furtively
+        self.gritter = gritter
+        self.interwish = interwish
+        self.monoxylic = monoxylic
+        self.myristic = myristic
+        self.nightwear = nightwear
+        self.peruser = peruser
+        self.theoastrological = theoastrological
+        self.thumby = thumby
+        self.tingitid = tingitid
+        self.trailless = trailless
+        self.unpocketed = unpocketed
+    }
+}
+
+// MARK: OccupationalistClass convenience initializers and mutators
+
+extension OccupationalistClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(OccupationalistClass.self, from: data)
+        self.init(beholdable: me.beholdable, brotuliform: me.brotuliform, chimakum: me.chimakum, doodler: me.doodler, emulsin: me.emulsin, fin: me.fin, flourishing: me.flourishing, flueless: me.flueless, furtively: me.furtively, gritter: me.gritter, interwish: me.interwish, monoxylic: me.monoxylic, myristic: me.myristic, nightwear: me.nightwear, peruser: me.peruser, theoastrological: me.theoastrological, thumby: me.thumby, tingitid: me.tingitid, trailless: me.trailless, unpocketed: me.unpocketed)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        beholdable: JSONNull?? = nil,
+        brotuliform: JSONNull?? = nil,
+        chimakum: JSONNull?? = nil,
+        doodler: JSONNull?? = nil,
+        emulsin: JSONNull?? = nil,
+        fin: JSONNull?? = nil,
+        flourishing: JSONNull?? = nil,
+        flueless: JSONNull?? = nil,
+        furtively: JSONNull?? = nil,
+        gritter: JSONNull?? = nil,
+        interwish: JSONNull?? = nil,
+        monoxylic: JSONNull?? = nil,
+        myristic: JSONNull?? = nil,
+        nightwear: JSONNull?? = nil,
+        peruser: JSONNull?? = nil,
+        theoastrological: JSONNull?? = nil,
+        thumby: JSONNull?? = nil,
+        tingitid: JSONNull?? = nil,
+        trailless: JSONNull?? = nil,
+        unpocketed: JSONNull?? = nil
+    ) -> OccupationalistClass {
+        return OccupationalistClass(
+            beholdable: beholdable ?? self.beholdable,
+            brotuliform: brotuliform ?? self.brotuliform,
+            chimakum: chimakum ?? self.chimakum,
+            doodler: doodler ?? self.doodler,
+            emulsin: emulsin ?? self.emulsin,
+            fin: fin ?? self.fin,
+            flourishing: flourishing ?? self.flourishing,
+            flueless: flueless ?? self.flueless,
+            furtively: furtively ?? self.furtively,
+            gritter: gritter ?? self.gritter,
+            interwish: interwish ?? self.interwish,
+            monoxylic: monoxylic ?? self.monoxylic,
+            myristic: myristic ?? self.myristic,
+            nightwear: nightwear ?? self.nightwear,
+            peruser: peruser ?? self.peruser,
+            theoastrological: theoastrological ?? self.theoastrological,
+            thumby: thumby ?? self.thumby,
+            tingitid: tingitid ?? self.tingitid,
+            trailless: trailless ?? self.trailless,
+            unpocketed: unpocketed ?? self.unpocketed
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum OutrivalElement: Codable, Sendable {
+    case double(Double)
+    case outrivalClass(OutrivalClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(OutrivalClass.self) {
+            self = .outrivalClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(OutrivalElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for OutrivalElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .outrivalClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - OutrivalClass
+final class OutrivalClass: Codable, Sendable {
+    let adroitly: JSONNull?
+    let bridehood: JSONNull?
+    let castoroides: JSONNull?
+    let czechoslovak: JSONNull?
+    let diagenesis: JSONNull?
+    let dihexahedron: JSONNull?
+    let dopester: JSONNull?
+    let eumerism: JSONNull?
+    let flyness: JSONNull?
+    let fouler: JSONNull?
+    let laudanosine: JSONNull?
+    let lingulidae: JSONNull?
+    let minutary: JSONNull?
+    let mitra: JSONNull?
+    let opisthorchiasis: JSONNull?
+    let pensively: JSONNull?
+    let pubigerous: JSONNull?
+    let rebellious: JSONNull?
+    let recodify: JSONNull?
+    let unpaced: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case adroitly = "adroitly"
+        case bridehood = "bridehood"
+        case castoroides = "Castoroides"
+        case czechoslovak = "Czechoslovak"
+        case diagenesis = "diagenesis"
+        case dihexahedron = "dihexahedron"
+        case dopester = "dopester"
+        case eumerism = "eumerism"
+        case flyness = "flyness"
+        case fouler = "fouler"
+        case laudanosine = "laudanosine"
+        case lingulidae = "Lingulidae"
+        case minutary = "minutary"
+        case mitra = "mitra"
+        case opisthorchiasis = "opisthorchiasis"
+        case pensively = "pensively"
+        case pubigerous = "pubigerous"
+        case rebellious = "rebellious"
+        case recodify = "recodify"
+        case unpaced = "unpaced"
+    }
+
+    init(adroitly: JSONNull?, bridehood: JSONNull?, castoroides: JSONNull?, czechoslovak: JSONNull?, diagenesis: JSONNull?, dihexahedron: JSONNull?, dopester: JSONNull?, eumerism: JSONNull?, flyness: JSONNull?, fouler: JSONNull?, laudanosine: JSONNull?, lingulidae: JSONNull?, minutary: JSONNull?, mitra: JSONNull?, opisthorchiasis: JSONNull?, pensively: JSONNull?, pubigerous: JSONNull?, rebellious: JSONNull?, recodify: JSONNull?, unpaced: JSONNull?) {
+        self.adroitly = adroitly
+        self.bridehood = bridehood
+        self.castoroides = castoroides
+        self.czechoslovak = czechoslovak
+        self.diagenesis = diagenesis
+        self.dihexahedron = dihexahedron
+        self.dopester = dopester
+        self.eumerism = eumerism
+        self.flyness = flyness
+        self.fouler = fouler
+        self.laudanosine = laudanosine
+        self.lingulidae = lingulidae
+        self.minutary = minutary
+        self.mitra = mitra
+        self.opisthorchiasis = opisthorchiasis
+        self.pensively = pensively
+        self.pubigerous = pubigerous
+        self.rebellious = rebellious
+        self.recodify = recodify
+        self.unpaced = unpaced
+    }
+}
+
+// MARK: OutrivalClass convenience initializers and mutators
+
+extension OutrivalClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(OutrivalClass.self, from: data)
+        self.init(adroitly: me.adroitly, bridehood: me.bridehood, castoroides: me.castoroides, czechoslovak: me.czechoslovak, diagenesis: me.diagenesis, dihexahedron: me.dihexahedron, dopester: me.dopester, eumerism: me.eumerism, flyness: me.flyness, fouler: me.fouler, laudanosine: me.laudanosine, lingulidae: me.lingulidae, minutary: me.minutary, mitra: me.mitra, opisthorchiasis: me.opisthorchiasis, pensively: me.pensively, pubigerous: me.pubigerous, rebellious: me.rebellious, recodify: me.recodify, unpaced: me.unpaced)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        adroitly: JSONNull?? = nil,
+        bridehood: JSONNull?? = nil,
+        castoroides: JSONNull?? = nil,
+        czechoslovak: JSONNull?? = nil,
+        diagenesis: JSONNull?? = nil,
+        dihexahedron: JSONNull?? = nil,
+        dopester: JSONNull?? = nil,
+        eumerism: JSONNull?? = nil,
+        flyness: JSONNull?? = nil,
+        fouler: JSONNull?? = nil,
+        laudanosine: JSONNull?? = nil,
+        lingulidae: JSONNull?? = nil,
+        minutary: JSONNull?? = nil,
+        mitra: JSONNull?? = nil,
+        opisthorchiasis: JSONNull?? = nil,
+        pensively: JSONNull?? = nil,
+        pubigerous: JSONNull?? = nil,
+        rebellious: JSONNull?? = nil,
+        recodify: JSONNull?? = nil,
+        unpaced: JSONNull?? = nil
+    ) -> OutrivalClass {
+        return OutrivalClass(
+            adroitly: adroitly ?? self.adroitly,
+            bridehood: bridehood ?? self.bridehood,
+            castoroides: castoroides ?? self.castoroides,
+            czechoslovak: czechoslovak ?? self.czechoslovak,
+            diagenesis: diagenesis ?? self.diagenesis,
+            dihexahedron: dihexahedron ?? self.dihexahedron,
+            dopester: dopester ?? self.dopester,
+            eumerism: eumerism ?? self.eumerism,
+            flyness: flyness ?? self.flyness,
+            fouler: fouler ?? self.fouler,
+            laudanosine: laudanosine ?? self.laudanosine,
+            lingulidae: lingulidae ?? self.lingulidae,
+            minutary: minutary ?? self.minutary,
+            mitra: mitra ?? self.mitra,
+            opisthorchiasis: opisthorchiasis ?? self.opisthorchiasis,
+            pensively: pensively ?? self.pensively,
+            pubigerous: pubigerous ?? self.pubigerous,
+            rebellious: rebellious ?? self.rebellious,
+            recodify: recodify ?? self.recodify,
+            unpaced: unpaced ?? self.unpaced
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Paleographically: Codable, Sendable {
+    case double(Double)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Paleographically.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Paleographically"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Pamphletwise: Codable, Sendable {
+    case integer(Int)
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Pamphletwise.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pamphletwise"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Pediatric: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Pediatric.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pediatric"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum PiaculumElement: Codable, Sendable {
+    case double(Double)
+    case piaculumClass(PiaculumClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(PiaculumClass.self) {
+            self = .piaculumClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(PiaculumElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PiaculumElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .piaculumClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - PiaculumClass
+final class PiaculumClass: Codable, Sendable {
+    let alada: Int?
+    let amphistomous: Int?
+    let boysenberry: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let decardinalize: Int?
+    let discouragement: Int?
+    let disdiapason: String?
+    let doitrified: Int?
+    let hexaspermous: Int?
+    let homocerc: Bool?
+    let insinking: Int?
+    let loathfulness: Int?
+    let miasmatical: Int?
+    let neurofibril: Int?
+    let nonbookish: JSONNull?
+    let phonendoscope: Int?
+    let pilferment: Int?
+    let predismissory: Int?
+    let preinscription: Int?
+    let quotative: Int?
+    let sienna: Int?
+    let thorax: Int?
+    let yachting: Int?
+    let zipper: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case alada = "alada"
+        case amphistomous = "amphistomous"
+        case boysenberry = "boysenberry"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case decardinalize = "decardinalize"
+        case discouragement = "discouragement"
+        case disdiapason = "disdiapason"
+        case doitrified = "doitrified"
+        case hexaspermous = "hexaspermous"
+        case homocerc = "homocerc"
+        case insinking = "insinking"
+        case loathfulness = "loathfulness"
+        case miasmatical = "miasmatical"
+        case neurofibril = "neurofibril"
+        case nonbookish = "nonbookish"
+        case phonendoscope = "phonendoscope"
+        case pilferment = "pilferment"
+        case predismissory = "predismissory"
+        case preinscription = "preinscription"
+        case quotative = "quotative"
+        case sienna = "sienna"
+        case thorax = "thorax"
+        case yachting = "yachting"
+        case zipper = "Zipper"
+    }
+
+    init(alada: Int?, amphistomous: Int?, boysenberry: Int?, catharticalness: Double?, chirotherium: Int?, decardinalize: Int?, discouragement: Int?, disdiapason: String?, doitrified: Int?, hexaspermous: Int?, homocerc: Bool?, insinking: Int?, loathfulness: Int?, miasmatical: Int?, neurofibril: Int?, nonbookish: JSONNull?, phonendoscope: Int?, pilferment: Int?, predismissory: Int?, preinscription: Int?, quotative: Int?, sienna: Int?, thorax: Int?, yachting: Int?, zipper: Int?) {
+        self.alada = alada
+        self.amphistomous = amphistomous
+        self.boysenberry = boysenberry
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.decardinalize = decardinalize
+        self.discouragement = discouragement
+        self.disdiapason = disdiapason
+        self.doitrified = doitrified
+        self.hexaspermous = hexaspermous
+        self.homocerc = homocerc
+        self.insinking = insinking
+        self.loathfulness = loathfulness
+        self.miasmatical = miasmatical
+        self.neurofibril = neurofibril
+        self.nonbookish = nonbookish
+        self.phonendoscope = phonendoscope
+        self.pilferment = pilferment
+        self.predismissory = predismissory
+        self.preinscription = preinscription
+        self.quotative = quotative
+        self.sienna = sienna
+        self.thorax = thorax
+        self.yachting = yachting
+        self.zipper = zipper
+    }
+}
+
+// MARK: PiaculumClass convenience initializers and mutators
+
+extension PiaculumClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(PiaculumClass.self, from: data)
+        self.init(alada: me.alada, amphistomous: me.amphistomous, boysenberry: me.boysenberry, catharticalness: me.catharticalness, chirotherium: me.chirotherium, decardinalize: me.decardinalize, discouragement: me.discouragement, disdiapason: me.disdiapason, doitrified: me.doitrified, hexaspermous: me.hexaspermous, homocerc: me.homocerc, insinking: me.insinking, loathfulness: me.loathfulness, miasmatical: me.miasmatical, neurofibril: me.neurofibril, nonbookish: me.nonbookish, phonendoscope: me.phonendoscope, pilferment: me.pilferment, predismissory: me.predismissory, preinscription: me.preinscription, quotative: me.quotative, sienna: me.sienna, thorax: me.thorax, yachting: me.yachting, zipper: me.zipper)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        alada: Int?? = nil,
+        amphistomous: Int?? = nil,
+        boysenberry: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        decardinalize: Int?? = nil,
+        discouragement: Int?? = nil,
+        disdiapason: String?? = nil,
+        doitrified: Int?? = nil,
+        hexaspermous: Int?? = nil,
+        homocerc: Bool?? = nil,
+        insinking: Int?? = nil,
+        loathfulness: Int?? = nil,
+        miasmatical: Int?? = nil,
+        neurofibril: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        phonendoscope: Int?? = nil,
+        pilferment: Int?? = nil,
+        predismissory: Int?? = nil,
+        preinscription: Int?? = nil,
+        quotative: Int?? = nil,
+        sienna: Int?? = nil,
+        thorax: Int?? = nil,
+        yachting: Int?? = nil,
+        zipper: Int?? = nil
+    ) -> PiaculumClass {
+        return PiaculumClass(
+            alada: alada ?? self.alada,
+            amphistomous: amphistomous ?? self.amphistomous,
+            boysenberry: boysenberry ?? self.boysenberry,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            decardinalize: decardinalize ?? self.decardinalize,
+            discouragement: discouragement ?? self.discouragement,
+            disdiapason: disdiapason ?? self.disdiapason,
+            doitrified: doitrified ?? self.doitrified,
+            hexaspermous: hexaspermous ?? self.hexaspermous,
+            homocerc: homocerc ?? self.homocerc,
+            insinking: insinking ?? self.insinking,
+            loathfulness: loathfulness ?? self.loathfulness,
+            miasmatical: miasmatical ?? self.miasmatical,
+            neurofibril: neurofibril ?? self.neurofibril,
+            nonbookish: nonbookish ?? self.nonbookish,
+            phonendoscope: phonendoscope ?? self.phonendoscope,
+            pilferment: pilferment ?? self.pilferment,
+            predismissory: predismissory ?? self.predismissory,
+            preinscription: preinscription ?? self.preinscription,
+            quotative: quotative ?? self.quotative,
+            sienna: sienna ?? self.sienna,
+            thorax: thorax ?? self.thorax,
+            yachting: yachting ?? self.yachting,
+            zipper: zipper ?? self.zipper
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Piccadilly: Codable, Sendable {
+    case double(Double)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Piccadilly.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Piccadilly"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Piffler: Codable, Sendable {
+    case monaziteClass(MonaziteClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Piffler.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Piffler"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .monaziteClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Pithful: Codable, Sendable {
+    case bool(Bool)
+    case integer(Int)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Pithful.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Pithful"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Placuntiti: Codable, Sendable {
+    case integer(Int)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Placuntiti.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Placuntiti"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Plectopterous: Codable, Sendable {
+    case double(Double)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Plectopterous.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Plectopterous"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Pneumocele
+final class Pneumocele: Codable, Sendable {
+    let carbonarism: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let cineolic: JSONNull?
+    let cobbly: JSONNull?
+    let conchyliferous: JSONNull?
+    let congregation: JSONNull?
+    let disdiapason: String?
+    let enterotomy: JSONNull?
+    let entophytal: JSONNull?
+    let fewtrils: JSONNull?
+    let herem: JSONNull?
+    let homocerc: Bool?
+    let koniga: JSONNull?
+    let meticulosity: JSONNull?
+    let micky: JSONNull?
+    let mismarriage: JSONNull?
+    let neurotrophic: JSONNull?
+    let nonbookish: JSONNull?
+    let persuasively: JSONNull?
+    let replaceable: JSONNull?
+    let silex: JSONNull?
+    let taillight: JSONNull?
+    let unjealous: JSONNull?
+    let visitorial: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case carbonarism = "Carbonarism"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case cineolic = "cineolic"
+        case cobbly = "cobbly"
+        case conchyliferous = "conchyliferous"
+        case congregation = "congregation"
+        case disdiapason = "disdiapason"
+        case enterotomy = "enterotomy"
+        case entophytal = "entophytal"
+        case fewtrils = "fewtrils"
+        case herem = "herem"
+        case homocerc = "homocerc"
+        case koniga = "Koniga"
+        case meticulosity = "meticulosity"
+        case micky = "Micky"
+        case mismarriage = "mismarriage"
+        case neurotrophic = "neurotrophic"
+        case nonbookish = "nonbookish"
+        case persuasively = "persuasively"
+        case replaceable = "replaceable"
+        case silex = "silex"
+        case taillight = "taillight"
+        case unjealous = "unjealous"
+        case visitorial = "visitorial"
+    }
+
+    init(carbonarism: JSONNull?, catharticalness: Double?, chirotherium: Int?, cineolic: JSONNull?, cobbly: JSONNull?, conchyliferous: JSONNull?, congregation: JSONNull?, disdiapason: String?, enterotomy: JSONNull?, entophytal: JSONNull?, fewtrils: JSONNull?, herem: JSONNull?, homocerc: Bool?, koniga: JSONNull?, meticulosity: JSONNull?, micky: JSONNull?, mismarriage: JSONNull?, neurotrophic: JSONNull?, nonbookish: JSONNull?, persuasively: JSONNull?, replaceable: JSONNull?, silex: JSONNull?, taillight: JSONNull?, unjealous: JSONNull?, visitorial: JSONNull?) {
+        self.carbonarism = carbonarism
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.cineolic = cineolic
+        self.cobbly = cobbly
+        self.conchyliferous = conchyliferous
+        self.congregation = congregation
+        self.disdiapason = disdiapason
+        self.enterotomy = enterotomy
+        self.entophytal = entophytal
+        self.fewtrils = fewtrils
+        self.herem = herem
+        self.homocerc = homocerc
+        self.koniga = koniga
+        self.meticulosity = meticulosity
+        self.micky = micky
+        self.mismarriage = mismarriage
+        self.neurotrophic = neurotrophic
+        self.nonbookish = nonbookish
+        self.persuasively = persuasively
+        self.replaceable = replaceable
+        self.silex = silex
+        self.taillight = taillight
+        self.unjealous = unjealous
+        self.visitorial = visitorial
+    }
+}
+
+// MARK: Pneumocele convenience initializers and mutators
+
+extension Pneumocele {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Pneumocele.self, from: data)
+        self.init(carbonarism: me.carbonarism, catharticalness: me.catharticalness, chirotherium: me.chirotherium, cineolic: me.cineolic, cobbly: me.cobbly, conchyliferous: me.conchyliferous, congregation: me.congregation, disdiapason: me.disdiapason, enterotomy: me.enterotomy, entophytal: me.entophytal, fewtrils: me.fewtrils, herem: me.herem, homocerc: me.homocerc, koniga: me.koniga, meticulosity: me.meticulosity, micky: me.micky, mismarriage: me.mismarriage, neurotrophic: me.neurotrophic, nonbookish: me.nonbookish, persuasively: me.persuasively, replaceable: me.replaceable, silex: me.silex, taillight: me.taillight, unjealous: me.unjealous, visitorial: me.visitorial)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        carbonarism: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        cineolic: JSONNull?? = nil,
+        cobbly: JSONNull?? = nil,
+        conchyliferous: JSONNull?? = nil,
+        congregation: JSONNull?? = nil,
+        disdiapason: String?? = nil,
+        enterotomy: JSONNull?? = nil,
+        entophytal: JSONNull?? = nil,
+        fewtrils: JSONNull?? = nil,
+        herem: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        koniga: JSONNull?? = nil,
+        meticulosity: JSONNull?? = nil,
+        micky: JSONNull?? = nil,
+        mismarriage: JSONNull?? = nil,
+        neurotrophic: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        persuasively: JSONNull?? = nil,
+        replaceable: JSONNull?? = nil,
+        silex: JSONNull?? = nil,
+        taillight: JSONNull?? = nil,
+        unjealous: JSONNull?? = nil,
+        visitorial: JSONNull?? = nil
+    ) -> Pneumocele {
+        return Pneumocele(
+            carbonarism: carbonarism ?? self.carbonarism,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            cineolic: cineolic ?? self.cineolic,
+            cobbly: cobbly ?? self.cobbly,
+            conchyliferous: conchyliferous ?? self.conchyliferous,
+            congregation: congregation ?? self.congregation,
+            disdiapason: disdiapason ?? self.disdiapason,
+            enterotomy: enterotomy ?? self.enterotomy,
+            entophytal: entophytal ?? self.entophytal,
+            fewtrils: fewtrils ?? self.fewtrils,
+            herem: herem ?? self.herem,
+            homocerc: homocerc ?? self.homocerc,
+            koniga: koniga ?? self.koniga,
+            meticulosity: meticulosity ?? self.meticulosity,
+            micky: micky ?? self.micky,
+            mismarriage: mismarriage ?? self.mismarriage,
+            neurotrophic: neurotrophic ?? self.neurotrophic,
+            nonbookish: nonbookish ?? self.nonbookish,
+            persuasively: persuasively ?? self.persuasively,
+            replaceable: replaceable ?? self.replaceable,
+            silex: silex ?? self.silex,
+            taillight: taillight ?? self.taillight,
+            unjealous: unjealous ?? self.unjealous,
+            visitorial: visitorial ?? self.visitorial
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Poliorcetic: Codable, Sendable {
+    case bool(Bool)
+    case monaziteClass(MonaziteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Poliorcetic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Poliorcetic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Poormaster: Codable, Sendable {
+    case integerArray([Int])
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Poormaster.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Poormaster"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum PotwhiskyElement: Codable, Sendable {
+    case integer(Int)
+    case potwhiskyClass(PotwhiskyClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(PotwhiskyClass.self) {
+            self = .potwhiskyClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(PotwhiskyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PotwhiskyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .potwhiskyClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - PotwhiskyClass
+final class PotwhiskyClass: Codable, Sendable {
+    let arciform: JSONNull?
+    let cresolin: JSONNull?
+    let disheartener: JSONNull?
+    let disproportionable: JSONNull?
+    let euchorda: JSONNull?
+    let ferryway: JSONNull?
+    let filamentiferous: JSONNull?
+    let flemish: JSONNull?
+    let forgainst: JSONNull?
+    let grainering: JSONNull?
+    let irrevoluble: JSONNull?
+    let kindredship: JSONNull?
+    let pinguitudinous: JSONNull?
+    let simpletonic: JSONNull?
+    let singsong: JSONNull?
+    let submergement: JSONNull?
+    let supraoesophagal: JSONNull?
+    let thrashel: JSONNull?
+    let tyremesis: JSONNull?
+    let yoruba: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case arciform = "arciform"
+        case cresolin = "cresolin"
+        case disheartener = "disheartener"
+        case disproportionable = "disproportionable"
+        case euchorda = "Euchorda"
+        case ferryway = "ferryway"
+        case filamentiferous = "filamentiferous"
+        case flemish = "flemish"
+        case forgainst = "forgainst"
+        case grainering = "grainering"
+        case irrevoluble = "irrevoluble"
+        case kindredship = "kindredship"
+        case pinguitudinous = "pinguitudinous"
+        case simpletonic = "simpletonic"
+        case singsong = "singsong"
+        case submergement = "submergement"
+        case supraoesophagal = "supraoesophagal"
+        case thrashel = "thrashel"
+        case tyremesis = "tyremesis"
+        case yoruba = "Yoruba"
+    }
+
+    init(arciform: JSONNull?, cresolin: JSONNull?, disheartener: JSONNull?, disproportionable: JSONNull?, euchorda: JSONNull?, ferryway: JSONNull?, filamentiferous: JSONNull?, flemish: JSONNull?, forgainst: JSONNull?, grainering: JSONNull?, irrevoluble: JSONNull?, kindredship: JSONNull?, pinguitudinous: JSONNull?, simpletonic: JSONNull?, singsong: JSONNull?, submergement: JSONNull?, supraoesophagal: JSONNull?, thrashel: JSONNull?, tyremesis: JSONNull?, yoruba: JSONNull?) {
+        self.arciform = arciform
+        self.cresolin = cresolin
+        self.disheartener = disheartener
+        self.disproportionable = disproportionable
+        self.euchorda = euchorda
+        self.ferryway = ferryway
+        self.filamentiferous = filamentiferous
+        self.flemish = flemish
+        self.forgainst = forgainst
+        self.grainering = grainering
+        self.irrevoluble = irrevoluble
+        self.kindredship = kindredship
+        self.pinguitudinous = pinguitudinous
+        self.simpletonic = simpletonic
+        self.singsong = singsong
+        self.submergement = submergement
+        self.supraoesophagal = supraoesophagal
+        self.thrashel = thrashel
+        self.tyremesis = tyremesis
+        self.yoruba = yoruba
+    }
+}
+
+// MARK: PotwhiskyClass convenience initializers and mutators
+
+extension PotwhiskyClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(PotwhiskyClass.self, from: data)
+        self.init(arciform: me.arciform, cresolin: me.cresolin, disheartener: me.disheartener, disproportionable: me.disproportionable, euchorda: me.euchorda, ferryway: me.ferryway, filamentiferous: me.filamentiferous, flemish: me.flemish, forgainst: me.forgainst, grainering: me.grainering, irrevoluble: me.irrevoluble, kindredship: me.kindredship, pinguitudinous: me.pinguitudinous, simpletonic: me.simpletonic, singsong: me.singsong, submergement: me.submergement, supraoesophagal: me.supraoesophagal, thrashel: me.thrashel, tyremesis: me.tyremesis, yoruba: me.yoruba)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        arciform: JSONNull?? = nil,
+        cresolin: JSONNull?? = nil,
+        disheartener: JSONNull?? = nil,
+        disproportionable: JSONNull?? = nil,
+        euchorda: JSONNull?? = nil,
+        ferryway: JSONNull?? = nil,
+        filamentiferous: JSONNull?? = nil,
+        flemish: JSONNull?? = nil,
+        forgainst: JSONNull?? = nil,
+        grainering: JSONNull?? = nil,
+        irrevoluble: JSONNull?? = nil,
+        kindredship: JSONNull?? = nil,
+        pinguitudinous: JSONNull?? = nil,
+        simpletonic: JSONNull?? = nil,
+        singsong: JSONNull?? = nil,
+        submergement: JSONNull?? = nil,
+        supraoesophagal: JSONNull?? = nil,
+        thrashel: JSONNull?? = nil,
+        tyremesis: JSONNull?? = nil,
+        yoruba: JSONNull?? = nil
+    ) -> PotwhiskyClass {
+        return PotwhiskyClass(
+            arciform: arciform ?? self.arciform,
+            cresolin: cresolin ?? self.cresolin,
+            disheartener: disheartener ?? self.disheartener,
+            disproportionable: disproportionable ?? self.disproportionable,
+            euchorda: euchorda ?? self.euchorda,
+            ferryway: ferryway ?? self.ferryway,
+            filamentiferous: filamentiferous ?? self.filamentiferous,
+            flemish: flemish ?? self.flemish,
+            forgainst: forgainst ?? self.forgainst,
+            grainering: grainering ?? self.grainering,
+            irrevoluble: irrevoluble ?? self.irrevoluble,
+            kindredship: kindredship ?? self.kindredship,
+            pinguitudinous: pinguitudinous ?? self.pinguitudinous,
+            simpletonic: simpletonic ?? self.simpletonic,
+            singsong: singsong ?? self.singsong,
+            submergement: submergement ?? self.submergement,
+            supraoesophagal: supraoesophagal ?? self.supraoesophagal,
+            thrashel: thrashel ?? self.thrashel,
+            tyremesis: tyremesis ?? self.tyremesis,
+            yoruba: yoruba ?? self.yoruba
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Practicalizer: Codable, Sendable {
+    case monaziteClass(MonaziteClass)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Practicalizer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Practicalizer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .monaziteClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum PrefreshmanElement: Codable, Sendable {
+    case nullArray([JSONNull?])
+    case prefreshmanClass(PrefreshmanClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(PrefreshmanClass.self) {
+            self = .prefreshmanClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(PrefreshmanElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PrefreshmanElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .prefreshmanClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - PrefreshmanClass
+final class PrefreshmanClass: Codable, Sendable {
+    let azorubine: JSONNull?
+    let choroiditis: JSONNull?
+    let coagulatory: JSONNull?
+    let cyclorama: JSONNull?
+    let dolphus: JSONNull?
+    let duckhearted: JSONNull?
+    let ficus: JSONNull?
+    let gemaric: JSONNull?
+    let jugation: JSONNull?
+    let myoliposis: JSONNull?
+    let nonnomination: JSONNull?
+    let palay: JSONNull?
+    let pentactinal: JSONNull?
+    let phaet: JSONNull?
+    let piquant: JSONNull?
+    let registration: JSONNull?
+    let remancipation: JSONNull?
+    let scutatiform: JSONNull?
+    let theodolite: JSONNull?
+    let underward: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case azorubine = "azorubine"
+        case choroiditis = "choroiditis"
+        case coagulatory = "coagulatory"
+        case cyclorama = "cyclorama"
+        case dolphus = "Dolphus"
+        case duckhearted = "duckhearted"
+        case ficus = "Ficus"
+        case gemaric = "Gemaric"
+        case jugation = "jugation"
+        case myoliposis = "myoliposis"
+        case nonnomination = "nonnomination"
+        case palay = "palay"
+        case pentactinal = "pentactinal"
+        case phaet = "Phaet"
+        case piquant = "piquant"
+        case registration = "registration"
+        case remancipation = "remancipation"
+        case scutatiform = "scutatiform"
+        case theodolite = "theodolite"
+        case underward = "underward"
+    }
+
+    init(azorubine: JSONNull?, choroiditis: JSONNull?, coagulatory: JSONNull?, cyclorama: JSONNull?, dolphus: JSONNull?, duckhearted: JSONNull?, ficus: JSONNull?, gemaric: JSONNull?, jugation: JSONNull?, myoliposis: JSONNull?, nonnomination: JSONNull?, palay: JSONNull?, pentactinal: JSONNull?, phaet: JSONNull?, piquant: JSONNull?, registration: JSONNull?, remancipation: JSONNull?, scutatiform: JSONNull?, theodolite: JSONNull?, underward: JSONNull?) {
+        self.azorubine = azorubine
+        self.choroiditis = choroiditis
+        self.coagulatory = coagulatory
+        self.cyclorama = cyclorama
+        self.dolphus = dolphus
+        self.duckhearted = duckhearted
+        self.ficus = ficus
+        self.gemaric = gemaric
+        self.jugation = jugation
+        self.myoliposis = myoliposis
+        self.nonnomination = nonnomination
+        self.palay = palay
+        self.pentactinal = pentactinal
+        self.phaet = phaet
+        self.piquant = piquant
+        self.registration = registration
+        self.remancipation = remancipation
+        self.scutatiform = scutatiform
+        self.theodolite = theodolite
+        self.underward = underward
+    }
+}
+
+// MARK: PrefreshmanClass convenience initializers and mutators
+
+extension PrefreshmanClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(PrefreshmanClass.self, from: data)
+        self.init(azorubine: me.azorubine, choroiditis: me.choroiditis, coagulatory: me.coagulatory, cyclorama: me.cyclorama, dolphus: me.dolphus, duckhearted: me.duckhearted, ficus: me.ficus, gemaric: me.gemaric, jugation: me.jugation, myoliposis: me.myoliposis, nonnomination: me.nonnomination, palay: me.palay, pentactinal: me.pentactinal, phaet: me.phaet, piquant: me.piquant, registration: me.registration, remancipation: me.remancipation, scutatiform: me.scutatiform, theodolite: me.theodolite, underward: me.underward)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        azorubine: JSONNull?? = nil,
+        choroiditis: JSONNull?? = nil,
+        coagulatory: JSONNull?? = nil,
+        cyclorama: JSONNull?? = nil,
+        dolphus: JSONNull?? = nil,
+        duckhearted: JSONNull?? = nil,
+        ficus: JSONNull?? = nil,
+        gemaric: JSONNull?? = nil,
+        jugation: JSONNull?? = nil,
+        myoliposis: JSONNull?? = nil,
+        nonnomination: JSONNull?? = nil,
+        palay: JSONNull?? = nil,
+        pentactinal: JSONNull?? = nil,
+        phaet: JSONNull?? = nil,
+        piquant: JSONNull?? = nil,
+        registration: JSONNull?? = nil,
+        remancipation: JSONNull?? = nil,
+        scutatiform: JSONNull?? = nil,
+        theodolite: JSONNull?? = nil,
+        underward: JSONNull?? = nil
+    ) -> PrefreshmanClass {
+        return PrefreshmanClass(
+            azorubine: azorubine ?? self.azorubine,
+            choroiditis: choroiditis ?? self.choroiditis,
+            coagulatory: coagulatory ?? self.coagulatory,
+            cyclorama: cyclorama ?? self.cyclorama,
+            dolphus: dolphus ?? self.dolphus,
+            duckhearted: duckhearted ?? self.duckhearted,
+            ficus: ficus ?? self.ficus,
+            gemaric: gemaric ?? self.gemaric,
+            jugation: jugation ?? self.jugation,
+            myoliposis: myoliposis ?? self.myoliposis,
+            nonnomination: nonnomination ?? self.nonnomination,
+            palay: palay ?? self.palay,
+            pentactinal: pentactinal ?? self.pentactinal,
+            phaet: phaet ?? self.phaet,
+            piquant: piquant ?? self.piquant,
+            registration: registration ?? self.registration,
+            remancipation: remancipation ?? self.remancipation,
+            scutatiform: scutatiform ?? self.scutatiform,
+            theodolite: theodolite ?? self.theodolite,
+            underward: underward ?? self.underward
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Prehensility: Codable, Sendable {
+    case bool(Bool)
+    case monaziteClass(MonaziteClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Prehensility.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Prehensility"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Prevoidance: Codable, Sendable {
+    case integer(Int)
+    case integerArray([Int])
+    case monaziteClass(MonaziteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Prevoidance.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Prevoidance"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Protext: Codable, Sendable {
+    case bool(Bool)
+    case integerArray([Int])
+    case monaziteClass(MonaziteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(MonaziteClass.self) {
+            self = .monaziteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Protext.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Protext"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .monaziteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+final class JSONNull: Codable, Hashable, Sendable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    public func hash(into hasher: inout Hasher) {
+        hasher.combine(0)
+    }
+
+    public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/head/swift/test/inputs/json/priority/combinations4.json/final-classes-true__struct-or-class-class--d3c62ec7414d/quicktype.swift b/head/swift/test/inputs/json/priority/combinations4.json/final-classes-true__struct-or-class-class--d3c62ec7414d/quicktype.swift
new file mode 100644
index 0000000..7509976
--- /dev/null
+++ b/head/swift/test/inputs/json/priority/combinations4.json/final-classes-true__struct-or-class-class--d3c62ec7414d/quicktype.swift
@@ -0,0 +1,4096 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+import Foundation
+
+// MARK: - TopLevel
+final class TopLevel: Codable {
+    let protrusive: [Protrusive]
+    let pulpitism: [PulpitismElement]
+    let pyodermia: [PyodermiaElement]
+    let quebrachine: [QuebrachineElement]
+    let querier: [Querier]
+    let rebarbative: [Rebarbative]
+    let reimagine: [Reimagine]
+    let ressaut: Ressaut
+    let retrocervical: [Retrocervical]
+    let revert: [Revert]
+    let rewrite: [RewriteElement]
+    let saccoderm: [Saccoderm]
+    let santir: [SantirElement]
+    let saprophilous: [Saprophilous]
+    let saxten: [SaxtenElement]
+    let scatty: [Scatty?]
+    let scoffer: [Scoffer]
+    let scrampum: [Scrampum]
+    let semantic: Double
+    let serpentinic: [Serpentinic]
+    let shadowable: [Shadowable]
+    let sistering: [SisteringElement]
+    let staghunting: [Staghunting]
+    let stagmometer: [Stagmometer]
+    let stimulability: [Stimulability]
+    let strangleable: [Strangleable]
+    let strenuosity: [StrenuosityElement]
+    let tabaxir: [Tabaxir]
+    let talpiform: [Talpiform]
+    let thwack: [Thwack]
+    let to: [Double?]
+    let tortricine: [Tortricine]
+    let truantcy: [TruantcyElement]
+    let turgesce: [String]
+    let unbeginning: [Unbeginning]
+    let underdunged: [Double]
+    let undesirability: [Undesirability]
+    let unerasing: [Unerasing]
+    let unguentarium: [Unguentarium]
+    let unimpeachably: [UnimpeachablyElement]
+    let unmortgaged: [Unmortgaged]
+    let unobstructed: [Unobstructed]
+    let unreceptivity: [Unreceptivity]
+    let unsatisfactoriness: [Unsatisfactoriness]
+    let unsecurity: [Int]
+    let unstressed: [UnstressedElement]
+    let untasked: [Untasked]
+    let unvarying: [Unvarying]
+    let vehemently: [Vehemently]
+    let warriorship: [String: Bool]
+    let whitepot: [Whitepot]
+    let wrothy: [WrothyElement]
+
+    enum CodingKeys: String, CodingKey {
+        case protrusive = "protrusive"
+        case pulpitism = "pulpitism"
+        case pyodermia = "pyodermia"
+        case quebrachine = "quebrachine"
+        case querier = "querier"
+        case rebarbative = "rebarbative"
+        case reimagine = "reimagine"
+        case ressaut = "ressaut"
+        case retrocervical = "retrocervical"
+        case revert = "revert"
+        case rewrite = "rewrite"
+        case saccoderm = "saccoderm"
+        case santir = "santir"
+        case saprophilous = "saprophilous"
+        case saxten = "saxten"
+        case scatty = "scatty"
+        case scoffer = "scoffer"
+        case scrampum = "scrampum"
+        case semantic = "semantic"
+        case serpentinic = "serpentinic"
+        case shadowable = "shadowable"
+        case sistering = "sistering"
+        case staghunting = "staghunting"
+        case stagmometer = "stagmometer"
+        case stimulability = "stimulability"
+        case strangleable = "strangleable"
+        case strenuosity = "strenuosity"
+        case tabaxir = "tabaxir"
+        case talpiform = "talpiform"
+        case thwack = "thwack"
+        case to = "to"
+        case tortricine = "tortricine"
+        case truantcy = "truantcy"
+        case turgesce = "turgesce"
+        case unbeginning = "unbeginning"
+        case underdunged = "underdunged"
+        case undesirability = "undesirability"
+        case unerasing = "unerasing"
+        case unguentarium = "unguentarium"
+        case unimpeachably = "unimpeachably"
+        case unmortgaged = "unmortgaged"
+        case unobstructed = "unobstructed"
+        case unreceptivity = "unreceptivity"
+        case unsatisfactoriness = "unsatisfactoriness"
+        case unsecurity = "unsecurity"
+        case unstressed = "unstressed"
+        case untasked = "untasked"
+        case unvarying = "unvarying"
+        case vehemently = "vehemently"
+        case warriorship = "warriorship"
+        case whitepot = "whitepot"
+        case wrothy = "wrothy"
+    }
+
+    init(protrusive: [Protrusive], pulpitism: [PulpitismElement], pyodermia: [PyodermiaElement], quebrachine: [QuebrachineElement], querier: [Querier], rebarbative: [Rebarbative], reimagine: [Reimagine], ressaut: Ressaut, retrocervical: [Retrocervical], revert: [Revert], rewrite: [RewriteElement], saccoderm: [Saccoderm], santir: [SantirElement], saprophilous: [Saprophilous], saxten: [SaxtenElement], scatty: [Scatty?], scoffer: [Scoffer], scrampum: [Scrampum], semantic: Double, serpentinic: [Serpentinic], shadowable: [Shadowable], sistering: [SisteringElement], staghunting: [Staghunting], stagmometer: [Stagmometer], stimulability: [Stimulability], strangleable: [Strangleable], strenuosity: [StrenuosityElement], tabaxir: [Tabaxir], talpiform: [Talpiform], thwack: [Thwack], to: [Double?], tortricine: [Tortricine], truantcy: [TruantcyElement], turgesce: [String], unbeginning: [Unbeginning], underdunged: [Double], undesirability: [Undesirability], unerasing: [Unerasing], unguentarium: [Unguentarium], unimpeachably: [UnimpeachablyElement], unmortgaged: [Unmortgaged], unobstructed: [Unobstructed], unreceptivity: [Unreceptivity], unsatisfactoriness: [Unsatisfactoriness], unsecurity: [Int], unstressed: [UnstressedElement], untasked: [Untasked], unvarying: [Unvarying], vehemently: [Vehemently], warriorship: [String: Bool], whitepot: [Whitepot], wrothy: [WrothyElement]) {
+        self.protrusive = protrusive
+        self.pulpitism = pulpitism
+        self.pyodermia = pyodermia
+        self.quebrachine = quebrachine
+        self.querier = querier
+        self.rebarbative = rebarbative
+        self.reimagine = reimagine
+        self.ressaut = ressaut
+        self.retrocervical = retrocervical
+        self.revert = revert
+        self.rewrite = rewrite
+        self.saccoderm = saccoderm
+        self.santir = santir
+        self.saprophilous = saprophilous
+        self.saxten = saxten
+        self.scatty = scatty
+        self.scoffer = scoffer
+        self.scrampum = scrampum
+        self.semantic = semantic
+        self.serpentinic = serpentinic
+        self.shadowable = shadowable
+        self.sistering = sistering
+        self.staghunting = staghunting
+        self.stagmometer = stagmometer
+        self.stimulability = stimulability
+        self.strangleable = strangleable
+        self.strenuosity = strenuosity
+        self.tabaxir = tabaxir
+        self.talpiform = talpiform
+        self.thwack = thwack
+        self.to = to
+        self.tortricine = tortricine
+        self.truantcy = truantcy
+        self.turgesce = turgesce
+        self.unbeginning = unbeginning
+        self.underdunged = underdunged
+        self.undesirability = undesirability
+        self.unerasing = unerasing
+        self.unguentarium = unguentarium
+        self.unimpeachably = unimpeachably
+        self.unmortgaged = unmortgaged
+        self.unobstructed = unobstructed
+        self.unreceptivity = unreceptivity
+        self.unsatisfactoriness = unsatisfactoriness
+        self.unsecurity = unsecurity
+        self.unstressed = unstressed
+        self.untasked = untasked
+        self.unvarying = unvarying
+        self.vehemently = vehemently
+        self.warriorship = warriorship
+        self.whitepot = whitepot
+        self.wrothy = wrothy
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(TopLevel.self, from: data)
+        self.init(protrusive: me.protrusive, pulpitism: me.pulpitism, pyodermia: me.pyodermia, quebrachine: me.quebrachine, querier: me.querier, rebarbative: me.rebarbative, reimagine: me.reimagine, ressaut: me.ressaut, retrocervical: me.retrocervical, revert: me.revert, rewrite: me.rewrite, saccoderm: me.saccoderm, santir: me.santir, saprophilous: me.saprophilous, saxten: me.saxten, scatty: me.scatty, scoffer: me.scoffer, scrampum: me.scrampum, semantic: me.semantic, serpentinic: me.serpentinic, shadowable: me.shadowable, sistering: me.sistering, staghunting: me.staghunting, stagmometer: me.stagmometer, stimulability: me.stimulability, strangleable: me.strangleable, strenuosity: me.strenuosity, tabaxir: me.tabaxir, talpiform: me.talpiform, thwack: me.thwack, to: me.to, tortricine: me.tortricine, truantcy: me.truantcy, turgesce: me.turgesce, unbeginning: me.unbeginning, underdunged: me.underdunged, undesirability: me.undesirability, unerasing: me.unerasing, unguentarium: me.unguentarium, unimpeachably: me.unimpeachably, unmortgaged: me.unmortgaged, unobstructed: me.unobstructed, unreceptivity: me.unreceptivity, unsatisfactoriness: me.unsatisfactoriness, unsecurity: me.unsecurity, unstressed: me.unstressed, untasked: me.untasked, unvarying: me.unvarying, vehemently: me.vehemently, warriorship: me.warriorship, whitepot: me.whitepot, wrothy: me.wrothy)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        protrusive: [Protrusive]? = nil,
+        pulpitism: [PulpitismElement]? = nil,
+        pyodermia: [PyodermiaElement]? = nil,
+        quebrachine: [QuebrachineElement]? = nil,
+        querier: [Querier]? = nil,
+        rebarbative: [Rebarbative]? = nil,
+        reimagine: [Reimagine]? = nil,
+        ressaut: Ressaut? = nil,
+        retrocervical: [Retrocervical]? = nil,
+        revert: [Revert]? = nil,
+        rewrite: [RewriteElement]? = nil,
+        saccoderm: [Saccoderm]? = nil,
+        santir: [SantirElement]? = nil,
+        saprophilous: [Saprophilous]? = nil,
+        saxten: [SaxtenElement]? = nil,
+        scatty: [Scatty?]? = nil,
+        scoffer: [Scoffer]? = nil,
+        scrampum: [Scrampum]? = nil,
+        semantic: Double? = nil,
+        serpentinic: [Serpentinic]? = nil,
+        shadowable: [Shadowable]? = nil,
+        sistering: [SisteringElement]? = nil,
+        staghunting: [Staghunting]? = nil,
+        stagmometer: [Stagmometer]? = nil,
+        stimulability: [Stimulability]? = nil,
+        strangleable: [Strangleable]? = nil,
+        strenuosity: [StrenuosityElement]? = nil,
+        tabaxir: [Tabaxir]? = nil,
+        talpiform: [Talpiform]? = nil,
+        thwack: [Thwack]? = nil,
+        to: [Double?]? = nil,
+        tortricine: [Tortricine]? = nil,
+        truantcy: [TruantcyElement]? = nil,
+        turgesce: [String]? = nil,
+        unbeginning: [Unbeginning]? = nil,
+        underdunged: [Double]? = nil,
+        undesirability: [Undesirability]? = nil,
+        unerasing: [Unerasing]? = nil,
+        unguentarium: [Unguentarium]? = nil,
+        unimpeachably: [UnimpeachablyElement]? = nil,
+        unmortgaged: [Unmortgaged]? = nil,
+        unobstructed: [Unobstructed]? = nil,
+        unreceptivity: [Unreceptivity]? = nil,
+        unsatisfactoriness: [Unsatisfactoriness]? = nil,
+        unsecurity: [Int]? = nil,
+        unstressed: [UnstressedElement]? = nil,
+        untasked: [Untasked]? = nil,
+        unvarying: [Unvarying]? = nil,
+        vehemently: [Vehemently]? = nil,
+        warriorship: [String: Bool]? = nil,
+        whitepot: [Whitepot]? = nil,
+        wrothy: [WrothyElement]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            protrusive: protrusive ?? self.protrusive,
+            pulpitism: pulpitism ?? self.pulpitism,
+            pyodermia: pyodermia ?? self.pyodermia,
+            quebrachine: quebrachine ?? self.quebrachine,
+            querier: querier ?? self.querier,
+            rebarbative: rebarbative ?? self.rebarbative,
+            reimagine: reimagine ?? self.reimagine,
+            ressaut: ressaut ?? self.ressaut,
+            retrocervical: retrocervical ?? self.retrocervical,
+            revert: revert ?? self.revert,
+            rewrite: rewrite ?? self.rewrite,
+            saccoderm: saccoderm ?? self.saccoderm,
+            santir: santir ?? self.santir,
+            saprophilous: saprophilous ?? self.saprophilous,
+            saxten: saxten ?? self.saxten,
+            scatty: scatty ?? self.scatty,
+            scoffer: scoffer ?? self.scoffer,
+            scrampum: scrampum ?? self.scrampum,
+            semantic: semantic ?? self.semantic,
+            serpentinic: serpentinic ?? self.serpentinic,
+            shadowable: shadowable ?? self.shadowable,
+            sistering: sistering ?? self.sistering,
+            staghunting: staghunting ?? self.staghunting,
+            stagmometer: stagmometer ?? self.stagmometer,
+            stimulability: stimulability ?? self.stimulability,
+            strangleable: strangleable ?? self.strangleable,
+            strenuosity: strenuosity ?? self.strenuosity,
+            tabaxir: tabaxir ?? self.tabaxir,
+            talpiform: talpiform ?? self.talpiform,
+            thwack: thwack ?? self.thwack,
+            to: to ?? self.to,
+            tortricine: tortricine ?? self.tortricine,
+            truantcy: truantcy ?? self.truantcy,
+            turgesce: turgesce ?? self.turgesce,
+            unbeginning: unbeginning ?? self.unbeginning,
+            underdunged: underdunged ?? self.underdunged,
+            undesirability: undesirability ?? self.undesirability,
+            unerasing: unerasing ?? self.unerasing,
+            unguentarium: unguentarium ?? self.unguentarium,
+            unimpeachably: unimpeachably ?? self.unimpeachably,
+            unmortgaged: unmortgaged ?? self.unmortgaged,
+            unobstructed: unobstructed ?? self.unobstructed,
+            unreceptivity: unreceptivity ?? self.unreceptivity,
+            unsatisfactoriness: unsatisfactoriness ?? self.unsatisfactoriness,
+            unsecurity: unsecurity ?? self.unsecurity,
+            unstressed: unstressed ?? self.unstressed,
+            untasked: untasked ?? self.untasked,
+            unvarying: unvarying ?? self.unvarying,
+            vehemently: vehemently ?? self.vehemently,
+            warriorship: warriorship ?? self.warriorship,
+            whitepot: whitepot ?? self.whitepot,
+            wrothy: wrothy ?? self.wrothy
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Protrusive: Codable {
+    case double(Double)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Protrusive.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Protrusive"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum PulpitismElement: Codable {
+    case double(Double)
+    case integerArray([Int])
+    case pulpitismClass(PulpitismClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(PulpitismClass.self) {
+            self = .pulpitismClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(PulpitismElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PulpitismElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .pulpitismClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - PulpitismClass
+final class PulpitismClass: Codable {
+    let abnet: JSONNull?
+    let buckhorn: JSONNull?
+    let calciform: JSONNull?
+    let chelophore: JSONNull?
+    let cogitation: JSONNull?
+    let decreeable: JSONNull?
+    let despicable: JSONNull?
+    let isodiazo: JSONNull?
+    let jadedly: JSONNull?
+    let leptochlorite: JSONNull?
+    let nursling: JSONNull?
+    let palamedean: JSONNull?
+    let photoheliograph: JSONNull?
+    let pipewood: JSONNull?
+    let roberd: JSONNull?
+    let statable: JSONNull?
+    let superassume: JSONNull?
+    let syllabe: JSONNull?
+    let toughhead: JSONNull?
+    let underburn: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case abnet = "abnet"
+        case buckhorn = "buckhorn"
+        case calciform = "calciform"
+        case chelophore = "chelophore"
+        case cogitation = "cogitation"
+        case decreeable = "decreeable"
+        case despicable = "despicable"
+        case isodiazo = "isodiazo"
+        case jadedly = "jadedly"
+        case leptochlorite = "leptochlorite"
+        case nursling = "nursling"
+        case palamedean = "palamedean"
+        case photoheliograph = "photoheliograph"
+        case pipewood = "pipewood"
+        case roberd = "roberd"
+        case statable = "statable"
+        case superassume = "superassume"
+        case syllabe = "syllabe"
+        case toughhead = "toughhead"
+        case underburn = "underburn"
+    }
+
+    init(abnet: JSONNull?, buckhorn: JSONNull?, calciform: JSONNull?, chelophore: JSONNull?, cogitation: JSONNull?, decreeable: JSONNull?, despicable: JSONNull?, isodiazo: JSONNull?, jadedly: JSONNull?, leptochlorite: JSONNull?, nursling: JSONNull?, palamedean: JSONNull?, photoheliograph: JSONNull?, pipewood: JSONNull?, roberd: JSONNull?, statable: JSONNull?, superassume: JSONNull?, syllabe: JSONNull?, toughhead: JSONNull?, underburn: JSONNull?) {
+        self.abnet = abnet
+        self.buckhorn = buckhorn
+        self.calciform = calciform
+        self.chelophore = chelophore
+        self.cogitation = cogitation
+        self.decreeable = decreeable
+        self.despicable = despicable
+        self.isodiazo = isodiazo
+        self.jadedly = jadedly
+        self.leptochlorite = leptochlorite
+        self.nursling = nursling
+        self.palamedean = palamedean
+        self.photoheliograph = photoheliograph
+        self.pipewood = pipewood
+        self.roberd = roberd
+        self.statable = statable
+        self.superassume = superassume
+        self.syllabe = syllabe
+        self.toughhead = toughhead
+        self.underburn = underburn
+    }
+}
+
+// MARK: PulpitismClass convenience initializers and mutators
+
+extension PulpitismClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(PulpitismClass.self, from: data)
+        self.init(abnet: me.abnet, buckhorn: me.buckhorn, calciform: me.calciform, chelophore: me.chelophore, cogitation: me.cogitation, decreeable: me.decreeable, despicable: me.despicable, isodiazo: me.isodiazo, jadedly: me.jadedly, leptochlorite: me.leptochlorite, nursling: me.nursling, palamedean: me.palamedean, photoheliograph: me.photoheliograph, pipewood: me.pipewood, roberd: me.roberd, statable: me.statable, superassume: me.superassume, syllabe: me.syllabe, toughhead: me.toughhead, underburn: me.underburn)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        abnet: JSONNull?? = nil,
+        buckhorn: JSONNull?? = nil,
+        calciform: JSONNull?? = nil,
+        chelophore: JSONNull?? = nil,
+        cogitation: JSONNull?? = nil,
+        decreeable: JSONNull?? = nil,
+        despicable: JSONNull?? = nil,
+        isodiazo: JSONNull?? = nil,
+        jadedly: JSONNull?? = nil,
+        leptochlorite: JSONNull?? = nil,
+        nursling: JSONNull?? = nil,
+        palamedean: JSONNull?? = nil,
+        photoheliograph: JSONNull?? = nil,
+        pipewood: JSONNull?? = nil,
+        roberd: JSONNull?? = nil,
+        statable: JSONNull?? = nil,
+        superassume: JSONNull?? = nil,
+        syllabe: JSONNull?? = nil,
+        toughhead: JSONNull?? = nil,
+        underburn: JSONNull?? = nil
+    ) -> PulpitismClass {
+        return PulpitismClass(
+            abnet: abnet ?? self.abnet,
+            buckhorn: buckhorn ?? self.buckhorn,
+            calciform: calciform ?? self.calciform,
+            chelophore: chelophore ?? self.chelophore,
+            cogitation: cogitation ?? self.cogitation,
+            decreeable: decreeable ?? self.decreeable,
+            despicable: despicable ?? self.despicable,
+            isodiazo: isodiazo ?? self.isodiazo,
+            jadedly: jadedly ?? self.jadedly,
+            leptochlorite: leptochlorite ?? self.leptochlorite,
+            nursling: nursling ?? self.nursling,
+            palamedean: palamedean ?? self.palamedean,
+            photoheliograph: photoheliograph ?? self.photoheliograph,
+            pipewood: pipewood ?? self.pipewood,
+            roberd: roberd ?? self.roberd,
+            statable: statable ?? self.statable,
+            superassume: superassume ?? self.superassume,
+            syllabe: syllabe ?? self.syllabe,
+            toughhead: toughhead ?? self.toughhead,
+            underburn: underburn ?? self.underburn
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum PyodermiaElement: Codable {
+    case integer(Int)
+    case pyodermiaClass(PyodermiaClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(PyodermiaClass.self) {
+            self = .pyodermiaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(PyodermiaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PyodermiaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .pyodermiaClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - PyodermiaClass
+final class PyodermiaClass: Codable {
+    let aphoristically: JSONNull?
+    let apophyllous: JSONNull?
+    let cognize: JSONNull?
+    let dermonosology: JSONNull?
+    let gyppo: JSONNull?
+    let ither: JSONNull?
+    let juglandaceous: JSONNull?
+    let litho: JSONNull?
+    let macropterous: JSONNull?
+    let photographer: JSONNull?
+    let romancing: JSONNull?
+    let rumness: JSONNull?
+    let somniloquist: JSONNull?
+    let stressfully: JSONNull?
+    let tactically: JSONNull?
+    let tracheophony: JSONNull?
+    let unappositely: JSONNull?
+    let unclothedly: JSONNull?
+    let unimplied: JSONNull?
+    let unsyncopated: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case aphoristically = "aphoristically"
+        case apophyllous = "apophyllous"
+        case cognize = "cognize"
+        case dermonosology = "dermonosology"
+        case gyppo = "Gyppo"
+        case ither = "ither"
+        case juglandaceous = "juglandaceous"
+        case litho = "litho"
+        case macropterous = "macropterous"
+        case photographer = "photographer"
+        case romancing = "romancing"
+        case rumness = "rumness"
+        case somniloquist = "somniloquist"
+        case stressfully = "stressfully"
+        case tactically = "tactically"
+        case tracheophony = "tracheophony"
+        case unappositely = "unappositely"
+        case unclothedly = "unclothedly"
+        case unimplied = "unimplied"
+        case unsyncopated = "unsyncopated"
+    }
+
+    init(aphoristically: JSONNull?, apophyllous: JSONNull?, cognize: JSONNull?, dermonosology: JSONNull?, gyppo: JSONNull?, ither: JSONNull?, juglandaceous: JSONNull?, litho: JSONNull?, macropterous: JSONNull?, photographer: JSONNull?, romancing: JSONNull?, rumness: JSONNull?, somniloquist: JSONNull?, stressfully: JSONNull?, tactically: JSONNull?, tracheophony: JSONNull?, unappositely: JSONNull?, unclothedly: JSONNull?, unimplied: JSONNull?, unsyncopated: JSONNull?) {
+        self.aphoristically = aphoristically
+        self.apophyllous = apophyllous
+        self.cognize = cognize
+        self.dermonosology = dermonosology
+        self.gyppo = gyppo
+        self.ither = ither
+        self.juglandaceous = juglandaceous
+        self.litho = litho
+        self.macropterous = macropterous
+        self.photographer = photographer
+        self.romancing = romancing
+        self.rumness = rumness
+        self.somniloquist = somniloquist
+        self.stressfully = stressfully
+        self.tactically = tactically
+        self.tracheophony = tracheophony
+        self.unappositely = unappositely
+        self.unclothedly = unclothedly
+        self.unimplied = unimplied
+        self.unsyncopated = unsyncopated
+    }
+}
+
+// MARK: PyodermiaClass convenience initializers and mutators
+
+extension PyodermiaClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(PyodermiaClass.self, from: data)
+        self.init(aphoristically: me.aphoristically, apophyllous: me.apophyllous, cognize: me.cognize, dermonosology: me.dermonosology, gyppo: me.gyppo, ither: me.ither, juglandaceous: me.juglandaceous, litho: me.litho, macropterous: me.macropterous, photographer: me.photographer, romancing: me.romancing, rumness: me.rumness, somniloquist: me.somniloquist, stressfully: me.stressfully, tactically: me.tactically, tracheophony: me.tracheophony, unappositely: me.unappositely, unclothedly: me.unclothedly, unimplied: me.unimplied, unsyncopated: me.unsyncopated)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        aphoristically: JSONNull?? = nil,
+        apophyllous: JSONNull?? = nil,
+        cognize: JSONNull?? = nil,
+        dermonosology: JSONNull?? = nil,
+        gyppo: JSONNull?? = nil,
+        ither: JSONNull?? = nil,
+        juglandaceous: JSONNull?? = nil,
+        litho: JSONNull?? = nil,
+        macropterous: JSONNull?? = nil,
+        photographer: JSONNull?? = nil,
+        romancing: JSONNull?? = nil,
+        rumness: JSONNull?? = nil,
+        somniloquist: JSONNull?? = nil,
+        stressfully: JSONNull?? = nil,
+        tactically: JSONNull?? = nil,
+        tracheophony: JSONNull?? = nil,
+        unappositely: JSONNull?? = nil,
+        unclothedly: JSONNull?? = nil,
+        unimplied: JSONNull?? = nil,
+        unsyncopated: JSONNull?? = nil
+    ) -> PyodermiaClass {
+        return PyodermiaClass(
+            aphoristically: aphoristically ?? self.aphoristically,
+            apophyllous: apophyllous ?? self.apophyllous,
+            cognize: cognize ?? self.cognize,
+            dermonosology: dermonosology ?? self.dermonosology,
+            gyppo: gyppo ?? self.gyppo,
+            ither: ither ?? self.ither,
+            juglandaceous: juglandaceous ?? self.juglandaceous,
+            litho: litho ?? self.litho,
+            macropterous: macropterous ?? self.macropterous,
+            photographer: photographer ?? self.photographer,
+            romancing: romancing ?? self.romancing,
+            rumness: rumness ?? self.rumness,
+            somniloquist: somniloquist ?? self.somniloquist,
+            stressfully: stressfully ?? self.stressfully,
+            tactically: tactically ?? self.tactically,
+            tracheophony: tracheophony ?? self.tracheophony,
+            unappositely: unappositely ?? self.unappositely,
+            unclothedly: unclothedly ?? self.unclothedly,
+            unimplied: unimplied ?? self.unimplied,
+            unsyncopated: unsyncopated ?? self.unsyncopated
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum QuebrachineElement: Codable {
+    case bool(Bool)
+    case quebrachineClass(QuebrachineClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(QuebrachineElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for QuebrachineElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - QuebrachineClass
+final class QuebrachineClass: Codable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+
+    init(catharticalness: Double, chirotherium: Int, disdiapason: String, homocerc: Bool, nonbookish: JSONNull?) {
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.homocerc = homocerc
+        self.nonbookish = nonbookish
+    }
+}
+
+// MARK: QuebrachineClass convenience initializers and mutators
+
+extension QuebrachineClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(QuebrachineClass.self, from: data)
+        self.init(catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, homocerc: me.homocerc, nonbookish: me.nonbookish)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> QuebrachineClass {
+        return QuebrachineClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Querier: Codable {
+    case bool(Bool)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Querier.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Querier"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Rebarbative: Codable {
+    case bool(Bool)
+    case double(Double)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Rebarbative.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Rebarbative"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Reimagine
+final class Reimagine: Codable {
+    let adducible: JSONNull?
+    let anabolin: JSONNull?
+    let brainy: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let chrysamine: JSONNull?
+    let disdiapason: String?
+    let fluxweed: JSONNull?
+    let glaucine: JSONNull?
+    let grobianism: JSONNull?
+    let hermo: JSONNull?
+    let hieroglyphist: JSONNull?
+    let homocerc: Bool?
+    let icteroid: JSONNull?
+    let immortal: JSONNull?
+    let impetulant: JSONNull?
+    let irrigate: JSONNull?
+    let myxedema: JSONNull?
+    let nonbookish: JSONNull?
+    let onyx: JSONNull?
+    let repasser: JSONNull?
+    let septomarginal: JSONNull?
+    let subdie: JSONNull?
+    let tibiometatarsal: JSONNull?
+    let waltzlike: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case adducible = "adducible"
+        case anabolin = "anabolin"
+        case brainy = "brainy"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case chrysamine = "chrysamine"
+        case disdiapason = "disdiapason"
+        case fluxweed = "fluxweed"
+        case glaucine = "glaucine"
+        case grobianism = "grobianism"
+        case hermo = "Hermo"
+        case hieroglyphist = "hieroglyphist"
+        case homocerc = "homocerc"
+        case icteroid = "icteroid"
+        case immortal = "immortal"
+        case impetulant = "impetulant"
+        case irrigate = "irrigate"
+        case myxedema = "myxedema"
+        case nonbookish = "nonbookish"
+        case onyx = "onyx"
+        case repasser = "repasser"
+        case septomarginal = "septomarginal"
+        case subdie = "subdie"
+        case tibiometatarsal = "tibiometatarsal"
+        case waltzlike = "waltzlike"
+    }
+
+    init(adducible: JSONNull?, anabolin: JSONNull?, brainy: JSONNull?, catharticalness: Double?, chirotherium: Int?, chrysamine: JSONNull?, disdiapason: String?, fluxweed: JSONNull?, glaucine: JSONNull?, grobianism: JSONNull?, hermo: JSONNull?, hieroglyphist: JSONNull?, homocerc: Bool?, icteroid: JSONNull?, immortal: JSONNull?, impetulant: JSONNull?, irrigate: JSONNull?, myxedema: JSONNull?, nonbookish: JSONNull?, onyx: JSONNull?, repasser: JSONNull?, septomarginal: JSONNull?, subdie: JSONNull?, tibiometatarsal: JSONNull?, waltzlike: JSONNull?) {
+        self.adducible = adducible
+        self.anabolin = anabolin
+        self.brainy = brainy
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.chrysamine = chrysamine
+        self.disdiapason = disdiapason
+        self.fluxweed = fluxweed
+        self.glaucine = glaucine
+        self.grobianism = grobianism
+        self.hermo = hermo
+        self.hieroglyphist = hieroglyphist
+        self.homocerc = homocerc
+        self.icteroid = icteroid
+        self.immortal = immortal
+        self.impetulant = impetulant
+        self.irrigate = irrigate
+        self.myxedema = myxedema
+        self.nonbookish = nonbookish
+        self.onyx = onyx
+        self.repasser = repasser
+        self.septomarginal = septomarginal
+        self.subdie = subdie
+        self.tibiometatarsal = tibiometatarsal
+        self.waltzlike = waltzlike
+    }
+}
+
+// MARK: Reimagine convenience initializers and mutators
+
+extension Reimagine {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Reimagine.self, from: data)
+        self.init(adducible: me.adducible, anabolin: me.anabolin, brainy: me.brainy, catharticalness: me.catharticalness, chirotherium: me.chirotherium, chrysamine: me.chrysamine, disdiapason: me.disdiapason, fluxweed: me.fluxweed, glaucine: me.glaucine, grobianism: me.grobianism, hermo: me.hermo, hieroglyphist: me.hieroglyphist, homocerc: me.homocerc, icteroid: me.icteroid, immortal: me.immortal, impetulant: me.impetulant, irrigate: me.irrigate, myxedema: me.myxedema, nonbookish: me.nonbookish, onyx: me.onyx, repasser: me.repasser, septomarginal: me.septomarginal, subdie: me.subdie, tibiometatarsal: me.tibiometatarsal, waltzlike: me.waltzlike)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        adducible: JSONNull?? = nil,
+        anabolin: JSONNull?? = nil,
+        brainy: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        chrysamine: JSONNull?? = nil,
+        disdiapason: String?? = nil,
+        fluxweed: JSONNull?? = nil,
+        glaucine: JSONNull?? = nil,
+        grobianism: JSONNull?? = nil,
+        hermo: JSONNull?? = nil,
+        hieroglyphist: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        icteroid: JSONNull?? = nil,
+        immortal: JSONNull?? = nil,
+        impetulant: JSONNull?? = nil,
+        irrigate: JSONNull?? = nil,
+        myxedema: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        onyx: JSONNull?? = nil,
+        repasser: JSONNull?? = nil,
+        septomarginal: JSONNull?? = nil,
+        subdie: JSONNull?? = nil,
+        tibiometatarsal: JSONNull?? = nil,
+        waltzlike: JSONNull?? = nil
+    ) -> Reimagine {
+        return Reimagine(
+            adducible: adducible ?? self.adducible,
+            anabolin: anabolin ?? self.anabolin,
+            brainy: brainy ?? self.brainy,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chrysamine: chrysamine ?? self.chrysamine,
+            disdiapason: disdiapason ?? self.disdiapason,
+            fluxweed: fluxweed ?? self.fluxweed,
+            glaucine: glaucine ?? self.glaucine,
+            grobianism: grobianism ?? self.grobianism,
+            hermo: hermo ?? self.hermo,
+            hieroglyphist: hieroglyphist ?? self.hieroglyphist,
+            homocerc: homocerc ?? self.homocerc,
+            icteroid: icteroid ?? self.icteroid,
+            immortal: immortal ?? self.immortal,
+            impetulant: impetulant ?? self.impetulant,
+            irrigate: irrigate ?? self.irrigate,
+            myxedema: myxedema ?? self.myxedema,
+            nonbookish: nonbookish ?? self.nonbookish,
+            onyx: onyx ?? self.onyx,
+            repasser: repasser ?? self.repasser,
+            septomarginal: septomarginal ?? self.septomarginal,
+            subdie: subdie ?? self.subdie,
+            tibiometatarsal: tibiometatarsal ?? self.tibiometatarsal,
+            waltzlike: waltzlike ?? self.waltzlike
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Ressaut
+final class Ressaut: Codable {
+    let apperceptive: String
+    let cuttoo: String
+    let douser: String
+    let drinkproof: String
+    let forementioned: String
+    let freesia: String
+    let genevieve: String
+    let hyperdiabolical: String
+    let hypocone: String
+    let irreverentially: String
+    let jumart: String
+    let mimosaceae: String
+    let mollicrush: String
+    let nedder: String
+    let retinasphalt: String
+    let sough: String
+    let steading: String
+    let theopaschitism: String
+    let undurableness: String
+    let unmingleable: String
+
+    enum CodingKeys: String, CodingKey {
+        case apperceptive = "apperceptive"
+        case cuttoo = "cuttoo"
+        case douser = "douser"
+        case drinkproof = "drinkproof"
+        case forementioned = "forementioned"
+        case freesia = "Freesia"
+        case genevieve = "Genevieve"
+        case hyperdiabolical = "hyperdiabolical"
+        case hypocone = "hypocone"
+        case irreverentially = "irreverentially"
+        case jumart = "jumart"
+        case mimosaceae = "Mimosaceae"
+        case mollicrush = "mollicrush"
+        case nedder = "nedder"
+        case retinasphalt = "retinasphalt"
+        case sough = "sough"
+        case steading = "steading"
+        case theopaschitism = "Theopaschitism"
+        case undurableness = "undurableness"
+        case unmingleable = "unmingleable"
+    }
+
+    init(apperceptive: String, cuttoo: String, douser: String, drinkproof: String, forementioned: String, freesia: String, genevieve: String, hyperdiabolical: String, hypocone: String, irreverentially: String, jumart: String, mimosaceae: String, mollicrush: String, nedder: String, retinasphalt: String, sough: String, steading: String, theopaschitism: String, undurableness: String, unmingleable: String) {
+        self.apperceptive = apperceptive
+        self.cuttoo = cuttoo
+        self.douser = douser
+        self.drinkproof = drinkproof
+        self.forementioned = forementioned
+        self.freesia = freesia
+        self.genevieve = genevieve
+        self.hyperdiabolical = hyperdiabolical
+        self.hypocone = hypocone
+        self.irreverentially = irreverentially
+        self.jumart = jumart
+        self.mimosaceae = mimosaceae
+        self.mollicrush = mollicrush
+        self.nedder = nedder
+        self.retinasphalt = retinasphalt
+        self.sough = sough
+        self.steading = steading
+        self.theopaschitism = theopaschitism
+        self.undurableness = undurableness
+        self.unmingleable = unmingleable
+    }
+}
+
+// MARK: Ressaut convenience initializers and mutators
+
+extension Ressaut {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Ressaut.self, from: data)
+        self.init(apperceptive: me.apperceptive, cuttoo: me.cuttoo, douser: me.douser, drinkproof: me.drinkproof, forementioned: me.forementioned, freesia: me.freesia, genevieve: me.genevieve, hyperdiabolical: me.hyperdiabolical, hypocone: me.hypocone, irreverentially: me.irreverentially, jumart: me.jumart, mimosaceae: me.mimosaceae, mollicrush: me.mollicrush, nedder: me.nedder, retinasphalt: me.retinasphalt, sough: me.sough, steading: me.steading, theopaschitism: me.theopaschitism, undurableness: me.undurableness, unmingleable: me.unmingleable)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apperceptive: String? = nil,
+        cuttoo: String? = nil,
+        douser: String? = nil,
+        drinkproof: String? = nil,
+        forementioned: String? = nil,
+        freesia: String? = nil,
+        genevieve: String? = nil,
+        hyperdiabolical: String? = nil,
+        hypocone: String? = nil,
+        irreverentially: String? = nil,
+        jumart: String? = nil,
+        mimosaceae: String? = nil,
+        mollicrush: String? = nil,
+        nedder: String? = nil,
+        retinasphalt: String? = nil,
+        sough: String? = nil,
+        steading: String? = nil,
+        theopaschitism: String? = nil,
+        undurableness: String? = nil,
+        unmingleable: String? = nil
+    ) -> Ressaut {
+        return Ressaut(
+            apperceptive: apperceptive ?? self.apperceptive,
+            cuttoo: cuttoo ?? self.cuttoo,
+            douser: douser ?? self.douser,
+            drinkproof: drinkproof ?? self.drinkproof,
+            forementioned: forementioned ?? self.forementioned,
+            freesia: freesia ?? self.freesia,
+            genevieve: genevieve ?? self.genevieve,
+            hyperdiabolical: hyperdiabolical ?? self.hyperdiabolical,
+            hypocone: hypocone ?? self.hypocone,
+            irreverentially: irreverentially ?? self.irreverentially,
+            jumart: jumart ?? self.jumart,
+            mimosaceae: mimosaceae ?? self.mimosaceae,
+            mollicrush: mollicrush ?? self.mollicrush,
+            nedder: nedder ?? self.nedder,
+            retinasphalt: retinasphalt ?? self.retinasphalt,
+            sough: sough ?? self.sough,
+            steading: steading ?? self.steading,
+            theopaschitism: theopaschitism ?? self.theopaschitism,
+            undurableness: undurableness ?? self.undurableness,
+            unmingleable: unmingleable ?? self.unmingleable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Retrocervical: Codable {
+    case integer(Int)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Retrocervical.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Retrocervical"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Revert: Codable {
+    case bool(Bool)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Revert.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Revert"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum RewriteElement: Codable {
+    case double(Double)
+    case nullArray([JSONNull?])
+    case rewriteClass(RewriteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(RewriteClass.self) {
+            self = .rewriteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(RewriteElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for RewriteElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .rewriteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - RewriteClass
+final class RewriteClass: Codable {
+    let accountancy: JSONNull?
+    let cacotrophic: JSONNull?
+    let contest: JSONNull?
+    let couthily: JSONNull?
+    let falculate: JSONNull?
+    let foreseize: JSONNull?
+    let hyades: JSONNull?
+    let lemnad: JSONNull?
+    let monotheistically: JSONNull?
+    let nonflying: JSONNull?
+    let ptenoglossa: JSONNull?
+    let repatch: JSONNull?
+    let rodman: JSONNull?
+    let strung: JSONNull?
+    let titmal: JSONNull?
+    let twalpennyworth: JSONNull?
+    let unblamable: JSONNull?
+    let vertical: JSONNull?
+    let whiggification: JSONNull?
+    let yardman: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case accountancy = "accountancy"
+        case cacotrophic = "cacotrophic"
+        case contest = "contest"
+        case couthily = "couthily"
+        case falculate = "falculate"
+        case foreseize = "foreseize"
+        case hyades = "Hyades"
+        case lemnad = "lemnad"
+        case monotheistically = "monotheistically"
+        case nonflying = "nonflying"
+        case ptenoglossa = "Ptenoglossa"
+        case repatch = "repatch"
+        case rodman = "rodman"
+        case strung = "strung"
+        case titmal = "titmal"
+        case twalpennyworth = "twalpennyworth"
+        case unblamable = "unblamable"
+        case vertical = "vertical"
+        case whiggification = "Whiggification"
+        case yardman = "yardman"
+    }
+
+    init(accountancy: JSONNull?, cacotrophic: JSONNull?, contest: JSONNull?, couthily: JSONNull?, falculate: JSONNull?, foreseize: JSONNull?, hyades: JSONNull?, lemnad: JSONNull?, monotheistically: JSONNull?, nonflying: JSONNull?, ptenoglossa: JSONNull?, repatch: JSONNull?, rodman: JSONNull?, strung: JSONNull?, titmal: JSONNull?, twalpennyworth: JSONNull?, unblamable: JSONNull?, vertical: JSONNull?, whiggification: JSONNull?, yardman: JSONNull?) {
+        self.accountancy = accountancy
+        self.cacotrophic = cacotrophic
+        self.contest = contest
+        self.couthily = couthily
+        self.falculate = falculate
+        self.foreseize = foreseize
+        self.hyades = hyades
+        self.lemnad = lemnad
+        self.monotheistically = monotheistically
+        self.nonflying = nonflying
+        self.ptenoglossa = ptenoglossa
+        self.repatch = repatch
+        self.rodman = rodman
+        self.strung = strung
+        self.titmal = titmal
+        self.twalpennyworth = twalpennyworth
+        self.unblamable = unblamable
+        self.vertical = vertical
+        self.whiggification = whiggification
+        self.yardman = yardman
+    }
+}
+
+// MARK: RewriteClass convenience initializers and mutators
+
+extension RewriteClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(RewriteClass.self, from: data)
+        self.init(accountancy: me.accountancy, cacotrophic: me.cacotrophic, contest: me.contest, couthily: me.couthily, falculate: me.falculate, foreseize: me.foreseize, hyades: me.hyades, lemnad: me.lemnad, monotheistically: me.monotheistically, nonflying: me.nonflying, ptenoglossa: me.ptenoglossa, repatch: me.repatch, rodman: me.rodman, strung: me.strung, titmal: me.titmal, twalpennyworth: me.twalpennyworth, unblamable: me.unblamable, vertical: me.vertical, whiggification: me.whiggification, yardman: me.yardman)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        accountancy: JSONNull?? = nil,
+        cacotrophic: JSONNull?? = nil,
+        contest: JSONNull?? = nil,
+        couthily: JSONNull?? = nil,
+        falculate: JSONNull?? = nil,
+        foreseize: JSONNull?? = nil,
+        hyades: JSONNull?? = nil,
+        lemnad: JSONNull?? = nil,
+        monotheistically: JSONNull?? = nil,
+        nonflying: JSONNull?? = nil,
+        ptenoglossa: JSONNull?? = nil,
+        repatch: JSONNull?? = nil,
+        rodman: JSONNull?? = nil,
+        strung: JSONNull?? = nil,
+        titmal: JSONNull?? = nil,
+        twalpennyworth: JSONNull?? = nil,
+        unblamable: JSONNull?? = nil,
+        vertical: JSONNull?? = nil,
+        whiggification: JSONNull?? = nil,
+        yardman: JSONNull?? = nil
+    ) -> RewriteClass {
+        return RewriteClass(
+            accountancy: accountancy ?? self.accountancy,
+            cacotrophic: cacotrophic ?? self.cacotrophic,
+            contest: contest ?? self.contest,
+            couthily: couthily ?? self.couthily,
+            falculate: falculate ?? self.falculate,
+            foreseize: foreseize ?? self.foreseize,
+            hyades: hyades ?? self.hyades,
+            lemnad: lemnad ?? self.lemnad,
+            monotheistically: monotheistically ?? self.monotheistically,
+            nonflying: nonflying ?? self.nonflying,
+            ptenoglossa: ptenoglossa ?? self.ptenoglossa,
+            repatch: repatch ?? self.repatch,
+            rodman: rodman ?? self.rodman,
+            strung: strung ?? self.strung,
+            titmal: titmal ?? self.titmal,
+            twalpennyworth: twalpennyworth ?? self.twalpennyworth,
+            unblamable: unblamable ?? self.unblamable,
+            vertical: vertical ?? self.vertical,
+            whiggification: whiggification ?? self.whiggification,
+            yardman: yardman ?? self.yardman
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Saccoderm: Codable {
+    case integerArray([Int])
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Saccoderm.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Saccoderm"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum SantirElement: Codable {
+    case double(Double)
+    case santirClass(SantirClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(SantirClass.self) {
+            self = .santirClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(SantirElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for SantirElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .santirClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - SantirClass
+final class SantirClass: Codable {
+    let admiredly: JSONNull?
+    let demicaponier: JSONNull?
+    let epitympanic: JSONNull?
+    let investitor: JSONNull?
+    let lupiform: JSONNull?
+    let monoflagellate: JSONNull?
+    let paleoethnic: JSONNull?
+    let prediscountable: JSONNull?
+    let rhetoricals: JSONNull?
+    let roomth: JSONNull?
+    let saccharose: JSONNull?
+    let septonasal: JSONNull?
+    let serpenticide: JSONNull?
+    let setarious: JSONNull?
+    let spaework: JSONNull?
+    let stylite: JSONNull?
+    let suessiones: JSONNull?
+    let timelily: JSONNull?
+    let unprofaned: JSONNull?
+    let vorticular: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case admiredly = "admiredly"
+        case demicaponier = "demicaponier"
+        case epitympanic = "epitympanic"
+        case investitor = "investitor"
+        case lupiform = "lupiform"
+        case monoflagellate = "monoflagellate"
+        case paleoethnic = "paleoethnic"
+        case prediscountable = "prediscountable"
+        case rhetoricals = "rhetoricals"
+        case roomth = "roomth"
+        case saccharose = "saccharose"
+        case septonasal = "septonasal"
+        case serpenticide = "serpenticide"
+        case setarious = "setarious"
+        case spaework = "spaework"
+        case stylite = "stylite"
+        case suessiones = "Suessiones"
+        case timelily = "timelily"
+        case unprofaned = "unprofaned"
+        case vorticular = "vorticular"
+    }
+
+    init(admiredly: JSONNull?, demicaponier: JSONNull?, epitympanic: JSONNull?, investitor: JSONNull?, lupiform: JSONNull?, monoflagellate: JSONNull?, paleoethnic: JSONNull?, prediscountable: JSONNull?, rhetoricals: JSONNull?, roomth: JSONNull?, saccharose: JSONNull?, septonasal: JSONNull?, serpenticide: JSONNull?, setarious: JSONNull?, spaework: JSONNull?, stylite: JSONNull?, suessiones: JSONNull?, timelily: JSONNull?, unprofaned: JSONNull?, vorticular: JSONNull?) {
+        self.admiredly = admiredly
+        self.demicaponier = demicaponier
+        self.epitympanic = epitympanic
+        self.investitor = investitor
+        self.lupiform = lupiform
+        self.monoflagellate = monoflagellate
+        self.paleoethnic = paleoethnic
+        self.prediscountable = prediscountable
+        self.rhetoricals = rhetoricals
+        self.roomth = roomth
+        self.saccharose = saccharose
+        self.septonasal = septonasal
+        self.serpenticide = serpenticide
+        self.setarious = setarious
+        self.spaework = spaework
+        self.stylite = stylite
+        self.suessiones = suessiones
+        self.timelily = timelily
+        self.unprofaned = unprofaned
+        self.vorticular = vorticular
+    }
+}
+
+// MARK: SantirClass convenience initializers and mutators
+
+extension SantirClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(SantirClass.self, from: data)
+        self.init(admiredly: me.admiredly, demicaponier: me.demicaponier, epitympanic: me.epitympanic, investitor: me.investitor, lupiform: me.lupiform, monoflagellate: me.monoflagellate, paleoethnic: me.paleoethnic, prediscountable: me.prediscountable, rhetoricals: me.rhetoricals, roomth: me.roomth, saccharose: me.saccharose, septonasal: me.septonasal, serpenticide: me.serpenticide, setarious: me.setarious, spaework: me.spaework, stylite: me.stylite, suessiones: me.suessiones, timelily: me.timelily, unprofaned: me.unprofaned, vorticular: me.vorticular)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        admiredly: JSONNull?? = nil,
+        demicaponier: JSONNull?? = nil,
+        epitympanic: JSONNull?? = nil,
+        investitor: JSONNull?? = nil,
+        lupiform: JSONNull?? = nil,
+        monoflagellate: JSONNull?? = nil,
+        paleoethnic: JSONNull?? = nil,
+        prediscountable: JSONNull?? = nil,
+        rhetoricals: JSONNull?? = nil,
+        roomth: JSONNull?? = nil,
+        saccharose: JSONNull?? = nil,
+        septonasal: JSONNull?? = nil,
+        serpenticide: JSONNull?? = nil,
+        setarious: JSONNull?? = nil,
+        spaework: JSONNull?? = nil,
+        stylite: JSONNull?? = nil,
+        suessiones: JSONNull?? = nil,
+        timelily: JSONNull?? = nil,
+        unprofaned: JSONNull?? = nil,
+        vorticular: JSONNull?? = nil
+    ) -> SantirClass {
+        return SantirClass(
+            admiredly: admiredly ?? self.admiredly,
+            demicaponier: demicaponier ?? self.demicaponier,
+            epitympanic: epitympanic ?? self.epitympanic,
+            investitor: investitor ?? self.investitor,
+            lupiform: lupiform ?? self.lupiform,
+            monoflagellate: monoflagellate ?? self.monoflagellate,
+            paleoethnic: paleoethnic ?? self.paleoethnic,
+            prediscountable: prediscountable ?? self.prediscountable,
+            rhetoricals: rhetoricals ?? self.rhetoricals,
+            roomth: roomth ?? self.roomth,
+            saccharose: saccharose ?? self.saccharose,
+            septonasal: septonasal ?? self.septonasal,
+            serpenticide: serpenticide ?? self.serpenticide,
+            setarious: setarious ?? self.setarious,
+            spaework: spaework ?? self.spaework,
+            stylite: stylite ?? self.stylite,
+            suessiones: suessiones ?? self.suessiones,
+            timelily: timelily ?? self.timelily,
+            unprofaned: unprofaned ?? self.unprofaned,
+            vorticular: vorticular ?? self.vorticular
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Saprophilous: Codable {
+    case integerMap([String: Int])
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Saprophilous.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Saprophilous"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum SaxtenElement: Codable {
+    case saxtenClass(SaxtenClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(SaxtenClass.self) {
+            self = .saxtenClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(SaxtenElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for SaxtenElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .saxtenClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - SaxtenClass
+final class SaxtenClass: Codable {
+    let algarrobilla: JSONNull?
+    let bowgrace: JSONNull?
+    let catharticalness: Double?
+    let centaurid: JSONNull?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let flix: JSONNull?
+    let germanely: JSONNull?
+    let homocerc: Bool?
+    let inhume: JSONNull?
+    let lepidote: JSONNull?
+    let megalochirous: JSONNull?
+    let ninepenny: JSONNull?
+    let nonbookish: JSONNull?
+    let nondeist: JSONNull?
+    let nymphaeaceous: JSONNull?
+    let parietofrontal: JSONNull?
+    let sancyite: JSONNull?
+    let subjectivist: JSONNull?
+    let tibiad: JSONNull?
+    let transonic: JSONNull?
+    let tripetalous: JSONNull?
+    let trunchman: JSONNull?
+    let urger: JSONNull?
+    let withdrawnness: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case algarrobilla = "algarrobilla"
+        case bowgrace = "bowgrace"
+        case catharticalness = "catharticalness"
+        case centaurid = "Centaurid"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case flix = "flix"
+        case germanely = "germanely"
+        case homocerc = "homocerc"
+        case inhume = "inhume"
+        case lepidote = "lepidote"
+        case megalochirous = "megalochirous"
+        case ninepenny = "ninepenny"
+        case nonbookish = "nonbookish"
+        case nondeist = "nondeist"
+        case nymphaeaceous = "nymphaeaceous"
+        case parietofrontal = "parietofrontal"
+        case sancyite = "sancyite"
+        case subjectivist = "subjectivist"
+        case tibiad = "tibiad"
+        case transonic = "transonic"
+        case tripetalous = "tripetalous"
+        case trunchman = "trunchman"
+        case urger = "urger"
+        case withdrawnness = "withdrawnness"
+    }
+
+    init(algarrobilla: JSONNull?, bowgrace: JSONNull?, catharticalness: Double?, centaurid: JSONNull?, chirotherium: Int?, disdiapason: String?, flix: JSONNull?, germanely: JSONNull?, homocerc: Bool?, inhume: JSONNull?, lepidote: JSONNull?, megalochirous: JSONNull?, ninepenny: JSONNull?, nonbookish: JSONNull?, nondeist: JSONNull?, nymphaeaceous: JSONNull?, parietofrontal: JSONNull?, sancyite: JSONNull?, subjectivist: JSONNull?, tibiad: JSONNull?, transonic: JSONNull?, tripetalous: JSONNull?, trunchman: JSONNull?, urger: JSONNull?, withdrawnness: JSONNull?) {
+        self.algarrobilla = algarrobilla
+        self.bowgrace = bowgrace
+        self.catharticalness = catharticalness
+        self.centaurid = centaurid
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.flix = flix
+        self.germanely = germanely
+        self.homocerc = homocerc
+        self.inhume = inhume
+        self.lepidote = lepidote
+        self.megalochirous = megalochirous
+        self.ninepenny = ninepenny
+        self.nonbookish = nonbookish
+        self.nondeist = nondeist
+        self.nymphaeaceous = nymphaeaceous
+        self.parietofrontal = parietofrontal
+        self.sancyite = sancyite
+        self.subjectivist = subjectivist
+        self.tibiad = tibiad
+        self.transonic = transonic
+        self.tripetalous = tripetalous
+        self.trunchman = trunchman
+        self.urger = urger
+        self.withdrawnness = withdrawnness
+    }
+}
+
+// MARK: SaxtenClass convenience initializers and mutators
+
+extension SaxtenClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(SaxtenClass.self, from: data)
+        self.init(algarrobilla: me.algarrobilla, bowgrace: me.bowgrace, catharticalness: me.catharticalness, centaurid: me.centaurid, chirotherium: me.chirotherium, disdiapason: me.disdiapason, flix: me.flix, germanely: me.germanely, homocerc: me.homocerc, inhume: me.inhume, lepidote: me.lepidote, megalochirous: me.megalochirous, ninepenny: me.ninepenny, nonbookish: me.nonbookish, nondeist: me.nondeist, nymphaeaceous: me.nymphaeaceous, parietofrontal: me.parietofrontal, sancyite: me.sancyite, subjectivist: me.subjectivist, tibiad: me.tibiad, transonic: me.transonic, tripetalous: me.tripetalous, trunchman: me.trunchman, urger: me.urger, withdrawnness: me.withdrawnness)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        algarrobilla: JSONNull?? = nil,
+        bowgrace: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        centaurid: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        flix: JSONNull?? = nil,
+        germanely: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        inhume: JSONNull?? = nil,
+        lepidote: JSONNull?? = nil,
+        megalochirous: JSONNull?? = nil,
+        ninepenny: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        nondeist: JSONNull?? = nil,
+        nymphaeaceous: JSONNull?? = nil,
+        parietofrontal: JSONNull?? = nil,
+        sancyite: JSONNull?? = nil,
+        subjectivist: JSONNull?? = nil,
+        tibiad: JSONNull?? = nil,
+        transonic: JSONNull?? = nil,
+        tripetalous: JSONNull?? = nil,
+        trunchman: JSONNull?? = nil,
+        urger: JSONNull?? = nil,
+        withdrawnness: JSONNull?? = nil
+    ) -> SaxtenClass {
+        return SaxtenClass(
+            algarrobilla: algarrobilla ?? self.algarrobilla,
+            bowgrace: bowgrace ?? self.bowgrace,
+            catharticalness: catharticalness ?? self.catharticalness,
+            centaurid: centaurid ?? self.centaurid,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            flix: flix ?? self.flix,
+            germanely: germanely ?? self.germanely,
+            homocerc: homocerc ?? self.homocerc,
+            inhume: inhume ?? self.inhume,
+            lepidote: lepidote ?? self.lepidote,
+            megalochirous: megalochirous ?? self.megalochirous,
+            ninepenny: ninepenny ?? self.ninepenny,
+            nonbookish: nonbookish ?? self.nonbookish,
+            nondeist: nondeist ?? self.nondeist,
+            nymphaeaceous: nymphaeaceous ?? self.nymphaeaceous,
+            parietofrontal: parietofrontal ?? self.parietofrontal,
+            sancyite: sancyite ?? self.sancyite,
+            subjectivist: subjectivist ?? self.subjectivist,
+            tibiad: tibiad ?? self.tibiad,
+            transonic: transonic ?? self.transonic,
+            tripetalous: tripetalous ?? self.tripetalous,
+            trunchman: trunchman ?? self.trunchman,
+            urger: urger ?? self.urger,
+            withdrawnness: withdrawnness ?? self.withdrawnness
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Scatty
+final class Scatty: Codable {
+    let aeriferous: JSONNull?
+    let antical: JSONNull?
+    let antighostism: JSONNull?
+    let arcanum: JSONNull?
+    let autotrophy: JSONNull?
+    let baronial: JSONNull?
+    let caffeine: JSONNull?
+    let gorgoniacean: JSONNull?
+    let heroical: JSONNull?
+    let hydropical: JSONNull?
+    let mechanology: JSONNull?
+    let musicopoetic: JSONNull?
+    let officiality: JSONNull?
+    let oftentimes: JSONNull?
+    let ophthalmotonometer: JSONNull?
+    let reflectively: JSONNull?
+    let springer: JSONNull?
+    let tabasco: JSONNull?
+    let teleianthous: JSONNull?
+    let uncombated: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case aeriferous = "aeriferous"
+        case antical = "antical"
+        case antighostism = "antighostism"
+        case arcanum = "arcanum"
+        case autotrophy = "autotrophy"
+        case baronial = "baronial"
+        case caffeine = "caffeine"
+        case gorgoniacean = "gorgoniacean"
+        case heroical = "heroical"
+        case hydropical = "hydropical"
+        case mechanology = "mechanology"
+        case musicopoetic = "musicopoetic"
+        case officiality = "officiality"
+        case oftentimes = "oftentimes"
+        case ophthalmotonometer = "ophthalmotonometer"
+        case reflectively = "reflectively"
+        case springer = "springer"
+        case tabasco = "Tabasco"
+        case teleianthous = "teleianthous"
+        case uncombated = "uncombated"
+    }
+
+    init(aeriferous: JSONNull?, antical: JSONNull?, antighostism: JSONNull?, arcanum: JSONNull?, autotrophy: JSONNull?, baronial: JSONNull?, caffeine: JSONNull?, gorgoniacean: JSONNull?, heroical: JSONNull?, hydropical: JSONNull?, mechanology: JSONNull?, musicopoetic: JSONNull?, officiality: JSONNull?, oftentimes: JSONNull?, ophthalmotonometer: JSONNull?, reflectively: JSONNull?, springer: JSONNull?, tabasco: JSONNull?, teleianthous: JSONNull?, uncombated: JSONNull?) {
+        self.aeriferous = aeriferous
+        self.antical = antical
+        self.antighostism = antighostism
+        self.arcanum = arcanum
+        self.autotrophy = autotrophy
+        self.baronial = baronial
+        self.caffeine = caffeine
+        self.gorgoniacean = gorgoniacean
+        self.heroical = heroical
+        self.hydropical = hydropical
+        self.mechanology = mechanology
+        self.musicopoetic = musicopoetic
+        self.officiality = officiality
+        self.oftentimes = oftentimes
+        self.ophthalmotonometer = ophthalmotonometer
+        self.reflectively = reflectively
+        self.springer = springer
+        self.tabasco = tabasco
+        self.teleianthous = teleianthous
+        self.uncombated = uncombated
+    }
+}
+
+// MARK: Scatty convenience initializers and mutators
+
+extension Scatty {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Scatty.self, from: data)
+        self.init(aeriferous: me.aeriferous, antical: me.antical, antighostism: me.antighostism, arcanum: me.arcanum, autotrophy: me.autotrophy, baronial: me.baronial, caffeine: me.caffeine, gorgoniacean: me.gorgoniacean, heroical: me.heroical, hydropical: me.hydropical, mechanology: me.mechanology, musicopoetic: me.musicopoetic, officiality: me.officiality, oftentimes: me.oftentimes, ophthalmotonometer: me.ophthalmotonometer, reflectively: me.reflectively, springer: me.springer, tabasco: me.tabasco, teleianthous: me.teleianthous, uncombated: me.uncombated)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        aeriferous: JSONNull?? = nil,
+        antical: JSONNull?? = nil,
+        antighostism: JSONNull?? = nil,
+        arcanum: JSONNull?? = nil,
+        autotrophy: JSONNull?? = nil,
+        baronial: JSONNull?? = nil,
+        caffeine: JSONNull?? = nil,
+        gorgoniacean: JSONNull?? = nil,
+        heroical: JSONNull?? = nil,
+        hydropical: JSONNull?? = nil,
+        mechanology: JSONNull?? = nil,
+        musicopoetic: JSONNull?? = nil,
+        officiality: JSONNull?? = nil,
+        oftentimes: JSONNull?? = nil,
+        ophthalmotonometer: JSONNull?? = nil,
+        reflectively: JSONNull?? = nil,
+        springer: JSONNull?? = nil,
+        tabasco: JSONNull?? = nil,
+        teleianthous: JSONNull?? = nil,
+        uncombated: JSONNull?? = nil
+    ) -> Scatty {
+        return Scatty(
+            aeriferous: aeriferous ?? self.aeriferous,
+            antical: antical ?? self.antical,
+            antighostism: antighostism ?? self.antighostism,
+            arcanum: arcanum ?? self.arcanum,
+            autotrophy: autotrophy ?? self.autotrophy,
+            baronial: baronial ?? self.baronial,
+            caffeine: caffeine ?? self.caffeine,
+            gorgoniacean: gorgoniacean ?? self.gorgoniacean,
+            heroical: heroical ?? self.heroical,
+            hydropical: hydropical ?? self.hydropical,
+            mechanology: mechanology ?? self.mechanology,
+            musicopoetic: musicopoetic ?? self.musicopoetic,
+            officiality: officiality ?? self.officiality,
+            oftentimes: oftentimes ?? self.oftentimes,
+            ophthalmotonometer: ophthalmotonometer ?? self.ophthalmotonometer,
+            reflectively: reflectively ?? self.reflectively,
+            springer: springer ?? self.springer,
+            tabasco: tabasco ?? self.tabasco,
+            teleianthous: teleianthous ?? self.teleianthous,
+            uncombated: uncombated ?? self.uncombated
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Scoffer: Codable {
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Scoffer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Scoffer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Scrampum: Codable {
+    case bool(Bool)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Scrampum.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Scrampum"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Serpentinic: Codable {
+    case double(Double)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Serpentinic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Serpentinic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Shadowable: Codable {
+    case bool(Bool)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Shadowable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Shadowable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum SisteringElement: Codable {
+    case integer(Int)
+    case nullArray([JSONNull?])
+    case sisteringClass(SisteringClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(SisteringClass.self) {
+            self = .sisteringClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(SisteringElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for SisteringElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .sisteringClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - SisteringClass
+final class SisteringClass: Codable {
+    let amphicarpic: JSONNull?
+    let chianti: JSONNull?
+    let frigorific: JSONNull?
+    let haplomi: JSONNull?
+    let hyperkinesis: JSONNull?
+    let laudable: JSONNull?
+    let madwoman: JSONNull?
+    let maimedly: JSONNull?
+    let micropterygidae: JSONNull?
+    let microrhabdus: JSONNull?
+    let nondense: JSONNull?
+    let phlebemphraxis: JSONNull?
+    let redsear: JSONNull?
+    let schismatical: JSONNull?
+    let tartryl: JSONNull?
+    let unabhorred: JSONNull?
+    let undeliberateness: JSONNull?
+    let unmixable: JSONNull?
+    let untruckling: JSONNull?
+    let vineal: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amphicarpic = "amphicarpic"
+        case chianti = "Chianti"
+        case frigorific = "frigorific"
+        case haplomi = "Haplomi"
+        case hyperkinesis = "hyperkinesis"
+        case laudable = "laudable"
+        case madwoman = "madwoman"
+        case maimedly = "maimedly"
+        case micropterygidae = "Micropterygidae"
+        case microrhabdus = "microrhabdus"
+        case nondense = "nondense"
+        case phlebemphraxis = "phlebemphraxis"
+        case redsear = "redsear"
+        case schismatical = "schismatical"
+        case tartryl = "tartryl"
+        case unabhorred = "unabhorred"
+        case undeliberateness = "undeliberateness"
+        case unmixable = "unmixable"
+        case untruckling = "untruckling"
+        case vineal = "vineal"
+    }
+
+    init(amphicarpic: JSONNull?, chianti: JSONNull?, frigorific: JSONNull?, haplomi: JSONNull?, hyperkinesis: JSONNull?, laudable: JSONNull?, madwoman: JSONNull?, maimedly: JSONNull?, micropterygidae: JSONNull?, microrhabdus: JSONNull?, nondense: JSONNull?, phlebemphraxis: JSONNull?, redsear: JSONNull?, schismatical: JSONNull?, tartryl: JSONNull?, unabhorred: JSONNull?, undeliberateness: JSONNull?, unmixable: JSONNull?, untruckling: JSONNull?, vineal: JSONNull?) {
+        self.amphicarpic = amphicarpic
+        self.chianti = chianti
+        self.frigorific = frigorific
+        self.haplomi = haplomi
+        self.hyperkinesis = hyperkinesis
+        self.laudable = laudable
+        self.madwoman = madwoman
+        self.maimedly = maimedly
+        self.micropterygidae = micropterygidae
+        self.microrhabdus = microrhabdus
+        self.nondense = nondense
+        self.phlebemphraxis = phlebemphraxis
+        self.redsear = redsear
+        self.schismatical = schismatical
+        self.tartryl = tartryl
+        self.unabhorred = unabhorred
+        self.undeliberateness = undeliberateness
+        self.unmixable = unmixable
+        self.untruckling = untruckling
+        self.vineal = vineal
+    }
+}
+
+// MARK: SisteringClass convenience initializers and mutators
+
+extension SisteringClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(SisteringClass.self, from: data)
+        self.init(amphicarpic: me.amphicarpic, chianti: me.chianti, frigorific: me.frigorific, haplomi: me.haplomi, hyperkinesis: me.hyperkinesis, laudable: me.laudable, madwoman: me.madwoman, maimedly: me.maimedly, micropterygidae: me.micropterygidae, microrhabdus: me.microrhabdus, nondense: me.nondense, phlebemphraxis: me.phlebemphraxis, redsear: me.redsear, schismatical: me.schismatical, tartryl: me.tartryl, unabhorred: me.unabhorred, undeliberateness: me.undeliberateness, unmixable: me.unmixable, untruckling: me.untruckling, vineal: me.vineal)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amphicarpic: JSONNull?? = nil,
+        chianti: JSONNull?? = nil,
+        frigorific: JSONNull?? = nil,
+        haplomi: JSONNull?? = nil,
+        hyperkinesis: JSONNull?? = nil,
+        laudable: JSONNull?? = nil,
+        madwoman: JSONNull?? = nil,
+        maimedly: JSONNull?? = nil,
+        micropterygidae: JSONNull?? = nil,
+        microrhabdus: JSONNull?? = nil,
+        nondense: JSONNull?? = nil,
+        phlebemphraxis: JSONNull?? = nil,
+        redsear: JSONNull?? = nil,
+        schismatical: JSONNull?? = nil,
+        tartryl: JSONNull?? = nil,
+        unabhorred: JSONNull?? = nil,
+        undeliberateness: JSONNull?? = nil,
+        unmixable: JSONNull?? = nil,
+        untruckling: JSONNull?? = nil,
+        vineal: JSONNull?? = nil
+    ) -> SisteringClass {
+        return SisteringClass(
+            amphicarpic: amphicarpic ?? self.amphicarpic,
+            chianti: chianti ?? self.chianti,
+            frigorific: frigorific ?? self.frigorific,
+            haplomi: haplomi ?? self.haplomi,
+            hyperkinesis: hyperkinesis ?? self.hyperkinesis,
+            laudable: laudable ?? self.laudable,
+            madwoman: madwoman ?? self.madwoman,
+            maimedly: maimedly ?? self.maimedly,
+            micropterygidae: micropterygidae ?? self.micropterygidae,
+            microrhabdus: microrhabdus ?? self.microrhabdus,
+            nondense: nondense ?? self.nondense,
+            phlebemphraxis: phlebemphraxis ?? self.phlebemphraxis,
+            redsear: redsear ?? self.redsear,
+            schismatical: schismatical ?? self.schismatical,
+            tartryl: tartryl ?? self.tartryl,
+            unabhorred: unabhorred ?? self.unabhorred,
+            undeliberateness: undeliberateness ?? self.undeliberateness,
+            unmixable: unmixable ?? self.unmixable,
+            untruckling: untruckling ?? self.untruckling,
+            vineal: vineal ?? self.vineal
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Staghunting
+final class Staghunting: Codable {
+    let calorimetric: Int?
+    let canid: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let ditriglyphic: Int?
+    let floriferousness: Int?
+    let gamelike: Int?
+    let grig: Int?
+    let homocerc: Bool?
+    let interloan: Int?
+    let lithotomy: Int?
+    let loric: Int?
+    let membranocoriaceous: Int?
+    let membranogenic: Int?
+    let nonbookish: JSONNull?
+    let overtrump: Int?
+    let scotino: Int?
+    let seasonable: Int?
+    let sephen: Int?
+    let stigmarioid: Int?
+    let tired: Int?
+    let trifid: Int?
+    let undefeatedly: Int?
+    let ungirlish: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case calorimetric = "calorimetric"
+        case canid = "canid"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case ditriglyphic = "ditriglyphic"
+        case floriferousness = "floriferousness"
+        case gamelike = "gamelike"
+        case grig = "grig"
+        case homocerc = "homocerc"
+        case interloan = "interloan"
+        case lithotomy = "lithotomy"
+        case loric = "loric"
+        case membranocoriaceous = "membranocoriaceous"
+        case membranogenic = "membranogenic"
+        case nonbookish = "nonbookish"
+        case overtrump = "overtrump"
+        case scotino = "scotino"
+        case seasonable = "seasonable"
+        case sephen = "sephen"
+        case stigmarioid = "stigmarioid"
+        case tired = "tired"
+        case trifid = "trifid"
+        case undefeatedly = "undefeatedly"
+        case ungirlish = "ungirlish"
+    }
+
+    init(calorimetric: Int?, canid: Int?, catharticalness: Double?, chirotherium: Int?, disdiapason: String?, ditriglyphic: Int?, floriferousness: Int?, gamelike: Int?, grig: Int?, homocerc: Bool?, interloan: Int?, lithotomy: Int?, loric: Int?, membranocoriaceous: Int?, membranogenic: Int?, nonbookish: JSONNull?, overtrump: Int?, scotino: Int?, seasonable: Int?, sephen: Int?, stigmarioid: Int?, tired: Int?, trifid: Int?, undefeatedly: Int?, ungirlish: Int?) {
+        self.calorimetric = calorimetric
+        self.canid = canid
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.ditriglyphic = ditriglyphic
+        self.floriferousness = floriferousness
+        self.gamelike = gamelike
+        self.grig = grig
+        self.homocerc = homocerc
+        self.interloan = interloan
+        self.lithotomy = lithotomy
+        self.loric = loric
+        self.membranocoriaceous = membranocoriaceous
+        self.membranogenic = membranogenic
+        self.nonbookish = nonbookish
+        self.overtrump = overtrump
+        self.scotino = scotino
+        self.seasonable = seasonable
+        self.sephen = sephen
+        self.stigmarioid = stigmarioid
+        self.tired = tired
+        self.trifid = trifid
+        self.undefeatedly = undefeatedly
+        self.ungirlish = ungirlish
+    }
+}
+
+// MARK: Staghunting convenience initializers and mutators
+
+extension Staghunting {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Staghunting.self, from: data)
+        self.init(calorimetric: me.calorimetric, canid: me.canid, catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, ditriglyphic: me.ditriglyphic, floriferousness: me.floriferousness, gamelike: me.gamelike, grig: me.grig, homocerc: me.homocerc, interloan: me.interloan, lithotomy: me.lithotomy, loric: me.loric, membranocoriaceous: me.membranocoriaceous, membranogenic: me.membranogenic, nonbookish: me.nonbookish, overtrump: me.overtrump, scotino: me.scotino, seasonable: me.seasonable, sephen: me.sephen, stigmarioid: me.stigmarioid, tired: me.tired, trifid: me.trifid, undefeatedly: me.undefeatedly, ungirlish: me.ungirlish)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        calorimetric: Int?? = nil,
+        canid: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        ditriglyphic: Int?? = nil,
+        floriferousness: Int?? = nil,
+        gamelike: Int?? = nil,
+        grig: Int?? = nil,
+        homocerc: Bool?? = nil,
+        interloan: Int?? = nil,
+        lithotomy: Int?? = nil,
+        loric: Int?? = nil,
+        membranocoriaceous: Int?? = nil,
+        membranogenic: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        overtrump: Int?? = nil,
+        scotino: Int?? = nil,
+        seasonable: Int?? = nil,
+        sephen: Int?? = nil,
+        stigmarioid: Int?? = nil,
+        tired: Int?? = nil,
+        trifid: Int?? = nil,
+        undefeatedly: Int?? = nil,
+        ungirlish: Int?? = nil
+    ) -> Staghunting {
+        return Staghunting(
+            calorimetric: calorimetric ?? self.calorimetric,
+            canid: canid ?? self.canid,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ditriglyphic: ditriglyphic ?? self.ditriglyphic,
+            floriferousness: floriferousness ?? self.floriferousness,
+            gamelike: gamelike ?? self.gamelike,
+            grig: grig ?? self.grig,
+            homocerc: homocerc ?? self.homocerc,
+            interloan: interloan ?? self.interloan,
+            lithotomy: lithotomy ?? self.lithotomy,
+            loric: loric ?? self.loric,
+            membranocoriaceous: membranocoriaceous ?? self.membranocoriaceous,
+            membranogenic: membranogenic ?? self.membranogenic,
+            nonbookish: nonbookish ?? self.nonbookish,
+            overtrump: overtrump ?? self.overtrump,
+            scotino: scotino ?? self.scotino,
+            seasonable: seasonable ?? self.seasonable,
+            sephen: sephen ?? self.sephen,
+            stigmarioid: stigmarioid ?? self.stigmarioid,
+            tired: tired ?? self.tired,
+            trifid: trifid ?? self.trifid,
+            undefeatedly: undefeatedly ?? self.undefeatedly,
+            ungirlish: ungirlish ?? self.ungirlish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Stagmometer: Codable {
+    case string(String)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Stagmometer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Stagmometer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .string(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Stimulability: Codable {
+    case bool(Bool)
+    case integer(Int)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Stimulability.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Stimulability"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Strangleable: Codable {
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Strangleable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Strangleable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum StrenuosityElement: Codable {
+    case nullArray([JSONNull?])
+    case strenuosityClass(StrenuosityClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(StrenuosityClass.self) {
+            self = .strenuosityClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(StrenuosityElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for StrenuosityElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .strenuosityClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - StrenuosityClass
+final class StrenuosityClass: Codable {
+    let bliss: Int?
+    let buccate: Int?
+    let bulletproof: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let crumblingness: Int?
+    let disdiapason: String?
+    let engagedly: Int?
+    let fightable: Int?
+    let hoariness: Int?
+    let homocerc: Bool?
+    let hypopodium: Int?
+    let luxurist: Int?
+    let mechanician: Int?
+    let nonbookish: JSONNull?
+    let onopordon: Int?
+    let podgily: Int?
+    let reformableness: Int?
+    let scatterbrains: Int?
+    let seminuria: Int?
+    let sodomite: Int?
+    let tramp: Int?
+    let undueness: Int?
+    let worthily: Int?
+    let yankeeist: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case bliss = "bliss"
+        case buccate = "buccate"
+        case bulletproof = "bulletproof"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case crumblingness = "crumblingness"
+        case disdiapason = "disdiapason"
+        case engagedly = "engagedly"
+        case fightable = "fightable"
+        case hoariness = "hoariness"
+        case homocerc = "homocerc"
+        case hypopodium = "hypopodium"
+        case luxurist = "luxurist"
+        case mechanician = "mechanician"
+        case nonbookish = "nonbookish"
+        case onopordon = "Onopordon"
+        case podgily = "podgily"
+        case reformableness = "reformableness"
+        case scatterbrains = "scatterbrains"
+        case seminuria = "seminuria"
+        case sodomite = "Sodomite"
+        case tramp = "tramp"
+        case undueness = "undueness"
+        case worthily = "worthily"
+        case yankeeist = "Yankeeist"
+    }
+
+    init(bliss: Int?, buccate: Int?, bulletproof: Int?, catharticalness: Double?, chirotherium: Int?, crumblingness: Int?, disdiapason: String?, engagedly: Int?, fightable: Int?, hoariness: Int?, homocerc: Bool?, hypopodium: Int?, luxurist: Int?, mechanician: Int?, nonbookish: JSONNull?, onopordon: Int?, podgily: Int?, reformableness: Int?, scatterbrains: Int?, seminuria: Int?, sodomite: Int?, tramp: Int?, undueness: Int?, worthily: Int?, yankeeist: Int?) {
+        self.bliss = bliss
+        self.buccate = buccate
+        self.bulletproof = bulletproof
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.crumblingness = crumblingness
+        self.disdiapason = disdiapason
+        self.engagedly = engagedly
+        self.fightable = fightable
+        self.hoariness = hoariness
+        self.homocerc = homocerc
+        self.hypopodium = hypopodium
+        self.luxurist = luxurist
+        self.mechanician = mechanician
+        self.nonbookish = nonbookish
+        self.onopordon = onopordon
+        self.podgily = podgily
+        self.reformableness = reformableness
+        self.scatterbrains = scatterbrains
+        self.seminuria = seminuria
+        self.sodomite = sodomite
+        self.tramp = tramp
+        self.undueness = undueness
+        self.worthily = worthily
+        self.yankeeist = yankeeist
+    }
+}
+
+// MARK: StrenuosityClass convenience initializers and mutators
+
+extension StrenuosityClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(StrenuosityClass.self, from: data)
+        self.init(bliss: me.bliss, buccate: me.buccate, bulletproof: me.bulletproof, catharticalness: me.catharticalness, chirotherium: me.chirotherium, crumblingness: me.crumblingness, disdiapason: me.disdiapason, engagedly: me.engagedly, fightable: me.fightable, hoariness: me.hoariness, homocerc: me.homocerc, hypopodium: me.hypopodium, luxurist: me.luxurist, mechanician: me.mechanician, nonbookish: me.nonbookish, onopordon: me.onopordon, podgily: me.podgily, reformableness: me.reformableness, scatterbrains: me.scatterbrains, seminuria: me.seminuria, sodomite: me.sodomite, tramp: me.tramp, undueness: me.undueness, worthily: me.worthily, yankeeist: me.yankeeist)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        bliss: Int?? = nil,
+        buccate: Int?? = nil,
+        bulletproof: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        crumblingness: Int?? = nil,
+        disdiapason: String?? = nil,
+        engagedly: Int?? = nil,
+        fightable: Int?? = nil,
+        hoariness: Int?? = nil,
+        homocerc: Bool?? = nil,
+        hypopodium: Int?? = nil,
+        luxurist: Int?? = nil,
+        mechanician: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        onopordon: Int?? = nil,
+        podgily: Int?? = nil,
+        reformableness: Int?? = nil,
+        scatterbrains: Int?? = nil,
+        seminuria: Int?? = nil,
+        sodomite: Int?? = nil,
+        tramp: Int?? = nil,
+        undueness: Int?? = nil,
+        worthily: Int?? = nil,
+        yankeeist: Int?? = nil
+    ) -> StrenuosityClass {
+        return StrenuosityClass(
+            bliss: bliss ?? self.bliss,
+            buccate: buccate ?? self.buccate,
+            bulletproof: bulletproof ?? self.bulletproof,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            crumblingness: crumblingness ?? self.crumblingness,
+            disdiapason: disdiapason ?? self.disdiapason,
+            engagedly: engagedly ?? self.engagedly,
+            fightable: fightable ?? self.fightable,
+            hoariness: hoariness ?? self.hoariness,
+            homocerc: homocerc ?? self.homocerc,
+            hypopodium: hypopodium ?? self.hypopodium,
+            luxurist: luxurist ?? self.luxurist,
+            mechanician: mechanician ?? self.mechanician,
+            nonbookish: nonbookish ?? self.nonbookish,
+            onopordon: onopordon ?? self.onopordon,
+            podgily: podgily ?? self.podgily,
+            reformableness: reformableness ?? self.reformableness,
+            scatterbrains: scatterbrains ?? self.scatterbrains,
+            seminuria: seminuria ?? self.seminuria,
+            sodomite: sodomite ?? self.sodomite,
+            tramp: tramp ?? self.tramp,
+            undueness: undueness ?? self.undueness,
+            worthily: worthily ?? self.worthily,
+            yankeeist: yankeeist ?? self.yankeeist
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Tabaxir: Codable {
+    case bool(Bool)
+    case double(Double)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Tabaxir.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Tabaxir"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Talpiform: Codable {
+    case double(Double)
+    case quebrachineClass(QuebrachineClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Talpiform.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Talpiform"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Thwack: Codable {
+    case bool(Bool)
+    case double(Double)
+    case quebrachineClass(QuebrachineClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Thwack.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Thwack"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Tortricine: Codable {
+    case quebrachineClass(QuebrachineClass)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Tortricine.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Tortricine"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum TruantcyElement: Codable {
+    case bool(Bool)
+    case truantcyClass(TruantcyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(TruantcyClass.self) {
+            self = .truantcyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(TruantcyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for TruantcyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .truantcyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - TruantcyClass
+final class TruantcyClass: Codable {
+    let alfiona: JSONNull?
+    let ascaridiasis: JSONNull?
+    let bungey: JSONNull?
+    let catharticalness: Double?
+    let ceroxyle: JSONNull?
+    let chirotherium: Int?
+    let chorology: JSONNull?
+    let disdiapason: String?
+    let enmarble: JSONNull?
+    let epeira: JSONNull?
+    let eurylaimi: JSONNull?
+    let germination: JSONNull?
+    let hallelujah: JSONNull?
+    let homocerc: Bool?
+    let lev: JSONNull?
+    let mouthing: JSONNull?
+    let nonbookish: JSONNull?
+    let philliloo: JSONNull?
+    let planetal: JSONNull?
+    let poney: JSONNull?
+    let punctualist: JSONNull?
+    let returnlessly: JSONNull?
+    let skelder: JSONNull?
+    let windwaywardly: JSONNull?
+    let yuman: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case alfiona = "alfiona"
+        case ascaridiasis = "ascaridiasis"
+        case bungey = "bungey"
+        case catharticalness = "catharticalness"
+        case ceroxyle = "ceroxyle"
+        case chirotherium = "Chirotherium"
+        case chorology = "chorology"
+        case disdiapason = "disdiapason"
+        case enmarble = "enmarble"
+        case epeira = "Epeira"
+        case eurylaimi = "Eurylaimi"
+        case germination = "germination"
+        case hallelujah = "hallelujah"
+        case homocerc = "homocerc"
+        case lev = "lev"
+        case mouthing = "mouthing"
+        case nonbookish = "nonbookish"
+        case philliloo = "philliloo"
+        case planetal = "planetal"
+        case poney = "poney"
+        case punctualist = "punctualist"
+        case returnlessly = "returnlessly"
+        case skelder = "skelder"
+        case windwaywardly = "windwaywardly"
+        case yuman = "Yuman"
+    }
+
+    init(alfiona: JSONNull?, ascaridiasis: JSONNull?, bungey: JSONNull?, catharticalness: Double?, ceroxyle: JSONNull?, chirotherium: Int?, chorology: JSONNull?, disdiapason: String?, enmarble: JSONNull?, epeira: JSONNull?, eurylaimi: JSONNull?, germination: JSONNull?, hallelujah: JSONNull?, homocerc: Bool?, lev: JSONNull?, mouthing: JSONNull?, nonbookish: JSONNull?, philliloo: JSONNull?, planetal: JSONNull?, poney: JSONNull?, punctualist: JSONNull?, returnlessly: JSONNull?, skelder: JSONNull?, windwaywardly: JSONNull?, yuman: JSONNull?) {
+        self.alfiona = alfiona
+        self.ascaridiasis = ascaridiasis
+        self.bungey = bungey
+        self.catharticalness = catharticalness
+        self.ceroxyle = ceroxyle
+        self.chirotherium = chirotherium
+        self.chorology = chorology
+        self.disdiapason = disdiapason
+        self.enmarble = enmarble
+        self.epeira = epeira
+        self.eurylaimi = eurylaimi
+        self.germination = germination
+        self.hallelujah = hallelujah
+        self.homocerc = homocerc
+        self.lev = lev
+        self.mouthing = mouthing
+        self.nonbookish = nonbookish
+        self.philliloo = philliloo
+        self.planetal = planetal
+        self.poney = poney
+        self.punctualist = punctualist
+        self.returnlessly = returnlessly
+        self.skelder = skelder
+        self.windwaywardly = windwaywardly
+        self.yuman = yuman
+    }
+}
+
+// MARK: TruantcyClass convenience initializers and mutators
+
+extension TruantcyClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(TruantcyClass.self, from: data)
+        self.init(alfiona: me.alfiona, ascaridiasis: me.ascaridiasis, bungey: me.bungey, catharticalness: me.catharticalness, ceroxyle: me.ceroxyle, chirotherium: me.chirotherium, chorology: me.chorology, disdiapason: me.disdiapason, enmarble: me.enmarble, epeira: me.epeira, eurylaimi: me.eurylaimi, germination: me.germination, hallelujah: me.hallelujah, homocerc: me.homocerc, lev: me.lev, mouthing: me.mouthing, nonbookish: me.nonbookish, philliloo: me.philliloo, planetal: me.planetal, poney: me.poney, punctualist: me.punctualist, returnlessly: me.returnlessly, skelder: me.skelder, windwaywardly: me.windwaywardly, yuman: me.yuman)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        alfiona: JSONNull?? = nil,
+        ascaridiasis: JSONNull?? = nil,
+        bungey: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        ceroxyle: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        chorology: JSONNull?? = nil,
+        disdiapason: String?? = nil,
+        enmarble: JSONNull?? = nil,
+        epeira: JSONNull?? = nil,
+        eurylaimi: JSONNull?? = nil,
+        germination: JSONNull?? = nil,
+        hallelujah: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        lev: JSONNull?? = nil,
+        mouthing: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        philliloo: JSONNull?? = nil,
+        planetal: JSONNull?? = nil,
+        poney: JSONNull?? = nil,
+        punctualist: JSONNull?? = nil,
+        returnlessly: JSONNull?? = nil,
+        skelder: JSONNull?? = nil,
+        windwaywardly: JSONNull?? = nil,
+        yuman: JSONNull?? = nil
+    ) -> TruantcyClass {
+        return TruantcyClass(
+            alfiona: alfiona ?? self.alfiona,
+            ascaridiasis: ascaridiasis ?? self.ascaridiasis,
+            bungey: bungey ?? self.bungey,
+            catharticalness: catharticalness ?? self.catharticalness,
+            ceroxyle: ceroxyle ?? self.ceroxyle,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chorology: chorology ?? self.chorology,
+            disdiapason: disdiapason ?? self.disdiapason,
+            enmarble: enmarble ?? self.enmarble,
+            epeira: epeira ?? self.epeira,
+            eurylaimi: eurylaimi ?? self.eurylaimi,
+            germination: germination ?? self.germination,
+            hallelujah: hallelujah ?? self.hallelujah,
+            homocerc: homocerc ?? self.homocerc,
+            lev: lev ?? self.lev,
+            mouthing: mouthing ?? self.mouthing,
+            nonbookish: nonbookish ?? self.nonbookish,
+            philliloo: philliloo ?? self.philliloo,
+            planetal: planetal ?? self.planetal,
+            poney: poney ?? self.poney,
+            punctualist: punctualist ?? self.punctualist,
+            returnlessly: returnlessly ?? self.returnlessly,
+            skelder: skelder ?? self.skelder,
+            windwaywardly: windwaywardly ?? self.windwaywardly,
+            yuman: yuman ?? self.yuman
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Unbeginning: Codable {
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unbeginning.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unbeginning"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Undesirability: Codable {
+    case integerArray([Int])
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Undesirability.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Undesirability"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Unerasing: Codable {
+    case integer(Int)
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unerasing.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unerasing"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Unguentarium: Codable {
+    case integer(Int)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Unguentarium.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unguentarium"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum UnimpeachablyElement: Codable {
+    case bool(Bool)
+    case unimpeachablyClass(UnimpeachablyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(UnimpeachablyClass.self) {
+            self = .unimpeachablyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(UnimpeachablyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for UnimpeachablyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .unimpeachablyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - UnimpeachablyClass
+final class UnimpeachablyClass: Codable {
+    let acerin: Int?
+    let bobadil: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let chlorophylligenous: Int?
+    let conversational: Int?
+    let demiowl: Int?
+    let disdiapason: String?
+    let ectorhinal: Int?
+    let gamblesomeness: Int?
+    let homocerc: Bool?
+    let irrorate: Int?
+    let kindergartening: Int?
+    let lateritic: Int?
+    let mespil: Int?
+    let misconfiguration: Int?
+    let nonbookish: JSONNull?
+    let planometry: Int?
+    let quiina: Int?
+    let robert: Int?
+    let rot: Int?
+    let subcinctorium: Int?
+    let tussocker: Int?
+    let ultraproud: Int?
+    let unsuggestedness: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case acerin = "acerin"
+        case bobadil = "Bobadil"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case chlorophylligenous = "chlorophylligenous"
+        case conversational = "conversational"
+        case demiowl = "demiowl"
+        case disdiapason = "disdiapason"
+        case ectorhinal = "ectorhinal"
+        case gamblesomeness = "gamblesomeness"
+        case homocerc = "homocerc"
+        case irrorate = "irrorate"
+        case kindergartening = "kindergartening"
+        case lateritic = "lateritic"
+        case mespil = "mespil"
+        case misconfiguration = "misconfiguration"
+        case nonbookish = "nonbookish"
+        case planometry = "planometry"
+        case quiina = "Quiina"
+        case robert = "Robert"
+        case rot = "rot"
+        case subcinctorium = "subcinctorium"
+        case tussocker = "tussocker"
+        case ultraproud = "ultraproud"
+        case unsuggestedness = "unsuggestedness"
+    }
+
+    init(acerin: Int?, bobadil: Int?, catharticalness: Double?, chirotherium: Int?, chlorophylligenous: Int?, conversational: Int?, demiowl: Int?, disdiapason: String?, ectorhinal: Int?, gamblesomeness: Int?, homocerc: Bool?, irrorate: Int?, kindergartening: Int?, lateritic: Int?, mespil: Int?, misconfiguration: Int?, nonbookish: JSONNull?, planometry: Int?, quiina: Int?, robert: Int?, rot: Int?, subcinctorium: Int?, tussocker: Int?, ultraproud: Int?, unsuggestedness: Int?) {
+        self.acerin = acerin
+        self.bobadil = bobadil
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.chlorophylligenous = chlorophylligenous
+        self.conversational = conversational
+        self.demiowl = demiowl
+        self.disdiapason = disdiapason
+        self.ectorhinal = ectorhinal
+        self.gamblesomeness = gamblesomeness
+        self.homocerc = homocerc
+        self.irrorate = irrorate
+        self.kindergartening = kindergartening
+        self.lateritic = lateritic
+        self.mespil = mespil
+        self.misconfiguration = misconfiguration
+        self.nonbookish = nonbookish
+        self.planometry = planometry
+        self.quiina = quiina
+        self.robert = robert
+        self.rot = rot
+        self.subcinctorium = subcinctorium
+        self.tussocker = tussocker
+        self.ultraproud = ultraproud
+        self.unsuggestedness = unsuggestedness
+    }
+}
+
+// MARK: UnimpeachablyClass convenience initializers and mutators
+
+extension UnimpeachablyClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(UnimpeachablyClass.self, from: data)
+        self.init(acerin: me.acerin, bobadil: me.bobadil, catharticalness: me.catharticalness, chirotherium: me.chirotherium, chlorophylligenous: me.chlorophylligenous, conversational: me.conversational, demiowl: me.demiowl, disdiapason: me.disdiapason, ectorhinal: me.ectorhinal, gamblesomeness: me.gamblesomeness, homocerc: me.homocerc, irrorate: me.irrorate, kindergartening: me.kindergartening, lateritic: me.lateritic, mespil: me.mespil, misconfiguration: me.misconfiguration, nonbookish: me.nonbookish, planometry: me.planometry, quiina: me.quiina, robert: me.robert, rot: me.rot, subcinctorium: me.subcinctorium, tussocker: me.tussocker, ultraproud: me.ultraproud, unsuggestedness: me.unsuggestedness)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acerin: Int?? = nil,
+        bobadil: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        chlorophylligenous: Int?? = nil,
+        conversational: Int?? = nil,
+        demiowl: Int?? = nil,
+        disdiapason: String?? = nil,
+        ectorhinal: Int?? = nil,
+        gamblesomeness: Int?? = nil,
+        homocerc: Bool?? = nil,
+        irrorate: Int?? = nil,
+        kindergartening: Int?? = nil,
+        lateritic: Int?? = nil,
+        mespil: Int?? = nil,
+        misconfiguration: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        planometry: Int?? = nil,
+        quiina: Int?? = nil,
+        robert: Int?? = nil,
+        rot: Int?? = nil,
+        subcinctorium: Int?? = nil,
+        tussocker: Int?? = nil,
+        ultraproud: Int?? = nil,
+        unsuggestedness: Int?? = nil
+    ) -> UnimpeachablyClass {
+        return UnimpeachablyClass(
+            acerin: acerin ?? self.acerin,
+            bobadil: bobadil ?? self.bobadil,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chlorophylligenous: chlorophylligenous ?? self.chlorophylligenous,
+            conversational: conversational ?? self.conversational,
+            demiowl: demiowl ?? self.demiowl,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ectorhinal: ectorhinal ?? self.ectorhinal,
+            gamblesomeness: gamblesomeness ?? self.gamblesomeness,
+            homocerc: homocerc ?? self.homocerc,
+            irrorate: irrorate ?? self.irrorate,
+            kindergartening: kindergartening ?? self.kindergartening,
+            lateritic: lateritic ?? self.lateritic,
+            mespil: mespil ?? self.mespil,
+            misconfiguration: misconfiguration ?? self.misconfiguration,
+            nonbookish: nonbookish ?? self.nonbookish,
+            planometry: planometry ?? self.planometry,
+            quiina: quiina ?? self.quiina,
+            robert: robert ?? self.robert,
+            rot: rot ?? self.rot,
+            subcinctorium: subcinctorium ?? self.subcinctorium,
+            tussocker: tussocker ?? self.tussocker,
+            ultraproud: ultraproud ?? self.ultraproud,
+            unsuggestedness: unsuggestedness ?? self.unsuggestedness
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Unmortgaged: Codable {
+    case double(Double)
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Unmortgaged.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unmortgaged"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Unobstructed: Codable {
+    case integer(Int)
+    case quebrachineClass(QuebrachineClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Unobstructed.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unobstructed"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Unreceptivity: Codable {
+    case integer(Int)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unreceptivity.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unreceptivity"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Unsatisfactoriness: Codable {
+    case bool(Bool)
+    case integer(Int)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unsatisfactoriness.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unsatisfactoriness"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum UnstressedElement: Codable {
+    case bool(Bool)
+    case string(String)
+    case unstressedClass(UnstressedClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(UnstressedClass.self) {
+            self = .unstressedClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(UnstressedElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for UnstressedElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .unstressedClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - UnstressedClass
+final class UnstressedClass: Codable {
+    let alain: JSONNull?
+    let amphirhina: JSONNull?
+    let antimachinery: JSONNull?
+    let coldish: JSONNull?
+    let crantara: JSONNull?
+    let distinguishing: JSONNull?
+    let elytroposis: JSONNull?
+    let gentianwort: JSONNull?
+    let heliosis: JSONNull?
+    let instrumental: JSONNull?
+    let introinflection: JSONNull?
+    let kala: JSONNull?
+    let lincolnian: JSONNull?
+    let metad: JSONNull?
+    let sarcophilus: JSONNull?
+    let swingingly: JSONNull?
+    let unconformity: JSONNull?
+    let undecreed: JSONNull?
+    let venerable: JSONNull?
+    let vowellessness: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case alain = "Alain"
+        case amphirhina = "Amphirhina"
+        case antimachinery = "antimachinery"
+        case coldish = "coldish"
+        case crantara = "crantara"
+        case distinguishing = "distinguishing"
+        case elytroposis = "elytroposis"
+        case gentianwort = "gentianwort"
+        case heliosis = "heliosis"
+        case instrumental = "instrumental"
+        case introinflection = "introinflection"
+        case kala = "kala"
+        case lincolnian = "Lincolnian"
+        case metad = "metad"
+        case sarcophilus = "Sarcophilus"
+        case swingingly = "swingingly"
+        case unconformity = "unconformity"
+        case undecreed = "undecreed"
+        case venerable = "venerable"
+        case vowellessness = "vowellessness"
+    }
+
+    init(alain: JSONNull?, amphirhina: JSONNull?, antimachinery: JSONNull?, coldish: JSONNull?, crantara: JSONNull?, distinguishing: JSONNull?, elytroposis: JSONNull?, gentianwort: JSONNull?, heliosis: JSONNull?, instrumental: JSONNull?, introinflection: JSONNull?, kala: JSONNull?, lincolnian: JSONNull?, metad: JSONNull?, sarcophilus: JSONNull?, swingingly: JSONNull?, unconformity: JSONNull?, undecreed: JSONNull?, venerable: JSONNull?, vowellessness: JSONNull?) {
+        self.alain = alain
+        self.amphirhina = amphirhina
+        self.antimachinery = antimachinery
+        self.coldish = coldish
+        self.crantara = crantara
+        self.distinguishing = distinguishing
+        self.elytroposis = elytroposis
+        self.gentianwort = gentianwort
+        self.heliosis = heliosis
+        self.instrumental = instrumental
+        self.introinflection = introinflection
+        self.kala = kala
+        self.lincolnian = lincolnian
+        self.metad = metad
+        self.sarcophilus = sarcophilus
+        self.swingingly = swingingly
+        self.unconformity = unconformity
+        self.undecreed = undecreed
+        self.venerable = venerable
+        self.vowellessness = vowellessness
+    }
+}
+
+// MARK: UnstressedClass convenience initializers and mutators
+
+extension UnstressedClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(UnstressedClass.self, from: data)
+        self.init(alain: me.alain, amphirhina: me.amphirhina, antimachinery: me.antimachinery, coldish: me.coldish, crantara: me.crantara, distinguishing: me.distinguishing, elytroposis: me.elytroposis, gentianwort: me.gentianwort, heliosis: me.heliosis, instrumental: me.instrumental, introinflection: me.introinflection, kala: me.kala, lincolnian: me.lincolnian, metad: me.metad, sarcophilus: me.sarcophilus, swingingly: me.swingingly, unconformity: me.unconformity, undecreed: me.undecreed, venerable: me.venerable, vowellessness: me.vowellessness)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        alain: JSONNull?? = nil,
+        amphirhina: JSONNull?? = nil,
+        antimachinery: JSONNull?? = nil,
+        coldish: JSONNull?? = nil,
+        crantara: JSONNull?? = nil,
+        distinguishing: JSONNull?? = nil,
+        elytroposis: JSONNull?? = nil,
+        gentianwort: JSONNull?? = nil,
+        heliosis: JSONNull?? = nil,
+        instrumental: JSONNull?? = nil,
+        introinflection: JSONNull?? = nil,
+        kala: JSONNull?? = nil,
+        lincolnian: JSONNull?? = nil,
+        metad: JSONNull?? = nil,
+        sarcophilus: JSONNull?? = nil,
+        swingingly: JSONNull?? = nil,
+        unconformity: JSONNull?? = nil,
+        undecreed: JSONNull?? = nil,
+        venerable: JSONNull?? = nil,
+        vowellessness: JSONNull?? = nil
+    ) -> UnstressedClass {
+        return UnstressedClass(
+            alain: alain ?? self.alain,
+            amphirhina: amphirhina ?? self.amphirhina,
+            antimachinery: antimachinery ?? self.antimachinery,
+            coldish: coldish ?? self.coldish,
+            crantara: crantara ?? self.crantara,
+            distinguishing: distinguishing ?? self.distinguishing,
+            elytroposis: elytroposis ?? self.elytroposis,
+            gentianwort: gentianwort ?? self.gentianwort,
+            heliosis: heliosis ?? self.heliosis,
+            instrumental: instrumental ?? self.instrumental,
+            introinflection: introinflection ?? self.introinflection,
+            kala: kala ?? self.kala,
+            lincolnian: lincolnian ?? self.lincolnian,
+            metad: metad ?? self.metad,
+            sarcophilus: sarcophilus ?? self.sarcophilus,
+            swingingly: swingingly ?? self.swingingly,
+            unconformity: unconformity ?? self.unconformity,
+            undecreed: undecreed ?? self.undecreed,
+            venerable: venerable ?? self.venerable,
+            vowellessness: vowellessness ?? self.vowellessness
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Untasked: Codable {
+    case double(Double)
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Untasked.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Untasked"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Unvarying: Codable {
+    case bool(Bool)
+    case double(Double)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unvarying.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unvarying"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Vehemently: Codable {
+    case bool(Bool)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Vehemently.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Vehemently"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Whitepot: Codable {
+    case double(Double)
+    case quebrachineClass(QuebrachineClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Whitepot.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Whitepot"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum WrothyElement: Codable {
+    case nullArray([JSONNull?])
+    case wrothyClass(WrothyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(WrothyClass.self) {
+            self = .wrothyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(WrothyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for WrothyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .wrothyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - WrothyClass
+final class WrothyClass: Codable {
+    let aeschynanthus: JSONNull?
+    let aquiferous: JSONNull?
+    let cheapener: JSONNull?
+    let enumeration: JSONNull?
+    let ephesine: JSONNull?
+    let escadrille: JSONNull?
+    let estrous: JSONNull?
+    let interestedly: JSONNull?
+    let katakinetomer: JSONNull?
+    let mortification: JSONNull?
+    let morula: JSONNull?
+    let orthosymmetrical: JSONNull?
+    let overbark: JSONNull?
+    let politist: JSONNull?
+    let qualified: JSONNull?
+    let sphenomalar: JSONNull?
+    let throatful: JSONNull?
+    let transhumance: JSONNull?
+    let triandrian: JSONNull?
+    let unbooked: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case aeschynanthus = "Aeschynanthus"
+        case aquiferous = "aquiferous"
+        case cheapener = "cheapener"
+        case enumeration = "enumeration"
+        case ephesine = "Ephesine"
+        case escadrille = "escadrille"
+        case estrous = "estrous"
+        case interestedly = "interestedly"
+        case katakinetomer = "katakinetomer"
+        case mortification = "mortification"
+        case morula = "morula"
+        case orthosymmetrical = "orthosymmetrical"
+        case overbark = "overbark"
+        case politist = "politist"
+        case qualified = "qualified"
+        case sphenomalar = "sphenomalar"
+        case throatful = "throatful"
+        case transhumance = "transhumance"
+        case triandrian = "triandrian"
+        case unbooked = "unbooked"
+    }
+
+    init(aeschynanthus: JSONNull?, aquiferous: JSONNull?, cheapener: JSONNull?, enumeration: JSONNull?, ephesine: JSONNull?, escadrille: JSONNull?, estrous: JSONNull?, interestedly: JSONNull?, katakinetomer: JSONNull?, mortification: JSONNull?, morula: JSONNull?, orthosymmetrical: JSONNull?, overbark: JSONNull?, politist: JSONNull?, qualified: JSONNull?, sphenomalar: JSONNull?, throatful: JSONNull?, transhumance: JSONNull?, triandrian: JSONNull?, unbooked: JSONNull?) {
+        self.aeschynanthus = aeschynanthus
+        self.aquiferous = aquiferous
+        self.cheapener = cheapener
+        self.enumeration = enumeration
+        self.ephesine = ephesine
+        self.escadrille = escadrille
+        self.estrous = estrous
+        self.interestedly = interestedly
+        self.katakinetomer = katakinetomer
+        self.mortification = mortification
+        self.morula = morula
+        self.orthosymmetrical = orthosymmetrical
+        self.overbark = overbark
+        self.politist = politist
+        self.qualified = qualified
+        self.sphenomalar = sphenomalar
+        self.throatful = throatful
+        self.transhumance = transhumance
+        self.triandrian = triandrian
+        self.unbooked = unbooked
+    }
+}
+
+// MARK: WrothyClass convenience initializers and mutators
+
+extension WrothyClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(WrothyClass.self, from: data)
+        self.init(aeschynanthus: me.aeschynanthus, aquiferous: me.aquiferous, cheapener: me.cheapener, enumeration: me.enumeration, ephesine: me.ephesine, escadrille: me.escadrille, estrous: me.estrous, interestedly: me.interestedly, katakinetomer: me.katakinetomer, mortification: me.mortification, morula: me.morula, orthosymmetrical: me.orthosymmetrical, overbark: me.overbark, politist: me.politist, qualified: me.qualified, sphenomalar: me.sphenomalar, throatful: me.throatful, transhumance: me.transhumance, triandrian: me.triandrian, unbooked: me.unbooked)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        aeschynanthus: JSONNull?? = nil,
+        aquiferous: JSONNull?? = nil,
+        cheapener: JSONNull?? = nil,
+        enumeration: JSONNull?? = nil,
+        ephesine: JSONNull?? = nil,
+        escadrille: JSONNull?? = nil,
+        estrous: JSONNull?? = nil,
+        interestedly: JSONNull?? = nil,
+        katakinetomer: JSONNull?? = nil,
+        mortification: JSONNull?? = nil,
+        morula: JSONNull?? = nil,
+        orthosymmetrical: JSONNull?? = nil,
+        overbark: JSONNull?? = nil,
+        politist: JSONNull?? = nil,
+        qualified: JSONNull?? = nil,
+        sphenomalar: JSONNull?? = nil,
+        throatful: JSONNull?? = nil,
+        transhumance: JSONNull?? = nil,
+        triandrian: JSONNull?? = nil,
+        unbooked: JSONNull?? = nil
+    ) -> WrothyClass {
+        return WrothyClass(
+            aeschynanthus: aeschynanthus ?? self.aeschynanthus,
+            aquiferous: aquiferous ?? self.aquiferous,
+            cheapener: cheapener ?? self.cheapener,
+            enumeration: enumeration ?? self.enumeration,
+            ephesine: ephesine ?? self.ephesine,
+            escadrille: escadrille ?? self.escadrille,
+            estrous: estrous ?? self.estrous,
+            interestedly: interestedly ?? self.interestedly,
+            katakinetomer: katakinetomer ?? self.katakinetomer,
+            mortification: mortification ?? self.mortification,
+            morula: morula ?? self.morula,
+            orthosymmetrical: orthosymmetrical ?? self.orthosymmetrical,
+            overbark: overbark ?? self.overbark,
+            politist: politist ?? self.politist,
+            qualified: qualified ?? self.qualified,
+            sphenomalar: sphenomalar ?? self.sphenomalar,
+            throatful: throatful ?? self.throatful,
+            transhumance: transhumance ?? self.transhumance,
+            triandrian: triandrian ?? self.triandrian,
+            unbooked: unbooked ?? self.unbooked
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+final class JSONNull: Codable, Hashable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    public func hash(into hasher: inout Hasher) {
+        hasher.combine(0)
+    }
+
+    public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/head/swift/test/inputs/json/priority/combinations4.json/protocol-hashable--739b516c7897/quicktype.swift b/head/swift/test/inputs/json/priority/combinations4.json/protocol-hashable--739b516c7897/quicktype.swift
new file mode 100644
index 0000000..dac23fd
--- /dev/null
+++ b/head/swift/test/inputs/json/priority/combinations4.json/protocol-hashable--739b516c7897/quicktype.swift
@@ -0,0 +1,3743 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+import Foundation
+
+// MARK: - TopLevel
+struct TopLevel: Codable, Hashable {
+    let protrusive: [Protrusive]
+    let pulpitism: [PulpitismElement]
+    let pyodermia: [PyodermiaElement]
+    let quebrachine: [QuebrachineElement]
+    let querier: [Querier]
+    let rebarbative: [Rebarbative]
+    let reimagine: [Reimagine]
+    let ressaut: Ressaut
+    let retrocervical: [Retrocervical]
+    let revert: [Revert]
+    let rewrite: [RewriteElement]
+    let saccoderm: [Saccoderm]
+    let santir: [SantirElement]
+    let saprophilous: [Saprophilous]
+    let saxten: [SaxtenElement]
+    let scatty: [Scatty?]
+    let scoffer: [Scoffer]
+    let scrampum: [Scrampum]
+    let semantic: Double
+    let serpentinic: [Serpentinic]
+    let shadowable: [Shadowable]
+    let sistering: [SisteringElement]
+    let staghunting: [Staghunting]
+    let stagmometer: [Stagmometer]
+    let stimulability: [Stimulability]
+    let strangleable: [Strangleable]
+    let strenuosity: [StrenuosityElement]
+    let tabaxir: [Tabaxir]
+    let talpiform: [Talpiform]
+    let thwack: [Thwack]
+    let to: [Double?]
+    let tortricine: [Tortricine]
+    let truantcy: [TruantcyElement]
+    let turgesce: [String]
+    let unbeginning: [Unbeginning]
+    let underdunged: [Double]
+    let undesirability: [Undesirability]
+    let unerasing: [Unerasing]
+    let unguentarium: [Unguentarium]
+    let unimpeachably: [UnimpeachablyElement]
+    let unmortgaged: [Unmortgaged]
+    let unobstructed: [Unobstructed]
+    let unreceptivity: [Unreceptivity]
+    let unsatisfactoriness: [Unsatisfactoriness]
+    let unsecurity: [Int]
+    let unstressed: [UnstressedElement]
+    let untasked: [Untasked]
+    let unvarying: [Unvarying]
+    let vehemently: [Vehemently]
+    let warriorship: [String: Bool]
+    let whitepot: [Whitepot]
+    let wrothy: [WrothyElement]
+
+    enum CodingKeys: String, CodingKey {
+        case protrusive = "protrusive"
+        case pulpitism = "pulpitism"
+        case pyodermia = "pyodermia"
+        case quebrachine = "quebrachine"
+        case querier = "querier"
+        case rebarbative = "rebarbative"
+        case reimagine = "reimagine"
+        case ressaut = "ressaut"
+        case retrocervical = "retrocervical"
+        case revert = "revert"
+        case rewrite = "rewrite"
+        case saccoderm = "saccoderm"
+        case santir = "santir"
+        case saprophilous = "saprophilous"
+        case saxten = "saxten"
+        case scatty = "scatty"
+        case scoffer = "scoffer"
+        case scrampum = "scrampum"
+        case semantic = "semantic"
+        case serpentinic = "serpentinic"
+        case shadowable = "shadowable"
+        case sistering = "sistering"
+        case staghunting = "staghunting"
+        case stagmometer = "stagmometer"
+        case stimulability = "stimulability"
+        case strangleable = "strangleable"
+        case strenuosity = "strenuosity"
+        case tabaxir = "tabaxir"
+        case talpiform = "talpiform"
+        case thwack = "thwack"
+        case to = "to"
+        case tortricine = "tortricine"
+        case truantcy = "truantcy"
+        case turgesce = "turgesce"
+        case unbeginning = "unbeginning"
+        case underdunged = "underdunged"
+        case undesirability = "undesirability"
+        case unerasing = "unerasing"
+        case unguentarium = "unguentarium"
+        case unimpeachably = "unimpeachably"
+        case unmortgaged = "unmortgaged"
+        case unobstructed = "unobstructed"
+        case unreceptivity = "unreceptivity"
+        case unsatisfactoriness = "unsatisfactoriness"
+        case unsecurity = "unsecurity"
+        case unstressed = "unstressed"
+        case untasked = "untasked"
+        case unvarying = "unvarying"
+        case vehemently = "vehemently"
+        case warriorship = "warriorship"
+        case whitepot = "whitepot"
+        case wrothy = "wrothy"
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(TopLevel.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        protrusive: [Protrusive]? = nil,
+        pulpitism: [PulpitismElement]? = nil,
+        pyodermia: [PyodermiaElement]? = nil,
+        quebrachine: [QuebrachineElement]? = nil,
+        querier: [Querier]? = nil,
+        rebarbative: [Rebarbative]? = nil,
+        reimagine: [Reimagine]? = nil,
+        ressaut: Ressaut? = nil,
+        retrocervical: [Retrocervical]? = nil,
+        revert: [Revert]? = nil,
+        rewrite: [RewriteElement]? = nil,
+        saccoderm: [Saccoderm]? = nil,
+        santir: [SantirElement]? = nil,
+        saprophilous: [Saprophilous]? = nil,
+        saxten: [SaxtenElement]? = nil,
+        scatty: [Scatty?]? = nil,
+        scoffer: [Scoffer]? = nil,
+        scrampum: [Scrampum]? = nil,
+        semantic: Double? = nil,
+        serpentinic: [Serpentinic]? = nil,
+        shadowable: [Shadowable]? = nil,
+        sistering: [SisteringElement]? = nil,
+        staghunting: [Staghunting]? = nil,
+        stagmometer: [Stagmometer]? = nil,
+        stimulability: [Stimulability]? = nil,
+        strangleable: [Strangleable]? = nil,
+        strenuosity: [StrenuosityElement]? = nil,
+        tabaxir: [Tabaxir]? = nil,
+        talpiform: [Talpiform]? = nil,
+        thwack: [Thwack]? = nil,
+        to: [Double?]? = nil,
+        tortricine: [Tortricine]? = nil,
+        truantcy: [TruantcyElement]? = nil,
+        turgesce: [String]? = nil,
+        unbeginning: [Unbeginning]? = nil,
+        underdunged: [Double]? = nil,
+        undesirability: [Undesirability]? = nil,
+        unerasing: [Unerasing]? = nil,
+        unguentarium: [Unguentarium]? = nil,
+        unimpeachably: [UnimpeachablyElement]? = nil,
+        unmortgaged: [Unmortgaged]? = nil,
+        unobstructed: [Unobstructed]? = nil,
+        unreceptivity: [Unreceptivity]? = nil,
+        unsatisfactoriness: [Unsatisfactoriness]? = nil,
+        unsecurity: [Int]? = nil,
+        unstressed: [UnstressedElement]? = nil,
+        untasked: [Untasked]? = nil,
+        unvarying: [Unvarying]? = nil,
+        vehemently: [Vehemently]? = nil,
+        warriorship: [String: Bool]? = nil,
+        whitepot: [Whitepot]? = nil,
+        wrothy: [WrothyElement]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            protrusive: protrusive ?? self.protrusive,
+            pulpitism: pulpitism ?? self.pulpitism,
+            pyodermia: pyodermia ?? self.pyodermia,
+            quebrachine: quebrachine ?? self.quebrachine,
+            querier: querier ?? self.querier,
+            rebarbative: rebarbative ?? self.rebarbative,
+            reimagine: reimagine ?? self.reimagine,
+            ressaut: ressaut ?? self.ressaut,
+            retrocervical: retrocervical ?? self.retrocervical,
+            revert: revert ?? self.revert,
+            rewrite: rewrite ?? self.rewrite,
+            saccoderm: saccoderm ?? self.saccoderm,
+            santir: santir ?? self.santir,
+            saprophilous: saprophilous ?? self.saprophilous,
+            saxten: saxten ?? self.saxten,
+            scatty: scatty ?? self.scatty,
+            scoffer: scoffer ?? self.scoffer,
+            scrampum: scrampum ?? self.scrampum,
+            semantic: semantic ?? self.semantic,
+            serpentinic: serpentinic ?? self.serpentinic,
+            shadowable: shadowable ?? self.shadowable,
+            sistering: sistering ?? self.sistering,
+            staghunting: staghunting ?? self.staghunting,
+            stagmometer: stagmometer ?? self.stagmometer,
+            stimulability: stimulability ?? self.stimulability,
+            strangleable: strangleable ?? self.strangleable,
+            strenuosity: strenuosity ?? self.strenuosity,
+            tabaxir: tabaxir ?? self.tabaxir,
+            talpiform: talpiform ?? self.talpiform,
+            thwack: thwack ?? self.thwack,
+            to: to ?? self.to,
+            tortricine: tortricine ?? self.tortricine,
+            truantcy: truantcy ?? self.truantcy,
+            turgesce: turgesce ?? self.turgesce,
+            unbeginning: unbeginning ?? self.unbeginning,
+            underdunged: underdunged ?? self.underdunged,
+            undesirability: undesirability ?? self.undesirability,
+            unerasing: unerasing ?? self.unerasing,
+            unguentarium: unguentarium ?? self.unguentarium,
+            unimpeachably: unimpeachably ?? self.unimpeachably,
+            unmortgaged: unmortgaged ?? self.unmortgaged,
+            unobstructed: unobstructed ?? self.unobstructed,
+            unreceptivity: unreceptivity ?? self.unreceptivity,
+            unsatisfactoriness: unsatisfactoriness ?? self.unsatisfactoriness,
+            unsecurity: unsecurity ?? self.unsecurity,
+            unstressed: unstressed ?? self.unstressed,
+            untasked: untasked ?? self.untasked,
+            unvarying: unvarying ?? self.unvarying,
+            vehemently: vehemently ?? self.vehemently,
+            warriorship: warriorship ?? self.warriorship,
+            whitepot: whitepot ?? self.whitepot,
+            wrothy: wrothy ?? self.wrothy
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Protrusive: Codable, Hashable {
+    case double(Double)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Protrusive.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Protrusive"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum PulpitismElement: Codable, Hashable {
+    case double(Double)
+    case integerArray([Int])
+    case pulpitismClass(PulpitismClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(PulpitismClass.self) {
+            self = .pulpitismClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(PulpitismElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PulpitismElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .pulpitismClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - PulpitismClass
+struct PulpitismClass: Codable, Hashable {
+    let abnet: JSONNull?
+    let buckhorn: JSONNull?
+    let calciform: JSONNull?
+    let chelophore: JSONNull?
+    let cogitation: JSONNull?
+    let decreeable: JSONNull?
+    let despicable: JSONNull?
+    let isodiazo: JSONNull?
+    let jadedly: JSONNull?
+    let leptochlorite: JSONNull?
+    let nursling: JSONNull?
+    let palamedean: JSONNull?
+    let photoheliograph: JSONNull?
+    let pipewood: JSONNull?
+    let roberd: JSONNull?
+    let statable: JSONNull?
+    let superassume: JSONNull?
+    let syllabe: JSONNull?
+    let toughhead: JSONNull?
+    let underburn: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case abnet = "abnet"
+        case buckhorn = "buckhorn"
+        case calciform = "calciform"
+        case chelophore = "chelophore"
+        case cogitation = "cogitation"
+        case decreeable = "decreeable"
+        case despicable = "despicable"
+        case isodiazo = "isodiazo"
+        case jadedly = "jadedly"
+        case leptochlorite = "leptochlorite"
+        case nursling = "nursling"
+        case palamedean = "palamedean"
+        case photoheliograph = "photoheliograph"
+        case pipewood = "pipewood"
+        case roberd = "roberd"
+        case statable = "statable"
+        case superassume = "superassume"
+        case syllabe = "syllabe"
+        case toughhead = "toughhead"
+        case underburn = "underburn"
+    }
+}
+
+// MARK: PulpitismClass convenience initializers and mutators
+
+extension PulpitismClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(PulpitismClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        abnet: JSONNull?? = nil,
+        buckhorn: JSONNull?? = nil,
+        calciform: JSONNull?? = nil,
+        chelophore: JSONNull?? = nil,
+        cogitation: JSONNull?? = nil,
+        decreeable: JSONNull?? = nil,
+        despicable: JSONNull?? = nil,
+        isodiazo: JSONNull?? = nil,
+        jadedly: JSONNull?? = nil,
+        leptochlorite: JSONNull?? = nil,
+        nursling: JSONNull?? = nil,
+        palamedean: JSONNull?? = nil,
+        photoheliograph: JSONNull?? = nil,
+        pipewood: JSONNull?? = nil,
+        roberd: JSONNull?? = nil,
+        statable: JSONNull?? = nil,
+        superassume: JSONNull?? = nil,
+        syllabe: JSONNull?? = nil,
+        toughhead: JSONNull?? = nil,
+        underburn: JSONNull?? = nil
+    ) -> PulpitismClass {
+        return PulpitismClass(
+            abnet: abnet ?? self.abnet,
+            buckhorn: buckhorn ?? self.buckhorn,
+            calciform: calciform ?? self.calciform,
+            chelophore: chelophore ?? self.chelophore,
+            cogitation: cogitation ?? self.cogitation,
+            decreeable: decreeable ?? self.decreeable,
+            despicable: despicable ?? self.despicable,
+            isodiazo: isodiazo ?? self.isodiazo,
+            jadedly: jadedly ?? self.jadedly,
+            leptochlorite: leptochlorite ?? self.leptochlorite,
+            nursling: nursling ?? self.nursling,
+            palamedean: palamedean ?? self.palamedean,
+            photoheliograph: photoheliograph ?? self.photoheliograph,
+            pipewood: pipewood ?? self.pipewood,
+            roberd: roberd ?? self.roberd,
+            statable: statable ?? self.statable,
+            superassume: superassume ?? self.superassume,
+            syllabe: syllabe ?? self.syllabe,
+            toughhead: toughhead ?? self.toughhead,
+            underburn: underburn ?? self.underburn
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum PyodermiaElement: Codable, Hashable {
+    case integer(Int)
+    case pyodermiaClass(PyodermiaClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(PyodermiaClass.self) {
+            self = .pyodermiaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(PyodermiaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PyodermiaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .pyodermiaClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - PyodermiaClass
+struct PyodermiaClass: Codable, Hashable {
+    let aphoristically: JSONNull?
+    let apophyllous: JSONNull?
+    let cognize: JSONNull?
+    let dermonosology: JSONNull?
+    let gyppo: JSONNull?
+    let ither: JSONNull?
+    let juglandaceous: JSONNull?
+    let litho: JSONNull?
+    let macropterous: JSONNull?
+    let photographer: JSONNull?
+    let romancing: JSONNull?
+    let rumness: JSONNull?
+    let somniloquist: JSONNull?
+    let stressfully: JSONNull?
+    let tactically: JSONNull?
+    let tracheophony: JSONNull?
+    let unappositely: JSONNull?
+    let unclothedly: JSONNull?
+    let unimplied: JSONNull?
+    let unsyncopated: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case aphoristically = "aphoristically"
+        case apophyllous = "apophyllous"
+        case cognize = "cognize"
+        case dermonosology = "dermonosology"
+        case gyppo = "Gyppo"
+        case ither = "ither"
+        case juglandaceous = "juglandaceous"
+        case litho = "litho"
+        case macropterous = "macropterous"
+        case photographer = "photographer"
+        case romancing = "romancing"
+        case rumness = "rumness"
+        case somniloquist = "somniloquist"
+        case stressfully = "stressfully"
+        case tactically = "tactically"
+        case tracheophony = "tracheophony"
+        case unappositely = "unappositely"
+        case unclothedly = "unclothedly"
+        case unimplied = "unimplied"
+        case unsyncopated = "unsyncopated"
+    }
+}
+
+// MARK: PyodermiaClass convenience initializers and mutators
+
+extension PyodermiaClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(PyodermiaClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        aphoristically: JSONNull?? = nil,
+        apophyllous: JSONNull?? = nil,
+        cognize: JSONNull?? = nil,
+        dermonosology: JSONNull?? = nil,
+        gyppo: JSONNull?? = nil,
+        ither: JSONNull?? = nil,
+        juglandaceous: JSONNull?? = nil,
+        litho: JSONNull?? = nil,
+        macropterous: JSONNull?? = nil,
+        photographer: JSONNull?? = nil,
+        romancing: JSONNull?? = nil,
+        rumness: JSONNull?? = nil,
+        somniloquist: JSONNull?? = nil,
+        stressfully: JSONNull?? = nil,
+        tactically: JSONNull?? = nil,
+        tracheophony: JSONNull?? = nil,
+        unappositely: JSONNull?? = nil,
+        unclothedly: JSONNull?? = nil,
+        unimplied: JSONNull?? = nil,
+        unsyncopated: JSONNull?? = nil
+    ) -> PyodermiaClass {
+        return PyodermiaClass(
+            aphoristically: aphoristically ?? self.aphoristically,
+            apophyllous: apophyllous ?? self.apophyllous,
+            cognize: cognize ?? self.cognize,
+            dermonosology: dermonosology ?? self.dermonosology,
+            gyppo: gyppo ?? self.gyppo,
+            ither: ither ?? self.ither,
+            juglandaceous: juglandaceous ?? self.juglandaceous,
+            litho: litho ?? self.litho,
+            macropterous: macropterous ?? self.macropterous,
+            photographer: photographer ?? self.photographer,
+            romancing: romancing ?? self.romancing,
+            rumness: rumness ?? self.rumness,
+            somniloquist: somniloquist ?? self.somniloquist,
+            stressfully: stressfully ?? self.stressfully,
+            tactically: tactically ?? self.tactically,
+            tracheophony: tracheophony ?? self.tracheophony,
+            unappositely: unappositely ?? self.unappositely,
+            unclothedly: unclothedly ?? self.unclothedly,
+            unimplied: unimplied ?? self.unimplied,
+            unsyncopated: unsyncopated ?? self.unsyncopated
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum QuebrachineElement: Codable, Hashable {
+    case bool(Bool)
+    case quebrachineClass(QuebrachineClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(QuebrachineElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for QuebrachineElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - QuebrachineClass
+struct QuebrachineClass: Codable, Hashable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+}
+
+// MARK: QuebrachineClass convenience initializers and mutators
+
+extension QuebrachineClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(QuebrachineClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> QuebrachineClass {
+        return QuebrachineClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Querier: Codable, Hashable {
+    case bool(Bool)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Querier.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Querier"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Rebarbative: Codable, Hashable {
+    case bool(Bool)
+    case double(Double)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Rebarbative.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Rebarbative"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Reimagine
+struct Reimagine: Codable, Hashable {
+    let adducible: JSONNull?
+    let anabolin: JSONNull?
+    let brainy: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let chrysamine: JSONNull?
+    let disdiapason: String?
+    let fluxweed: JSONNull?
+    let glaucine: JSONNull?
+    let grobianism: JSONNull?
+    let hermo: JSONNull?
+    let hieroglyphist: JSONNull?
+    let homocerc: Bool?
+    let icteroid: JSONNull?
+    let immortal: JSONNull?
+    let impetulant: JSONNull?
+    let irrigate: JSONNull?
+    let myxedema: JSONNull?
+    let nonbookish: JSONNull?
+    let onyx: JSONNull?
+    let repasser: JSONNull?
+    let septomarginal: JSONNull?
+    let subdie: JSONNull?
+    let tibiometatarsal: JSONNull?
+    let waltzlike: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case adducible = "adducible"
+        case anabolin = "anabolin"
+        case brainy = "brainy"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case chrysamine = "chrysamine"
+        case disdiapason = "disdiapason"
+        case fluxweed = "fluxweed"
+        case glaucine = "glaucine"
+        case grobianism = "grobianism"
+        case hermo = "Hermo"
+        case hieroglyphist = "hieroglyphist"
+        case homocerc = "homocerc"
+        case icteroid = "icteroid"
+        case immortal = "immortal"
+        case impetulant = "impetulant"
+        case irrigate = "irrigate"
+        case myxedema = "myxedema"
+        case nonbookish = "nonbookish"
+        case onyx = "onyx"
+        case repasser = "repasser"
+        case septomarginal = "septomarginal"
+        case subdie = "subdie"
+        case tibiometatarsal = "tibiometatarsal"
+        case waltzlike = "waltzlike"
+    }
+}
+
+// MARK: Reimagine convenience initializers and mutators
+
+extension Reimagine {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Reimagine.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        adducible: JSONNull?? = nil,
+        anabolin: JSONNull?? = nil,
+        brainy: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        chrysamine: JSONNull?? = nil,
+        disdiapason: String?? = nil,
+        fluxweed: JSONNull?? = nil,
+        glaucine: JSONNull?? = nil,
+        grobianism: JSONNull?? = nil,
+        hermo: JSONNull?? = nil,
+        hieroglyphist: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        icteroid: JSONNull?? = nil,
+        immortal: JSONNull?? = nil,
+        impetulant: JSONNull?? = nil,
+        irrigate: JSONNull?? = nil,
+        myxedema: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        onyx: JSONNull?? = nil,
+        repasser: JSONNull?? = nil,
+        septomarginal: JSONNull?? = nil,
+        subdie: JSONNull?? = nil,
+        tibiometatarsal: JSONNull?? = nil,
+        waltzlike: JSONNull?? = nil
+    ) -> Reimagine {
+        return Reimagine(
+            adducible: adducible ?? self.adducible,
+            anabolin: anabolin ?? self.anabolin,
+            brainy: brainy ?? self.brainy,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chrysamine: chrysamine ?? self.chrysamine,
+            disdiapason: disdiapason ?? self.disdiapason,
+            fluxweed: fluxweed ?? self.fluxweed,
+            glaucine: glaucine ?? self.glaucine,
+            grobianism: grobianism ?? self.grobianism,
+            hermo: hermo ?? self.hermo,
+            hieroglyphist: hieroglyphist ?? self.hieroglyphist,
+            homocerc: homocerc ?? self.homocerc,
+            icteroid: icteroid ?? self.icteroid,
+            immortal: immortal ?? self.immortal,
+            impetulant: impetulant ?? self.impetulant,
+            irrigate: irrigate ?? self.irrigate,
+            myxedema: myxedema ?? self.myxedema,
+            nonbookish: nonbookish ?? self.nonbookish,
+            onyx: onyx ?? self.onyx,
+            repasser: repasser ?? self.repasser,
+            septomarginal: septomarginal ?? self.septomarginal,
+            subdie: subdie ?? self.subdie,
+            tibiometatarsal: tibiometatarsal ?? self.tibiometatarsal,
+            waltzlike: waltzlike ?? self.waltzlike
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Ressaut
+struct Ressaut: Codable, Hashable {
+    let apperceptive: String
+    let cuttoo: String
+    let douser: String
+    let drinkproof: String
+    let forementioned: String
+    let freesia: String
+    let genevieve: String
+    let hyperdiabolical: String
+    let hypocone: String
+    let irreverentially: String
+    let jumart: String
+    let mimosaceae: String
+    let mollicrush: String
+    let nedder: String
+    let retinasphalt: String
+    let sough: String
+    let steading: String
+    let theopaschitism: String
+    let undurableness: String
+    let unmingleable: String
+
+    enum CodingKeys: String, CodingKey {
+        case apperceptive = "apperceptive"
+        case cuttoo = "cuttoo"
+        case douser = "douser"
+        case drinkproof = "drinkproof"
+        case forementioned = "forementioned"
+        case freesia = "Freesia"
+        case genevieve = "Genevieve"
+        case hyperdiabolical = "hyperdiabolical"
+        case hypocone = "hypocone"
+        case irreverentially = "irreverentially"
+        case jumart = "jumart"
+        case mimosaceae = "Mimosaceae"
+        case mollicrush = "mollicrush"
+        case nedder = "nedder"
+        case retinasphalt = "retinasphalt"
+        case sough = "sough"
+        case steading = "steading"
+        case theopaschitism = "Theopaschitism"
+        case undurableness = "undurableness"
+        case unmingleable = "unmingleable"
+    }
+}
+
+// MARK: Ressaut convenience initializers and mutators
+
+extension Ressaut {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Ressaut.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apperceptive: String? = nil,
+        cuttoo: String? = nil,
+        douser: String? = nil,
+        drinkproof: String? = nil,
+        forementioned: String? = nil,
+        freesia: String? = nil,
+        genevieve: String? = nil,
+        hyperdiabolical: String? = nil,
+        hypocone: String? = nil,
+        irreverentially: String? = nil,
+        jumart: String? = nil,
+        mimosaceae: String? = nil,
+        mollicrush: String? = nil,
+        nedder: String? = nil,
+        retinasphalt: String? = nil,
+        sough: String? = nil,
+        steading: String? = nil,
+        theopaschitism: String? = nil,
+        undurableness: String? = nil,
+        unmingleable: String? = nil
+    ) -> Ressaut {
+        return Ressaut(
+            apperceptive: apperceptive ?? self.apperceptive,
+            cuttoo: cuttoo ?? self.cuttoo,
+            douser: douser ?? self.douser,
+            drinkproof: drinkproof ?? self.drinkproof,
+            forementioned: forementioned ?? self.forementioned,
+            freesia: freesia ?? self.freesia,
+            genevieve: genevieve ?? self.genevieve,
+            hyperdiabolical: hyperdiabolical ?? self.hyperdiabolical,
+            hypocone: hypocone ?? self.hypocone,
+            irreverentially: irreverentially ?? self.irreverentially,
+            jumart: jumart ?? self.jumart,
+            mimosaceae: mimosaceae ?? self.mimosaceae,
+            mollicrush: mollicrush ?? self.mollicrush,
+            nedder: nedder ?? self.nedder,
+            retinasphalt: retinasphalt ?? self.retinasphalt,
+            sough: sough ?? self.sough,
+            steading: steading ?? self.steading,
+            theopaschitism: theopaschitism ?? self.theopaschitism,
+            undurableness: undurableness ?? self.undurableness,
+            unmingleable: unmingleable ?? self.unmingleable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Retrocervical: Codable, Hashable {
+    case integer(Int)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Retrocervical.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Retrocervical"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Revert: Codable, Hashable {
+    case bool(Bool)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Revert.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Revert"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum RewriteElement: Codable, Hashable {
+    case double(Double)
+    case nullArray([JSONNull?])
+    case rewriteClass(RewriteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(RewriteClass.self) {
+            self = .rewriteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(RewriteElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for RewriteElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .rewriteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - RewriteClass
+struct RewriteClass: Codable, Hashable {
+    let accountancy: JSONNull?
+    let cacotrophic: JSONNull?
+    let contest: JSONNull?
+    let couthily: JSONNull?
+    let falculate: JSONNull?
+    let foreseize: JSONNull?
+    let hyades: JSONNull?
+    let lemnad: JSONNull?
+    let monotheistically: JSONNull?
+    let nonflying: JSONNull?
+    let ptenoglossa: JSONNull?
+    let repatch: JSONNull?
+    let rodman: JSONNull?
+    let strung: JSONNull?
+    let titmal: JSONNull?
+    let twalpennyworth: JSONNull?
+    let unblamable: JSONNull?
+    let vertical: JSONNull?
+    let whiggification: JSONNull?
+    let yardman: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case accountancy = "accountancy"
+        case cacotrophic = "cacotrophic"
+        case contest = "contest"
+        case couthily = "couthily"
+        case falculate = "falculate"
+        case foreseize = "foreseize"
+        case hyades = "Hyades"
+        case lemnad = "lemnad"
+        case monotheistically = "monotheistically"
+        case nonflying = "nonflying"
+        case ptenoglossa = "Ptenoglossa"
+        case repatch = "repatch"
+        case rodman = "rodman"
+        case strung = "strung"
+        case titmal = "titmal"
+        case twalpennyworth = "twalpennyworth"
+        case unblamable = "unblamable"
+        case vertical = "vertical"
+        case whiggification = "Whiggification"
+        case yardman = "yardman"
+    }
+}
+
+// MARK: RewriteClass convenience initializers and mutators
+
+extension RewriteClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(RewriteClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        accountancy: JSONNull?? = nil,
+        cacotrophic: JSONNull?? = nil,
+        contest: JSONNull?? = nil,
+        couthily: JSONNull?? = nil,
+        falculate: JSONNull?? = nil,
+        foreseize: JSONNull?? = nil,
+        hyades: JSONNull?? = nil,
+        lemnad: JSONNull?? = nil,
+        monotheistically: JSONNull?? = nil,
+        nonflying: JSONNull?? = nil,
+        ptenoglossa: JSONNull?? = nil,
+        repatch: JSONNull?? = nil,
+        rodman: JSONNull?? = nil,
+        strung: JSONNull?? = nil,
+        titmal: JSONNull?? = nil,
+        twalpennyworth: JSONNull?? = nil,
+        unblamable: JSONNull?? = nil,
+        vertical: JSONNull?? = nil,
+        whiggification: JSONNull?? = nil,
+        yardman: JSONNull?? = nil
+    ) -> RewriteClass {
+        return RewriteClass(
+            accountancy: accountancy ?? self.accountancy,
+            cacotrophic: cacotrophic ?? self.cacotrophic,
+            contest: contest ?? self.contest,
+            couthily: couthily ?? self.couthily,
+            falculate: falculate ?? self.falculate,
+            foreseize: foreseize ?? self.foreseize,
+            hyades: hyades ?? self.hyades,
+            lemnad: lemnad ?? self.lemnad,
+            monotheistically: monotheistically ?? self.monotheistically,
+            nonflying: nonflying ?? self.nonflying,
+            ptenoglossa: ptenoglossa ?? self.ptenoglossa,
+            repatch: repatch ?? self.repatch,
+            rodman: rodman ?? self.rodman,
+            strung: strung ?? self.strung,
+            titmal: titmal ?? self.titmal,
+            twalpennyworth: twalpennyworth ?? self.twalpennyworth,
+            unblamable: unblamable ?? self.unblamable,
+            vertical: vertical ?? self.vertical,
+            whiggification: whiggification ?? self.whiggification,
+            yardman: yardman ?? self.yardman
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Saccoderm: Codable, Hashable {
+    case integerArray([Int])
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Saccoderm.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Saccoderm"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum SantirElement: Codable, Hashable {
+    case double(Double)
+    case santirClass(SantirClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(SantirClass.self) {
+            self = .santirClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(SantirElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for SantirElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .santirClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - SantirClass
+struct SantirClass: Codable, Hashable {
+    let admiredly: JSONNull?
+    let demicaponier: JSONNull?
+    let epitympanic: JSONNull?
+    let investitor: JSONNull?
+    let lupiform: JSONNull?
+    let monoflagellate: JSONNull?
+    let paleoethnic: JSONNull?
+    let prediscountable: JSONNull?
+    let rhetoricals: JSONNull?
+    let roomth: JSONNull?
+    let saccharose: JSONNull?
+    let septonasal: JSONNull?
+    let serpenticide: JSONNull?
+    let setarious: JSONNull?
+    let spaework: JSONNull?
+    let stylite: JSONNull?
+    let suessiones: JSONNull?
+    let timelily: JSONNull?
+    let unprofaned: JSONNull?
+    let vorticular: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case admiredly = "admiredly"
+        case demicaponier = "demicaponier"
+        case epitympanic = "epitympanic"
+        case investitor = "investitor"
+        case lupiform = "lupiform"
+        case monoflagellate = "monoflagellate"
+        case paleoethnic = "paleoethnic"
+        case prediscountable = "prediscountable"
+        case rhetoricals = "rhetoricals"
+        case roomth = "roomth"
+        case saccharose = "saccharose"
+        case septonasal = "septonasal"
+        case serpenticide = "serpenticide"
+        case setarious = "setarious"
+        case spaework = "spaework"
+        case stylite = "stylite"
+        case suessiones = "Suessiones"
+        case timelily = "timelily"
+        case unprofaned = "unprofaned"
+        case vorticular = "vorticular"
+    }
+}
+
+// MARK: SantirClass convenience initializers and mutators
+
+extension SantirClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(SantirClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        admiredly: JSONNull?? = nil,
+        demicaponier: JSONNull?? = nil,
+        epitympanic: JSONNull?? = nil,
+        investitor: JSONNull?? = nil,
+        lupiform: JSONNull?? = nil,
+        monoflagellate: JSONNull?? = nil,
+        paleoethnic: JSONNull?? = nil,
+        prediscountable: JSONNull?? = nil,
+        rhetoricals: JSONNull?? = nil,
+        roomth: JSONNull?? = nil,
+        saccharose: JSONNull?? = nil,
+        septonasal: JSONNull?? = nil,
+        serpenticide: JSONNull?? = nil,
+        setarious: JSONNull?? = nil,
+        spaework: JSONNull?? = nil,
+        stylite: JSONNull?? = nil,
+        suessiones: JSONNull?? = nil,
+        timelily: JSONNull?? = nil,
+        unprofaned: JSONNull?? = nil,
+        vorticular: JSONNull?? = nil
+    ) -> SantirClass {
+        return SantirClass(
+            admiredly: admiredly ?? self.admiredly,
+            demicaponier: demicaponier ?? self.demicaponier,
+            epitympanic: epitympanic ?? self.epitympanic,
+            investitor: investitor ?? self.investitor,
+            lupiform: lupiform ?? self.lupiform,
+            monoflagellate: monoflagellate ?? self.monoflagellate,
+            paleoethnic: paleoethnic ?? self.paleoethnic,
+            prediscountable: prediscountable ?? self.prediscountable,
+            rhetoricals: rhetoricals ?? self.rhetoricals,
+            roomth: roomth ?? self.roomth,
+            saccharose: saccharose ?? self.saccharose,
+            septonasal: septonasal ?? self.septonasal,
+            serpenticide: serpenticide ?? self.serpenticide,
+            setarious: setarious ?? self.setarious,
+            spaework: spaework ?? self.spaework,
+            stylite: stylite ?? self.stylite,
+            suessiones: suessiones ?? self.suessiones,
+            timelily: timelily ?? self.timelily,
+            unprofaned: unprofaned ?? self.unprofaned,
+            vorticular: vorticular ?? self.vorticular
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Saprophilous: Codable, Hashable {
+    case integerMap([String: Int])
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Saprophilous.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Saprophilous"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum SaxtenElement: Codable, Hashable {
+    case saxtenClass(SaxtenClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(SaxtenClass.self) {
+            self = .saxtenClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(SaxtenElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for SaxtenElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .saxtenClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - SaxtenClass
+struct SaxtenClass: Codable, Hashable {
+    let algarrobilla: JSONNull?
+    let bowgrace: JSONNull?
+    let catharticalness: Double?
+    let centaurid: JSONNull?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let flix: JSONNull?
+    let germanely: JSONNull?
+    let homocerc: Bool?
+    let inhume: JSONNull?
+    let lepidote: JSONNull?
+    let megalochirous: JSONNull?
+    let ninepenny: JSONNull?
+    let nonbookish: JSONNull?
+    let nondeist: JSONNull?
+    let nymphaeaceous: JSONNull?
+    let parietofrontal: JSONNull?
+    let sancyite: JSONNull?
+    let subjectivist: JSONNull?
+    let tibiad: JSONNull?
+    let transonic: JSONNull?
+    let tripetalous: JSONNull?
+    let trunchman: JSONNull?
+    let urger: JSONNull?
+    let withdrawnness: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case algarrobilla = "algarrobilla"
+        case bowgrace = "bowgrace"
+        case catharticalness = "catharticalness"
+        case centaurid = "Centaurid"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case flix = "flix"
+        case germanely = "germanely"
+        case homocerc = "homocerc"
+        case inhume = "inhume"
+        case lepidote = "lepidote"
+        case megalochirous = "megalochirous"
+        case ninepenny = "ninepenny"
+        case nonbookish = "nonbookish"
+        case nondeist = "nondeist"
+        case nymphaeaceous = "nymphaeaceous"
+        case parietofrontal = "parietofrontal"
+        case sancyite = "sancyite"
+        case subjectivist = "subjectivist"
+        case tibiad = "tibiad"
+        case transonic = "transonic"
+        case tripetalous = "tripetalous"
+        case trunchman = "trunchman"
+        case urger = "urger"
+        case withdrawnness = "withdrawnness"
+    }
+}
+
+// MARK: SaxtenClass convenience initializers and mutators
+
+extension SaxtenClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(SaxtenClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        algarrobilla: JSONNull?? = nil,
+        bowgrace: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        centaurid: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        flix: JSONNull?? = nil,
+        germanely: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        inhume: JSONNull?? = nil,
+        lepidote: JSONNull?? = nil,
+        megalochirous: JSONNull?? = nil,
+        ninepenny: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        nondeist: JSONNull?? = nil,
+        nymphaeaceous: JSONNull?? = nil,
+        parietofrontal: JSONNull?? = nil,
+        sancyite: JSONNull?? = nil,
+        subjectivist: JSONNull?? = nil,
+        tibiad: JSONNull?? = nil,
+        transonic: JSONNull?? = nil,
+        tripetalous: JSONNull?? = nil,
+        trunchman: JSONNull?? = nil,
+        urger: JSONNull?? = nil,
+        withdrawnness: JSONNull?? = nil
+    ) -> SaxtenClass {
+        return SaxtenClass(
+            algarrobilla: algarrobilla ?? self.algarrobilla,
+            bowgrace: bowgrace ?? self.bowgrace,
+            catharticalness: catharticalness ?? self.catharticalness,
+            centaurid: centaurid ?? self.centaurid,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            flix: flix ?? self.flix,
+            germanely: germanely ?? self.germanely,
+            homocerc: homocerc ?? self.homocerc,
+            inhume: inhume ?? self.inhume,
+            lepidote: lepidote ?? self.lepidote,
+            megalochirous: megalochirous ?? self.megalochirous,
+            ninepenny: ninepenny ?? self.ninepenny,
+            nonbookish: nonbookish ?? self.nonbookish,
+            nondeist: nondeist ?? self.nondeist,
+            nymphaeaceous: nymphaeaceous ?? self.nymphaeaceous,
+            parietofrontal: parietofrontal ?? self.parietofrontal,
+            sancyite: sancyite ?? self.sancyite,
+            subjectivist: subjectivist ?? self.subjectivist,
+            tibiad: tibiad ?? self.tibiad,
+            transonic: transonic ?? self.transonic,
+            tripetalous: tripetalous ?? self.tripetalous,
+            trunchman: trunchman ?? self.trunchman,
+            urger: urger ?? self.urger,
+            withdrawnness: withdrawnness ?? self.withdrawnness
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Scatty
+struct Scatty: Codable, Hashable {
+    let aeriferous: JSONNull?
+    let antical: JSONNull?
+    let antighostism: JSONNull?
+    let arcanum: JSONNull?
+    let autotrophy: JSONNull?
+    let baronial: JSONNull?
+    let caffeine: JSONNull?
+    let gorgoniacean: JSONNull?
+    let heroical: JSONNull?
+    let hydropical: JSONNull?
+    let mechanology: JSONNull?
+    let musicopoetic: JSONNull?
+    let officiality: JSONNull?
+    let oftentimes: JSONNull?
+    let ophthalmotonometer: JSONNull?
+    let reflectively: JSONNull?
+    let springer: JSONNull?
+    let tabasco: JSONNull?
+    let teleianthous: JSONNull?
+    let uncombated: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case aeriferous = "aeriferous"
+        case antical = "antical"
+        case antighostism = "antighostism"
+        case arcanum = "arcanum"
+        case autotrophy = "autotrophy"
+        case baronial = "baronial"
+        case caffeine = "caffeine"
+        case gorgoniacean = "gorgoniacean"
+        case heroical = "heroical"
+        case hydropical = "hydropical"
+        case mechanology = "mechanology"
+        case musicopoetic = "musicopoetic"
+        case officiality = "officiality"
+        case oftentimes = "oftentimes"
+        case ophthalmotonometer = "ophthalmotonometer"
+        case reflectively = "reflectively"
+        case springer = "springer"
+        case tabasco = "Tabasco"
+        case teleianthous = "teleianthous"
+        case uncombated = "uncombated"
+    }
+}
+
+// MARK: Scatty convenience initializers and mutators
+
+extension Scatty {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Scatty.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        aeriferous: JSONNull?? = nil,
+        antical: JSONNull?? = nil,
+        antighostism: JSONNull?? = nil,
+        arcanum: JSONNull?? = nil,
+        autotrophy: JSONNull?? = nil,
+        baronial: JSONNull?? = nil,
+        caffeine: JSONNull?? = nil,
+        gorgoniacean: JSONNull?? = nil,
+        heroical: JSONNull?? = nil,
+        hydropical: JSONNull?? = nil,
+        mechanology: JSONNull?? = nil,
+        musicopoetic: JSONNull?? = nil,
+        officiality: JSONNull?? = nil,
+        oftentimes: JSONNull?? = nil,
+        ophthalmotonometer: JSONNull?? = nil,
+        reflectively: JSONNull?? = nil,
+        springer: JSONNull?? = nil,
+        tabasco: JSONNull?? = nil,
+        teleianthous: JSONNull?? = nil,
+        uncombated: JSONNull?? = nil
+    ) -> Scatty {
+        return Scatty(
+            aeriferous: aeriferous ?? self.aeriferous,
+            antical: antical ?? self.antical,
+            antighostism: antighostism ?? self.antighostism,
+            arcanum: arcanum ?? self.arcanum,
+            autotrophy: autotrophy ?? self.autotrophy,
+            baronial: baronial ?? self.baronial,
+            caffeine: caffeine ?? self.caffeine,
+            gorgoniacean: gorgoniacean ?? self.gorgoniacean,
+            heroical: heroical ?? self.heroical,
+            hydropical: hydropical ?? self.hydropical,
+            mechanology: mechanology ?? self.mechanology,
+            musicopoetic: musicopoetic ?? self.musicopoetic,
+            officiality: officiality ?? self.officiality,
+            oftentimes: oftentimes ?? self.oftentimes,
+            ophthalmotonometer: ophthalmotonometer ?? self.ophthalmotonometer,
+            reflectively: reflectively ?? self.reflectively,
+            springer: springer ?? self.springer,
+            tabasco: tabasco ?? self.tabasco,
+            teleianthous: teleianthous ?? self.teleianthous,
+            uncombated: uncombated ?? self.uncombated
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Scoffer: Codable, Hashable {
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Scoffer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Scoffer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Scrampum: Codable, Hashable {
+    case bool(Bool)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Scrampum.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Scrampum"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Serpentinic: Codable, Hashable {
+    case double(Double)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Serpentinic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Serpentinic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Shadowable: Codable, Hashable {
+    case bool(Bool)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Shadowable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Shadowable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum SisteringElement: Codable, Hashable {
+    case integer(Int)
+    case nullArray([JSONNull?])
+    case sisteringClass(SisteringClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(SisteringClass.self) {
+            self = .sisteringClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(SisteringElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for SisteringElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .sisteringClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - SisteringClass
+struct SisteringClass: Codable, Hashable {
+    let amphicarpic: JSONNull?
+    let chianti: JSONNull?
+    let frigorific: JSONNull?
+    let haplomi: JSONNull?
+    let hyperkinesis: JSONNull?
+    let laudable: JSONNull?
+    let madwoman: JSONNull?
+    let maimedly: JSONNull?
+    let micropterygidae: JSONNull?
+    let microrhabdus: JSONNull?
+    let nondense: JSONNull?
+    let phlebemphraxis: JSONNull?
+    let redsear: JSONNull?
+    let schismatical: JSONNull?
+    let tartryl: JSONNull?
+    let unabhorred: JSONNull?
+    let undeliberateness: JSONNull?
+    let unmixable: JSONNull?
+    let untruckling: JSONNull?
+    let vineal: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amphicarpic = "amphicarpic"
+        case chianti = "Chianti"
+        case frigorific = "frigorific"
+        case haplomi = "Haplomi"
+        case hyperkinesis = "hyperkinesis"
+        case laudable = "laudable"
+        case madwoman = "madwoman"
+        case maimedly = "maimedly"
+        case micropterygidae = "Micropterygidae"
+        case microrhabdus = "microrhabdus"
+        case nondense = "nondense"
+        case phlebemphraxis = "phlebemphraxis"
+        case redsear = "redsear"
+        case schismatical = "schismatical"
+        case tartryl = "tartryl"
+        case unabhorred = "unabhorred"
+        case undeliberateness = "undeliberateness"
+        case unmixable = "unmixable"
+        case untruckling = "untruckling"
+        case vineal = "vineal"
+    }
+}
+
+// MARK: SisteringClass convenience initializers and mutators
+
+extension SisteringClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(SisteringClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amphicarpic: JSONNull?? = nil,
+        chianti: JSONNull?? = nil,
+        frigorific: JSONNull?? = nil,
+        haplomi: JSONNull?? = nil,
+        hyperkinesis: JSONNull?? = nil,
+        laudable: JSONNull?? = nil,
+        madwoman: JSONNull?? = nil,
+        maimedly: JSONNull?? = nil,
+        micropterygidae: JSONNull?? = nil,
+        microrhabdus: JSONNull?? = nil,
+        nondense: JSONNull?? = nil,
+        phlebemphraxis: JSONNull?? = nil,
+        redsear: JSONNull?? = nil,
+        schismatical: JSONNull?? = nil,
+        tartryl: JSONNull?? = nil,
+        unabhorred: JSONNull?? = nil,
+        undeliberateness: JSONNull?? = nil,
+        unmixable: JSONNull?? = nil,
+        untruckling: JSONNull?? = nil,
+        vineal: JSONNull?? = nil
+    ) -> SisteringClass {
+        return SisteringClass(
+            amphicarpic: amphicarpic ?? self.amphicarpic,
+            chianti: chianti ?? self.chianti,
+            frigorific: frigorific ?? self.frigorific,
+            haplomi: haplomi ?? self.haplomi,
+            hyperkinesis: hyperkinesis ?? self.hyperkinesis,
+            laudable: laudable ?? self.laudable,
+            madwoman: madwoman ?? self.madwoman,
+            maimedly: maimedly ?? self.maimedly,
+            micropterygidae: micropterygidae ?? self.micropterygidae,
+            microrhabdus: microrhabdus ?? self.microrhabdus,
+            nondense: nondense ?? self.nondense,
+            phlebemphraxis: phlebemphraxis ?? self.phlebemphraxis,
+            redsear: redsear ?? self.redsear,
+            schismatical: schismatical ?? self.schismatical,
+            tartryl: tartryl ?? self.tartryl,
+            unabhorred: unabhorred ?? self.unabhorred,
+            undeliberateness: undeliberateness ?? self.undeliberateness,
+            unmixable: unmixable ?? self.unmixable,
+            untruckling: untruckling ?? self.untruckling,
+            vineal: vineal ?? self.vineal
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - Staghunting
+struct Staghunting: Codable, Hashable {
+    let calorimetric: Int?
+    let canid: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let ditriglyphic: Int?
+    let floriferousness: Int?
+    let gamelike: Int?
+    let grig: Int?
+    let homocerc: Bool?
+    let interloan: Int?
+    let lithotomy: Int?
+    let loric: Int?
+    let membranocoriaceous: Int?
+    let membranogenic: Int?
+    let nonbookish: JSONNull?
+    let overtrump: Int?
+    let scotino: Int?
+    let seasonable: Int?
+    let sephen: Int?
+    let stigmarioid: Int?
+    let tired: Int?
+    let trifid: Int?
+    let undefeatedly: Int?
+    let ungirlish: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case calorimetric = "calorimetric"
+        case canid = "canid"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case ditriglyphic = "ditriglyphic"
+        case floriferousness = "floriferousness"
+        case gamelike = "gamelike"
+        case grig = "grig"
+        case homocerc = "homocerc"
+        case interloan = "interloan"
+        case lithotomy = "lithotomy"
+        case loric = "loric"
+        case membranocoriaceous = "membranocoriaceous"
+        case membranogenic = "membranogenic"
+        case nonbookish = "nonbookish"
+        case overtrump = "overtrump"
+        case scotino = "scotino"
+        case seasonable = "seasonable"
+        case sephen = "sephen"
+        case stigmarioid = "stigmarioid"
+        case tired = "tired"
+        case trifid = "trifid"
+        case undefeatedly = "undefeatedly"
+        case ungirlish = "ungirlish"
+    }
+}
+
+// MARK: Staghunting convenience initializers and mutators
+
+extension Staghunting {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Staghunting.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        calorimetric: Int?? = nil,
+        canid: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        ditriglyphic: Int?? = nil,
+        floriferousness: Int?? = nil,
+        gamelike: Int?? = nil,
+        grig: Int?? = nil,
+        homocerc: Bool?? = nil,
+        interloan: Int?? = nil,
+        lithotomy: Int?? = nil,
+        loric: Int?? = nil,
+        membranocoriaceous: Int?? = nil,
+        membranogenic: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        overtrump: Int?? = nil,
+        scotino: Int?? = nil,
+        seasonable: Int?? = nil,
+        sephen: Int?? = nil,
+        stigmarioid: Int?? = nil,
+        tired: Int?? = nil,
+        trifid: Int?? = nil,
+        undefeatedly: Int?? = nil,
+        ungirlish: Int?? = nil
+    ) -> Staghunting {
+        return Staghunting(
+            calorimetric: calorimetric ?? self.calorimetric,
+            canid: canid ?? self.canid,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ditriglyphic: ditriglyphic ?? self.ditriglyphic,
+            floriferousness: floriferousness ?? self.floriferousness,
+            gamelike: gamelike ?? self.gamelike,
+            grig: grig ?? self.grig,
+            homocerc: homocerc ?? self.homocerc,
+            interloan: interloan ?? self.interloan,
+            lithotomy: lithotomy ?? self.lithotomy,
+            loric: loric ?? self.loric,
+            membranocoriaceous: membranocoriaceous ?? self.membranocoriaceous,
+            membranogenic: membranogenic ?? self.membranogenic,
+            nonbookish: nonbookish ?? self.nonbookish,
+            overtrump: overtrump ?? self.overtrump,
+            scotino: scotino ?? self.scotino,
+            seasonable: seasonable ?? self.seasonable,
+            sephen: sephen ?? self.sephen,
+            stigmarioid: stigmarioid ?? self.stigmarioid,
+            tired: tired ?? self.tired,
+            trifid: trifid ?? self.trifid,
+            undefeatedly: undefeatedly ?? self.undefeatedly,
+            ungirlish: ungirlish ?? self.ungirlish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Stagmometer: Codable, Hashable {
+    case string(String)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Stagmometer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Stagmometer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .string(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Stimulability: Codable, Hashable {
+    case bool(Bool)
+    case integer(Int)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Stimulability.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Stimulability"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Strangleable: Codable, Hashable {
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Strangleable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Strangleable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum StrenuosityElement: Codable, Hashable {
+    case nullArray([JSONNull?])
+    case strenuosityClass(StrenuosityClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(StrenuosityClass.self) {
+            self = .strenuosityClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(StrenuosityElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for StrenuosityElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .strenuosityClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - StrenuosityClass
+struct StrenuosityClass: Codable, Hashable {
+    let bliss: Int?
+    let buccate: Int?
+    let bulletproof: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let crumblingness: Int?
+    let disdiapason: String?
+    let engagedly: Int?
+    let fightable: Int?
+    let hoariness: Int?
+    let homocerc: Bool?
+    let hypopodium: Int?
+    let luxurist: Int?
+    let mechanician: Int?
+    let nonbookish: JSONNull?
+    let onopordon: Int?
+    let podgily: Int?
+    let reformableness: Int?
+    let scatterbrains: Int?
+    let seminuria: Int?
+    let sodomite: Int?
+    let tramp: Int?
+    let undueness: Int?
+    let worthily: Int?
+    let yankeeist: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case bliss = "bliss"
+        case buccate = "buccate"
+        case bulletproof = "bulletproof"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case crumblingness = "crumblingness"
+        case disdiapason = "disdiapason"
+        case engagedly = "engagedly"
+        case fightable = "fightable"
+        case hoariness = "hoariness"
+        case homocerc = "homocerc"
+        case hypopodium = "hypopodium"
+        case luxurist = "luxurist"
+        case mechanician = "mechanician"
+        case nonbookish = "nonbookish"
+        case onopordon = "Onopordon"
+        case podgily = "podgily"
+        case reformableness = "reformableness"
+        case scatterbrains = "scatterbrains"
+        case seminuria = "seminuria"
+        case sodomite = "Sodomite"
+        case tramp = "tramp"
+        case undueness = "undueness"
+        case worthily = "worthily"
+        case yankeeist = "Yankeeist"
+    }
+}
+
+// MARK: StrenuosityClass convenience initializers and mutators
+
+extension StrenuosityClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(StrenuosityClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        bliss: Int?? = nil,
+        buccate: Int?? = nil,
+        bulletproof: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        crumblingness: Int?? = nil,
+        disdiapason: String?? = nil,
+        engagedly: Int?? = nil,
+        fightable: Int?? = nil,
+        hoariness: Int?? = nil,
+        homocerc: Bool?? = nil,
+        hypopodium: Int?? = nil,
+        luxurist: Int?? = nil,
+        mechanician: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        onopordon: Int?? = nil,
+        podgily: Int?? = nil,
+        reformableness: Int?? = nil,
+        scatterbrains: Int?? = nil,
+        seminuria: Int?? = nil,
+        sodomite: Int?? = nil,
+        tramp: Int?? = nil,
+        undueness: Int?? = nil,
+        worthily: Int?? = nil,
+        yankeeist: Int?? = nil
+    ) -> StrenuosityClass {
+        return StrenuosityClass(
+            bliss: bliss ?? self.bliss,
+            buccate: buccate ?? self.buccate,
+            bulletproof: bulletproof ?? self.bulletproof,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            crumblingness: crumblingness ?? self.crumblingness,
+            disdiapason: disdiapason ?? self.disdiapason,
+            engagedly: engagedly ?? self.engagedly,
+            fightable: fightable ?? self.fightable,
+            hoariness: hoariness ?? self.hoariness,
+            homocerc: homocerc ?? self.homocerc,
+            hypopodium: hypopodium ?? self.hypopodium,
+            luxurist: luxurist ?? self.luxurist,
+            mechanician: mechanician ?? self.mechanician,
+            nonbookish: nonbookish ?? self.nonbookish,
+            onopordon: onopordon ?? self.onopordon,
+            podgily: podgily ?? self.podgily,
+            reformableness: reformableness ?? self.reformableness,
+            scatterbrains: scatterbrains ?? self.scatterbrains,
+            seminuria: seminuria ?? self.seminuria,
+            sodomite: sodomite ?? self.sodomite,
+            tramp: tramp ?? self.tramp,
+            undueness: undueness ?? self.undueness,
+            worthily: worthily ?? self.worthily,
+            yankeeist: yankeeist ?? self.yankeeist
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Tabaxir: Codable, Hashable {
+    case bool(Bool)
+    case double(Double)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Tabaxir.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Tabaxir"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Talpiform: Codable, Hashable {
+    case double(Double)
+    case quebrachineClass(QuebrachineClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Talpiform.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Talpiform"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Thwack: Codable, Hashable {
+    case bool(Bool)
+    case double(Double)
+    case quebrachineClass(QuebrachineClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Thwack.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Thwack"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Tortricine: Codable, Hashable {
+    case quebrachineClass(QuebrachineClass)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Tortricine.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Tortricine"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum TruantcyElement: Codable, Hashable {
+    case bool(Bool)
+    case truantcyClass(TruantcyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(TruantcyClass.self) {
+            self = .truantcyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(TruantcyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for TruantcyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .truantcyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - TruantcyClass
+struct TruantcyClass: Codable, Hashable {
+    let alfiona: JSONNull?
+    let ascaridiasis: JSONNull?
+    let bungey: JSONNull?
+    let catharticalness: Double?
+    let ceroxyle: JSONNull?
+    let chirotherium: Int?
+    let chorology: JSONNull?
+    let disdiapason: String?
+    let enmarble: JSONNull?
+    let epeira: JSONNull?
+    let eurylaimi: JSONNull?
+    let germination: JSONNull?
+    let hallelujah: JSONNull?
+    let homocerc: Bool?
+    let lev: JSONNull?
+    let mouthing: JSONNull?
+    let nonbookish: JSONNull?
+    let philliloo: JSONNull?
+    let planetal: JSONNull?
+    let poney: JSONNull?
+    let punctualist: JSONNull?
+    let returnlessly: JSONNull?
+    let skelder: JSONNull?
+    let windwaywardly: JSONNull?
+    let yuman: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case alfiona = "alfiona"
+        case ascaridiasis = "ascaridiasis"
+        case bungey = "bungey"
+        case catharticalness = "catharticalness"
+        case ceroxyle = "ceroxyle"
+        case chirotherium = "Chirotherium"
+        case chorology = "chorology"
+        case disdiapason = "disdiapason"
+        case enmarble = "enmarble"
+        case epeira = "Epeira"
+        case eurylaimi = "Eurylaimi"
+        case germination = "germination"
+        case hallelujah = "hallelujah"
+        case homocerc = "homocerc"
+        case lev = "lev"
+        case mouthing = "mouthing"
+        case nonbookish = "nonbookish"
+        case philliloo = "philliloo"
+        case planetal = "planetal"
+        case poney = "poney"
+        case punctualist = "punctualist"
+        case returnlessly = "returnlessly"
+        case skelder = "skelder"
+        case windwaywardly = "windwaywardly"
+        case yuman = "Yuman"
+    }
+}
+
+// MARK: TruantcyClass convenience initializers and mutators
+
+extension TruantcyClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(TruantcyClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        alfiona: JSONNull?? = nil,
+        ascaridiasis: JSONNull?? = nil,
+        bungey: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        ceroxyle: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        chorology: JSONNull?? = nil,
+        disdiapason: String?? = nil,
+        enmarble: JSONNull?? = nil,
+        epeira: JSONNull?? = nil,
+        eurylaimi: JSONNull?? = nil,
+        germination: JSONNull?? = nil,
+        hallelujah: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        lev: JSONNull?? = nil,
+        mouthing: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        philliloo: JSONNull?? = nil,
+        planetal: JSONNull?? = nil,
+        poney: JSONNull?? = nil,
+        punctualist: JSONNull?? = nil,
+        returnlessly: JSONNull?? = nil,
+        skelder: JSONNull?? = nil,
+        windwaywardly: JSONNull?? = nil,
+        yuman: JSONNull?? = nil
+    ) -> TruantcyClass {
+        return TruantcyClass(
+            alfiona: alfiona ?? self.alfiona,
+            ascaridiasis: ascaridiasis ?? self.ascaridiasis,
+            bungey: bungey ?? self.bungey,
+            catharticalness: catharticalness ?? self.catharticalness,
+            ceroxyle: ceroxyle ?? self.ceroxyle,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chorology: chorology ?? self.chorology,
+            disdiapason: disdiapason ?? self.disdiapason,
+            enmarble: enmarble ?? self.enmarble,
+            epeira: epeira ?? self.epeira,
+            eurylaimi: eurylaimi ?? self.eurylaimi,
+            germination: germination ?? self.germination,
+            hallelujah: hallelujah ?? self.hallelujah,
+            homocerc: homocerc ?? self.homocerc,
+            lev: lev ?? self.lev,
+            mouthing: mouthing ?? self.mouthing,
+            nonbookish: nonbookish ?? self.nonbookish,
+            philliloo: philliloo ?? self.philliloo,
+            planetal: planetal ?? self.planetal,
+            poney: poney ?? self.poney,
+            punctualist: punctualist ?? self.punctualist,
+            returnlessly: returnlessly ?? self.returnlessly,
+            skelder: skelder ?? self.skelder,
+            windwaywardly: windwaywardly ?? self.windwaywardly,
+            yuman: yuman ?? self.yuman
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Unbeginning: Codable, Hashable {
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unbeginning.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unbeginning"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Undesirability: Codable, Hashable {
+    case integerArray([Int])
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Undesirability.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Undesirability"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Unerasing: Codable, Hashable {
+    case integer(Int)
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unerasing.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unerasing"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Unguentarium: Codable, Hashable {
+    case integer(Int)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Unguentarium.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unguentarium"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum UnimpeachablyElement: Codable, Hashable {
+    case bool(Bool)
+    case unimpeachablyClass(UnimpeachablyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(UnimpeachablyClass.self) {
+            self = .unimpeachablyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(UnimpeachablyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for UnimpeachablyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .unimpeachablyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - UnimpeachablyClass
+struct UnimpeachablyClass: Codable, Hashable {
+    let acerin: Int?
+    let bobadil: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let chlorophylligenous: Int?
+    let conversational: Int?
+    let demiowl: Int?
+    let disdiapason: String?
+    let ectorhinal: Int?
+    let gamblesomeness: Int?
+    let homocerc: Bool?
+    let irrorate: Int?
+    let kindergartening: Int?
+    let lateritic: Int?
+    let mespil: Int?
+    let misconfiguration: Int?
+    let nonbookish: JSONNull?
+    let planometry: Int?
+    let quiina: Int?
+    let robert: Int?
+    let rot: Int?
+    let subcinctorium: Int?
+    let tussocker: Int?
+    let ultraproud: Int?
+    let unsuggestedness: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case acerin = "acerin"
+        case bobadil = "Bobadil"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case chlorophylligenous = "chlorophylligenous"
+        case conversational = "conversational"
+        case demiowl = "demiowl"
+        case disdiapason = "disdiapason"
+        case ectorhinal = "ectorhinal"
+        case gamblesomeness = "gamblesomeness"
+        case homocerc = "homocerc"
+        case irrorate = "irrorate"
+        case kindergartening = "kindergartening"
+        case lateritic = "lateritic"
+        case mespil = "mespil"
+        case misconfiguration = "misconfiguration"
+        case nonbookish = "nonbookish"
+        case planometry = "planometry"
+        case quiina = "Quiina"
+        case robert = "Robert"
+        case rot = "rot"
+        case subcinctorium = "subcinctorium"
+        case tussocker = "tussocker"
+        case ultraproud = "ultraproud"
+        case unsuggestedness = "unsuggestedness"
+    }
+}
+
+// MARK: UnimpeachablyClass convenience initializers and mutators
+
+extension UnimpeachablyClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(UnimpeachablyClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acerin: Int?? = nil,
+        bobadil: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        chlorophylligenous: Int?? = nil,
+        conversational: Int?? = nil,
+        demiowl: Int?? = nil,
+        disdiapason: String?? = nil,
+        ectorhinal: Int?? = nil,
+        gamblesomeness: Int?? = nil,
+        homocerc: Bool?? = nil,
+        irrorate: Int?? = nil,
+        kindergartening: Int?? = nil,
+        lateritic: Int?? = nil,
+        mespil: Int?? = nil,
+        misconfiguration: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        planometry: Int?? = nil,
+        quiina: Int?? = nil,
+        robert: Int?? = nil,
+        rot: Int?? = nil,
+        subcinctorium: Int?? = nil,
+        tussocker: Int?? = nil,
+        ultraproud: Int?? = nil,
+        unsuggestedness: Int?? = nil
+    ) -> UnimpeachablyClass {
+        return UnimpeachablyClass(
+            acerin: acerin ?? self.acerin,
+            bobadil: bobadil ?? self.bobadil,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chlorophylligenous: chlorophylligenous ?? self.chlorophylligenous,
+            conversational: conversational ?? self.conversational,
+            demiowl: demiowl ?? self.demiowl,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ectorhinal: ectorhinal ?? self.ectorhinal,
+            gamblesomeness: gamblesomeness ?? self.gamblesomeness,
+            homocerc: homocerc ?? self.homocerc,
+            irrorate: irrorate ?? self.irrorate,
+            kindergartening: kindergartening ?? self.kindergartening,
+            lateritic: lateritic ?? self.lateritic,
+            mespil: mespil ?? self.mespil,
+            misconfiguration: misconfiguration ?? self.misconfiguration,
+            nonbookish: nonbookish ?? self.nonbookish,
+            planometry: planometry ?? self.planometry,
+            quiina: quiina ?? self.quiina,
+            robert: robert ?? self.robert,
+            rot: rot ?? self.rot,
+            subcinctorium: subcinctorium ?? self.subcinctorium,
+            tussocker: tussocker ?? self.tussocker,
+            ultraproud: ultraproud ?? self.ultraproud,
+            unsuggestedness: unsuggestedness ?? self.unsuggestedness
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Unmortgaged: Codable, Hashable {
+    case double(Double)
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Unmortgaged.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unmortgaged"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Unobstructed: Codable, Hashable {
+    case integer(Int)
+    case quebrachineClass(QuebrachineClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Unobstructed.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unobstructed"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Unreceptivity: Codable, Hashable {
+    case integer(Int)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unreceptivity.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unreceptivity"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Unsatisfactoriness: Codable, Hashable {
+    case bool(Bool)
+    case integer(Int)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unsatisfactoriness.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unsatisfactoriness"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum UnstressedElement: Codable, Hashable {
+    case bool(Bool)
+    case string(String)
+    case unstressedClass(UnstressedClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(UnstressedClass.self) {
+            self = .unstressedClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(UnstressedElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for UnstressedElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .unstressedClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - UnstressedClass
+struct UnstressedClass: Codable, Hashable {
+    let alain: JSONNull?
+    let amphirhina: JSONNull?
+    let antimachinery: JSONNull?
+    let coldish: JSONNull?
+    let crantara: JSONNull?
+    let distinguishing: JSONNull?
+    let elytroposis: JSONNull?
+    let gentianwort: JSONNull?
+    let heliosis: JSONNull?
+    let instrumental: JSONNull?
+    let introinflection: JSONNull?
+    let kala: JSONNull?
+    let lincolnian: JSONNull?
+    let metad: JSONNull?
+    let sarcophilus: JSONNull?
+    let swingingly: JSONNull?
+    let unconformity: JSONNull?
+    let undecreed: JSONNull?
+    let venerable: JSONNull?
+    let vowellessness: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case alain = "Alain"
+        case amphirhina = "Amphirhina"
+        case antimachinery = "antimachinery"
+        case coldish = "coldish"
+        case crantara = "crantara"
+        case distinguishing = "distinguishing"
+        case elytroposis = "elytroposis"
+        case gentianwort = "gentianwort"
+        case heliosis = "heliosis"
+        case instrumental = "instrumental"
+        case introinflection = "introinflection"
+        case kala = "kala"
+        case lincolnian = "Lincolnian"
+        case metad = "metad"
+        case sarcophilus = "Sarcophilus"
+        case swingingly = "swingingly"
+        case unconformity = "unconformity"
+        case undecreed = "undecreed"
+        case venerable = "venerable"
+        case vowellessness = "vowellessness"
+    }
+}
+
+// MARK: UnstressedClass convenience initializers and mutators
+
+extension UnstressedClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(UnstressedClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        alain: JSONNull?? = nil,
+        amphirhina: JSONNull?? = nil,
+        antimachinery: JSONNull?? = nil,
+        coldish: JSONNull?? = nil,
+        crantara: JSONNull?? = nil,
+        distinguishing: JSONNull?? = nil,
+        elytroposis: JSONNull?? = nil,
+        gentianwort: JSONNull?? = nil,
+        heliosis: JSONNull?? = nil,
+        instrumental: JSONNull?? = nil,
+        introinflection: JSONNull?? = nil,
+        kala: JSONNull?? = nil,
+        lincolnian: JSONNull?? = nil,
+        metad: JSONNull?? = nil,
+        sarcophilus: JSONNull?? = nil,
+        swingingly: JSONNull?? = nil,
+        unconformity: JSONNull?? = nil,
+        undecreed: JSONNull?? = nil,
+        venerable: JSONNull?? = nil,
+        vowellessness: JSONNull?? = nil
+    ) -> UnstressedClass {
+        return UnstressedClass(
+            alain: alain ?? self.alain,
+            amphirhina: amphirhina ?? self.amphirhina,
+            antimachinery: antimachinery ?? self.antimachinery,
+            coldish: coldish ?? self.coldish,
+            crantara: crantara ?? self.crantara,
+            distinguishing: distinguishing ?? self.distinguishing,
+            elytroposis: elytroposis ?? self.elytroposis,
+            gentianwort: gentianwort ?? self.gentianwort,
+            heliosis: heliosis ?? self.heliosis,
+            instrumental: instrumental ?? self.instrumental,
+            introinflection: introinflection ?? self.introinflection,
+            kala: kala ?? self.kala,
+            lincolnian: lincolnian ?? self.lincolnian,
+            metad: metad ?? self.metad,
+            sarcophilus: sarcophilus ?? self.sarcophilus,
+            swingingly: swingingly ?? self.swingingly,
+            unconformity: unconformity ?? self.unconformity,
+            undecreed: undecreed ?? self.undecreed,
+            venerable: venerable ?? self.venerable,
+            vowellessness: vowellessness ?? self.vowellessness
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Untasked: Codable, Hashable {
+    case double(Double)
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Untasked.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Untasked"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Unvarying: Codable, Hashable {
+    case bool(Bool)
+    case double(Double)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unvarying.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unvarying"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Vehemently: Codable, Hashable {
+    case bool(Bool)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Vehemently.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Vehemently"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Whitepot: Codable, Hashable {
+    case double(Double)
+    case quebrachineClass(QuebrachineClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Whitepot.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Whitepot"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum WrothyElement: Codable, Hashable {
+    case nullArray([JSONNull?])
+    case wrothyClass(WrothyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(WrothyClass.self) {
+            self = .wrothyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(WrothyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for WrothyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .wrothyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+//
+// Hashable or Equatable:
+// The compiler will not be able to synthesize the implementation of Hashable or Equatable
+// for types that require the use of JSONAny, nor will the implementation of Hashable be
+// synthesized for types that have collections (such as arrays or dictionaries).
+
+// MARK: - WrothyClass
+struct WrothyClass: Codable, Hashable {
+    let aeschynanthus: JSONNull?
+    let aquiferous: JSONNull?
+    let cheapener: JSONNull?
+    let enumeration: JSONNull?
+    let ephesine: JSONNull?
+    let escadrille: JSONNull?
+    let estrous: JSONNull?
+    let interestedly: JSONNull?
+    let katakinetomer: JSONNull?
+    let mortification: JSONNull?
+    let morula: JSONNull?
+    let orthosymmetrical: JSONNull?
+    let overbark: JSONNull?
+    let politist: JSONNull?
+    let qualified: JSONNull?
+    let sphenomalar: JSONNull?
+    let throatful: JSONNull?
+    let transhumance: JSONNull?
+    let triandrian: JSONNull?
+    let unbooked: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case aeschynanthus = "Aeschynanthus"
+        case aquiferous = "aquiferous"
+        case cheapener = "cheapener"
+        case enumeration = "enumeration"
+        case ephesine = "Ephesine"
+        case escadrille = "escadrille"
+        case estrous = "estrous"
+        case interestedly = "interestedly"
+        case katakinetomer = "katakinetomer"
+        case mortification = "mortification"
+        case morula = "morula"
+        case orthosymmetrical = "orthosymmetrical"
+        case overbark = "overbark"
+        case politist = "politist"
+        case qualified = "qualified"
+        case sphenomalar = "sphenomalar"
+        case throatful = "throatful"
+        case transhumance = "transhumance"
+        case triandrian = "triandrian"
+        case unbooked = "unbooked"
+    }
+}
+
+// MARK: WrothyClass convenience initializers and mutators
+
+extension WrothyClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(WrothyClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        aeschynanthus: JSONNull?? = nil,
+        aquiferous: JSONNull?? = nil,
+        cheapener: JSONNull?? = nil,
+        enumeration: JSONNull?? = nil,
+        ephesine: JSONNull?? = nil,
+        escadrille: JSONNull?? = nil,
+        estrous: JSONNull?? = nil,
+        interestedly: JSONNull?? = nil,
+        katakinetomer: JSONNull?? = nil,
+        mortification: JSONNull?? = nil,
+        morula: JSONNull?? = nil,
+        orthosymmetrical: JSONNull?? = nil,
+        overbark: JSONNull?? = nil,
+        politist: JSONNull?? = nil,
+        qualified: JSONNull?? = nil,
+        sphenomalar: JSONNull?? = nil,
+        throatful: JSONNull?? = nil,
+        transhumance: JSONNull?? = nil,
+        triandrian: JSONNull?? = nil,
+        unbooked: JSONNull?? = nil
+    ) -> WrothyClass {
+        return WrothyClass(
+            aeschynanthus: aeschynanthus ?? self.aeschynanthus,
+            aquiferous: aquiferous ?? self.aquiferous,
+            cheapener: cheapener ?? self.cheapener,
+            enumeration: enumeration ?? self.enumeration,
+            ephesine: ephesine ?? self.ephesine,
+            escadrille: escadrille ?? self.escadrille,
+            estrous: estrous ?? self.estrous,
+            interestedly: interestedly ?? self.interestedly,
+            katakinetomer: katakinetomer ?? self.katakinetomer,
+            mortification: mortification ?? self.mortification,
+            morula: morula ?? self.morula,
+            orthosymmetrical: orthosymmetrical ?? self.orthosymmetrical,
+            overbark: overbark ?? self.overbark,
+            politist: politist ?? self.politist,
+            qualified: qualified ?? self.qualified,
+            sphenomalar: sphenomalar ?? self.sphenomalar,
+            throatful: throatful ?? self.throatful,
+            transhumance: transhumance ?? self.transhumance,
+            triandrian: triandrian ?? self.triandrian,
+            unbooked: unbooked ?? self.unbooked
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+class JSONNull: Codable, Hashable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    public func hash(into hasher: inout Hasher) {
+        hasher.combine(0)
+    }
+
+    public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/head/swift/test/inputs/json/priority/combinations4.json/sendable-true--1c3982c78639/quicktype.swift b/head/swift/test/inputs/json/priority/combinations4.json/sendable-true--1c3982c78639/quicktype.swift
new file mode 100644
index 0000000..c167164
--- /dev/null
+++ b/head/swift/test/inputs/json/priority/combinations4.json/sendable-true--1c3982c78639/quicktype.swift
@@ -0,0 +1,3641 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+import Foundation
+
+// MARK: - TopLevel
+struct TopLevel: Codable, Sendable {
+    let protrusive: [Protrusive]
+    let pulpitism: [PulpitismElement]
+    let pyodermia: [PyodermiaElement]
+    let quebrachine: [QuebrachineElement]
+    let querier: [Querier]
+    let rebarbative: [Rebarbative]
+    let reimagine: [Reimagine]
+    let ressaut: Ressaut
+    let retrocervical: [Retrocervical]
+    let revert: [Revert]
+    let rewrite: [RewriteElement]
+    let saccoderm: [Saccoderm]
+    let santir: [SantirElement]
+    let saprophilous: [Saprophilous]
+    let saxten: [SaxtenElement]
+    let scatty: [Scatty?]
+    let scoffer: [Scoffer]
+    let scrampum: [Scrampum]
+    let semantic: Double
+    let serpentinic: [Serpentinic]
+    let shadowable: [Shadowable]
+    let sistering: [SisteringElement]
+    let staghunting: [Staghunting]
+    let stagmometer: [Stagmometer]
+    let stimulability: [Stimulability]
+    let strangleable: [Strangleable]
+    let strenuosity: [StrenuosityElement]
+    let tabaxir: [Tabaxir]
+    let talpiform: [Talpiform]
+    let thwack: [Thwack]
+    let to: [Double?]
+    let tortricine: [Tortricine]
+    let truantcy: [TruantcyElement]
+    let turgesce: [String]
+    let unbeginning: [Unbeginning]
+    let underdunged: [Double]
+    let undesirability: [Undesirability]
+    let unerasing: [Unerasing]
+    let unguentarium: [Unguentarium]
+    let unimpeachably: [UnimpeachablyElement]
+    let unmortgaged: [Unmortgaged]
+    let unobstructed: [Unobstructed]
+    let unreceptivity: [Unreceptivity]
+    let unsatisfactoriness: [Unsatisfactoriness]
+    let unsecurity: [Int]
+    let unstressed: [UnstressedElement]
+    let untasked: [Untasked]
+    let unvarying: [Unvarying]
+    let vehemently: [Vehemently]
+    let warriorship: [String: Bool]
+    let whitepot: [Whitepot]
+    let wrothy: [WrothyElement]
+
+    enum CodingKeys: String, CodingKey {
+        case protrusive = "protrusive"
+        case pulpitism = "pulpitism"
+        case pyodermia = "pyodermia"
+        case quebrachine = "quebrachine"
+        case querier = "querier"
+        case rebarbative = "rebarbative"
+        case reimagine = "reimagine"
+        case ressaut = "ressaut"
+        case retrocervical = "retrocervical"
+        case revert = "revert"
+        case rewrite = "rewrite"
+        case saccoderm = "saccoderm"
+        case santir = "santir"
+        case saprophilous = "saprophilous"
+        case saxten = "saxten"
+        case scatty = "scatty"
+        case scoffer = "scoffer"
+        case scrampum = "scrampum"
+        case semantic = "semantic"
+        case serpentinic = "serpentinic"
+        case shadowable = "shadowable"
+        case sistering = "sistering"
+        case staghunting = "staghunting"
+        case stagmometer = "stagmometer"
+        case stimulability = "stimulability"
+        case strangleable = "strangleable"
+        case strenuosity = "strenuosity"
+        case tabaxir = "tabaxir"
+        case talpiform = "talpiform"
+        case thwack = "thwack"
+        case to = "to"
+        case tortricine = "tortricine"
+        case truantcy = "truantcy"
+        case turgesce = "turgesce"
+        case unbeginning = "unbeginning"
+        case underdunged = "underdunged"
+        case undesirability = "undesirability"
+        case unerasing = "unerasing"
+        case unguentarium = "unguentarium"
+        case unimpeachably = "unimpeachably"
+        case unmortgaged = "unmortgaged"
+        case unobstructed = "unobstructed"
+        case unreceptivity = "unreceptivity"
+        case unsatisfactoriness = "unsatisfactoriness"
+        case unsecurity = "unsecurity"
+        case unstressed = "unstressed"
+        case untasked = "untasked"
+        case unvarying = "unvarying"
+        case vehemently = "vehemently"
+        case warriorship = "warriorship"
+        case whitepot = "whitepot"
+        case wrothy = "wrothy"
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(TopLevel.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        protrusive: [Protrusive]? = nil,
+        pulpitism: [PulpitismElement]? = nil,
+        pyodermia: [PyodermiaElement]? = nil,
+        quebrachine: [QuebrachineElement]? = nil,
+        querier: [Querier]? = nil,
+        rebarbative: [Rebarbative]? = nil,
+        reimagine: [Reimagine]? = nil,
+        ressaut: Ressaut? = nil,
+        retrocervical: [Retrocervical]? = nil,
+        revert: [Revert]? = nil,
+        rewrite: [RewriteElement]? = nil,
+        saccoderm: [Saccoderm]? = nil,
+        santir: [SantirElement]? = nil,
+        saprophilous: [Saprophilous]? = nil,
+        saxten: [SaxtenElement]? = nil,
+        scatty: [Scatty?]? = nil,
+        scoffer: [Scoffer]? = nil,
+        scrampum: [Scrampum]? = nil,
+        semantic: Double? = nil,
+        serpentinic: [Serpentinic]? = nil,
+        shadowable: [Shadowable]? = nil,
+        sistering: [SisteringElement]? = nil,
+        staghunting: [Staghunting]? = nil,
+        stagmometer: [Stagmometer]? = nil,
+        stimulability: [Stimulability]? = nil,
+        strangleable: [Strangleable]? = nil,
+        strenuosity: [StrenuosityElement]? = nil,
+        tabaxir: [Tabaxir]? = nil,
+        talpiform: [Talpiform]? = nil,
+        thwack: [Thwack]? = nil,
+        to: [Double?]? = nil,
+        tortricine: [Tortricine]? = nil,
+        truantcy: [TruantcyElement]? = nil,
+        turgesce: [String]? = nil,
+        unbeginning: [Unbeginning]? = nil,
+        underdunged: [Double]? = nil,
+        undesirability: [Undesirability]? = nil,
+        unerasing: [Unerasing]? = nil,
+        unguentarium: [Unguentarium]? = nil,
+        unimpeachably: [UnimpeachablyElement]? = nil,
+        unmortgaged: [Unmortgaged]? = nil,
+        unobstructed: [Unobstructed]? = nil,
+        unreceptivity: [Unreceptivity]? = nil,
+        unsatisfactoriness: [Unsatisfactoriness]? = nil,
+        unsecurity: [Int]? = nil,
+        unstressed: [UnstressedElement]? = nil,
+        untasked: [Untasked]? = nil,
+        unvarying: [Unvarying]? = nil,
+        vehemently: [Vehemently]? = nil,
+        warriorship: [String: Bool]? = nil,
+        whitepot: [Whitepot]? = nil,
+        wrothy: [WrothyElement]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            protrusive: protrusive ?? self.protrusive,
+            pulpitism: pulpitism ?? self.pulpitism,
+            pyodermia: pyodermia ?? self.pyodermia,
+            quebrachine: quebrachine ?? self.quebrachine,
+            querier: querier ?? self.querier,
+            rebarbative: rebarbative ?? self.rebarbative,
+            reimagine: reimagine ?? self.reimagine,
+            ressaut: ressaut ?? self.ressaut,
+            retrocervical: retrocervical ?? self.retrocervical,
+            revert: revert ?? self.revert,
+            rewrite: rewrite ?? self.rewrite,
+            saccoderm: saccoderm ?? self.saccoderm,
+            santir: santir ?? self.santir,
+            saprophilous: saprophilous ?? self.saprophilous,
+            saxten: saxten ?? self.saxten,
+            scatty: scatty ?? self.scatty,
+            scoffer: scoffer ?? self.scoffer,
+            scrampum: scrampum ?? self.scrampum,
+            semantic: semantic ?? self.semantic,
+            serpentinic: serpentinic ?? self.serpentinic,
+            shadowable: shadowable ?? self.shadowable,
+            sistering: sistering ?? self.sistering,
+            staghunting: staghunting ?? self.staghunting,
+            stagmometer: stagmometer ?? self.stagmometer,
+            stimulability: stimulability ?? self.stimulability,
+            strangleable: strangleable ?? self.strangleable,
+            strenuosity: strenuosity ?? self.strenuosity,
+            tabaxir: tabaxir ?? self.tabaxir,
+            talpiform: talpiform ?? self.talpiform,
+            thwack: thwack ?? self.thwack,
+            to: to ?? self.to,
+            tortricine: tortricine ?? self.tortricine,
+            truantcy: truantcy ?? self.truantcy,
+            turgesce: turgesce ?? self.turgesce,
+            unbeginning: unbeginning ?? self.unbeginning,
+            underdunged: underdunged ?? self.underdunged,
+            undesirability: undesirability ?? self.undesirability,
+            unerasing: unerasing ?? self.unerasing,
+            unguentarium: unguentarium ?? self.unguentarium,
+            unimpeachably: unimpeachably ?? self.unimpeachably,
+            unmortgaged: unmortgaged ?? self.unmortgaged,
+            unobstructed: unobstructed ?? self.unobstructed,
+            unreceptivity: unreceptivity ?? self.unreceptivity,
+            unsatisfactoriness: unsatisfactoriness ?? self.unsatisfactoriness,
+            unsecurity: unsecurity ?? self.unsecurity,
+            unstressed: unstressed ?? self.unstressed,
+            untasked: untasked ?? self.untasked,
+            unvarying: unvarying ?? self.unvarying,
+            vehemently: vehemently ?? self.vehemently,
+            warriorship: warriorship ?? self.warriorship,
+            whitepot: whitepot ?? self.whitepot,
+            wrothy: wrothy ?? self.wrothy
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Protrusive: Codable, Sendable {
+    case double(Double)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Protrusive.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Protrusive"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum PulpitismElement: Codable, Sendable {
+    case double(Double)
+    case integerArray([Int])
+    case pulpitismClass(PulpitismClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(PulpitismClass.self) {
+            self = .pulpitismClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(PulpitismElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PulpitismElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .pulpitismClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - PulpitismClass
+struct PulpitismClass: Codable, Sendable {
+    let abnet: JSONNull?
+    let buckhorn: JSONNull?
+    let calciform: JSONNull?
+    let chelophore: JSONNull?
+    let cogitation: JSONNull?
+    let decreeable: JSONNull?
+    let despicable: JSONNull?
+    let isodiazo: JSONNull?
+    let jadedly: JSONNull?
+    let leptochlorite: JSONNull?
+    let nursling: JSONNull?
+    let palamedean: JSONNull?
+    let photoheliograph: JSONNull?
+    let pipewood: JSONNull?
+    let roberd: JSONNull?
+    let statable: JSONNull?
+    let superassume: JSONNull?
+    let syllabe: JSONNull?
+    let toughhead: JSONNull?
+    let underburn: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case abnet = "abnet"
+        case buckhorn = "buckhorn"
+        case calciform = "calciform"
+        case chelophore = "chelophore"
+        case cogitation = "cogitation"
+        case decreeable = "decreeable"
+        case despicable = "despicable"
+        case isodiazo = "isodiazo"
+        case jadedly = "jadedly"
+        case leptochlorite = "leptochlorite"
+        case nursling = "nursling"
+        case palamedean = "palamedean"
+        case photoheliograph = "photoheliograph"
+        case pipewood = "pipewood"
+        case roberd = "roberd"
+        case statable = "statable"
+        case superassume = "superassume"
+        case syllabe = "syllabe"
+        case toughhead = "toughhead"
+        case underburn = "underburn"
+    }
+}
+
+// MARK: PulpitismClass convenience initializers and mutators
+
+extension PulpitismClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(PulpitismClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        abnet: JSONNull?? = nil,
+        buckhorn: JSONNull?? = nil,
+        calciform: JSONNull?? = nil,
+        chelophore: JSONNull?? = nil,
+        cogitation: JSONNull?? = nil,
+        decreeable: JSONNull?? = nil,
+        despicable: JSONNull?? = nil,
+        isodiazo: JSONNull?? = nil,
+        jadedly: JSONNull?? = nil,
+        leptochlorite: JSONNull?? = nil,
+        nursling: JSONNull?? = nil,
+        palamedean: JSONNull?? = nil,
+        photoheliograph: JSONNull?? = nil,
+        pipewood: JSONNull?? = nil,
+        roberd: JSONNull?? = nil,
+        statable: JSONNull?? = nil,
+        superassume: JSONNull?? = nil,
+        syllabe: JSONNull?? = nil,
+        toughhead: JSONNull?? = nil,
+        underburn: JSONNull?? = nil
+    ) -> PulpitismClass {
+        return PulpitismClass(
+            abnet: abnet ?? self.abnet,
+            buckhorn: buckhorn ?? self.buckhorn,
+            calciform: calciform ?? self.calciform,
+            chelophore: chelophore ?? self.chelophore,
+            cogitation: cogitation ?? self.cogitation,
+            decreeable: decreeable ?? self.decreeable,
+            despicable: despicable ?? self.despicable,
+            isodiazo: isodiazo ?? self.isodiazo,
+            jadedly: jadedly ?? self.jadedly,
+            leptochlorite: leptochlorite ?? self.leptochlorite,
+            nursling: nursling ?? self.nursling,
+            palamedean: palamedean ?? self.palamedean,
+            photoheliograph: photoheliograph ?? self.photoheliograph,
+            pipewood: pipewood ?? self.pipewood,
+            roberd: roberd ?? self.roberd,
+            statable: statable ?? self.statable,
+            superassume: superassume ?? self.superassume,
+            syllabe: syllabe ?? self.syllabe,
+            toughhead: toughhead ?? self.toughhead,
+            underburn: underburn ?? self.underburn
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum PyodermiaElement: Codable, Sendable {
+    case integer(Int)
+    case pyodermiaClass(PyodermiaClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(PyodermiaClass.self) {
+            self = .pyodermiaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(PyodermiaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PyodermiaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .pyodermiaClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - PyodermiaClass
+struct PyodermiaClass: Codable, Sendable {
+    let aphoristically: JSONNull?
+    let apophyllous: JSONNull?
+    let cognize: JSONNull?
+    let dermonosology: JSONNull?
+    let gyppo: JSONNull?
+    let ither: JSONNull?
+    let juglandaceous: JSONNull?
+    let litho: JSONNull?
+    let macropterous: JSONNull?
+    let photographer: JSONNull?
+    let romancing: JSONNull?
+    let rumness: JSONNull?
+    let somniloquist: JSONNull?
+    let stressfully: JSONNull?
+    let tactically: JSONNull?
+    let tracheophony: JSONNull?
+    let unappositely: JSONNull?
+    let unclothedly: JSONNull?
+    let unimplied: JSONNull?
+    let unsyncopated: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case aphoristically = "aphoristically"
+        case apophyllous = "apophyllous"
+        case cognize = "cognize"
+        case dermonosology = "dermonosology"
+        case gyppo = "Gyppo"
+        case ither = "ither"
+        case juglandaceous = "juglandaceous"
+        case litho = "litho"
+        case macropterous = "macropterous"
+        case photographer = "photographer"
+        case romancing = "romancing"
+        case rumness = "rumness"
+        case somniloquist = "somniloquist"
+        case stressfully = "stressfully"
+        case tactically = "tactically"
+        case tracheophony = "tracheophony"
+        case unappositely = "unappositely"
+        case unclothedly = "unclothedly"
+        case unimplied = "unimplied"
+        case unsyncopated = "unsyncopated"
+    }
+}
+
+// MARK: PyodermiaClass convenience initializers and mutators
+
+extension PyodermiaClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(PyodermiaClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        aphoristically: JSONNull?? = nil,
+        apophyllous: JSONNull?? = nil,
+        cognize: JSONNull?? = nil,
+        dermonosology: JSONNull?? = nil,
+        gyppo: JSONNull?? = nil,
+        ither: JSONNull?? = nil,
+        juglandaceous: JSONNull?? = nil,
+        litho: JSONNull?? = nil,
+        macropterous: JSONNull?? = nil,
+        photographer: JSONNull?? = nil,
+        romancing: JSONNull?? = nil,
+        rumness: JSONNull?? = nil,
+        somniloquist: JSONNull?? = nil,
+        stressfully: JSONNull?? = nil,
+        tactically: JSONNull?? = nil,
+        tracheophony: JSONNull?? = nil,
+        unappositely: JSONNull?? = nil,
+        unclothedly: JSONNull?? = nil,
+        unimplied: JSONNull?? = nil,
+        unsyncopated: JSONNull?? = nil
+    ) -> PyodermiaClass {
+        return PyodermiaClass(
+            aphoristically: aphoristically ?? self.aphoristically,
+            apophyllous: apophyllous ?? self.apophyllous,
+            cognize: cognize ?? self.cognize,
+            dermonosology: dermonosology ?? self.dermonosology,
+            gyppo: gyppo ?? self.gyppo,
+            ither: ither ?? self.ither,
+            juglandaceous: juglandaceous ?? self.juglandaceous,
+            litho: litho ?? self.litho,
+            macropterous: macropterous ?? self.macropterous,
+            photographer: photographer ?? self.photographer,
+            romancing: romancing ?? self.romancing,
+            rumness: rumness ?? self.rumness,
+            somniloquist: somniloquist ?? self.somniloquist,
+            stressfully: stressfully ?? self.stressfully,
+            tactically: tactically ?? self.tactically,
+            tracheophony: tracheophony ?? self.tracheophony,
+            unappositely: unappositely ?? self.unappositely,
+            unclothedly: unclothedly ?? self.unclothedly,
+            unimplied: unimplied ?? self.unimplied,
+            unsyncopated: unsyncopated ?? self.unsyncopated
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum QuebrachineElement: Codable, Sendable {
+    case bool(Bool)
+    case quebrachineClass(QuebrachineClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(QuebrachineElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for QuebrachineElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - QuebrachineClass
+struct QuebrachineClass: Codable, Sendable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+}
+
+// MARK: QuebrachineClass convenience initializers and mutators
+
+extension QuebrachineClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(QuebrachineClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> QuebrachineClass {
+        return QuebrachineClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Querier: Codable, Sendable {
+    case bool(Bool)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Querier.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Querier"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Rebarbative: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Rebarbative.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Rebarbative"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Reimagine
+struct Reimagine: Codable, Sendable {
+    let adducible: JSONNull?
+    let anabolin: JSONNull?
+    let brainy: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let chrysamine: JSONNull?
+    let disdiapason: String?
+    let fluxweed: JSONNull?
+    let glaucine: JSONNull?
+    let grobianism: JSONNull?
+    let hermo: JSONNull?
+    let hieroglyphist: JSONNull?
+    let homocerc: Bool?
+    let icteroid: JSONNull?
+    let immortal: JSONNull?
+    let impetulant: JSONNull?
+    let irrigate: JSONNull?
+    let myxedema: JSONNull?
+    let nonbookish: JSONNull?
+    let onyx: JSONNull?
+    let repasser: JSONNull?
+    let septomarginal: JSONNull?
+    let subdie: JSONNull?
+    let tibiometatarsal: JSONNull?
+    let waltzlike: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case adducible = "adducible"
+        case anabolin = "anabolin"
+        case brainy = "brainy"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case chrysamine = "chrysamine"
+        case disdiapason = "disdiapason"
+        case fluxweed = "fluxweed"
+        case glaucine = "glaucine"
+        case grobianism = "grobianism"
+        case hermo = "Hermo"
+        case hieroglyphist = "hieroglyphist"
+        case homocerc = "homocerc"
+        case icteroid = "icteroid"
+        case immortal = "immortal"
+        case impetulant = "impetulant"
+        case irrigate = "irrigate"
+        case myxedema = "myxedema"
+        case nonbookish = "nonbookish"
+        case onyx = "onyx"
+        case repasser = "repasser"
+        case septomarginal = "septomarginal"
+        case subdie = "subdie"
+        case tibiometatarsal = "tibiometatarsal"
+        case waltzlike = "waltzlike"
+    }
+}
+
+// MARK: Reimagine convenience initializers and mutators
+
+extension Reimagine {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Reimagine.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        adducible: JSONNull?? = nil,
+        anabolin: JSONNull?? = nil,
+        brainy: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        chrysamine: JSONNull?? = nil,
+        disdiapason: String?? = nil,
+        fluxweed: JSONNull?? = nil,
+        glaucine: JSONNull?? = nil,
+        grobianism: JSONNull?? = nil,
+        hermo: JSONNull?? = nil,
+        hieroglyphist: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        icteroid: JSONNull?? = nil,
+        immortal: JSONNull?? = nil,
+        impetulant: JSONNull?? = nil,
+        irrigate: JSONNull?? = nil,
+        myxedema: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        onyx: JSONNull?? = nil,
+        repasser: JSONNull?? = nil,
+        septomarginal: JSONNull?? = nil,
+        subdie: JSONNull?? = nil,
+        tibiometatarsal: JSONNull?? = nil,
+        waltzlike: JSONNull?? = nil
+    ) -> Reimagine {
+        return Reimagine(
+            adducible: adducible ?? self.adducible,
+            anabolin: anabolin ?? self.anabolin,
+            brainy: brainy ?? self.brainy,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chrysamine: chrysamine ?? self.chrysamine,
+            disdiapason: disdiapason ?? self.disdiapason,
+            fluxweed: fluxweed ?? self.fluxweed,
+            glaucine: glaucine ?? self.glaucine,
+            grobianism: grobianism ?? self.grobianism,
+            hermo: hermo ?? self.hermo,
+            hieroglyphist: hieroglyphist ?? self.hieroglyphist,
+            homocerc: homocerc ?? self.homocerc,
+            icteroid: icteroid ?? self.icteroid,
+            immortal: immortal ?? self.immortal,
+            impetulant: impetulant ?? self.impetulant,
+            irrigate: irrigate ?? self.irrigate,
+            myxedema: myxedema ?? self.myxedema,
+            nonbookish: nonbookish ?? self.nonbookish,
+            onyx: onyx ?? self.onyx,
+            repasser: repasser ?? self.repasser,
+            septomarginal: septomarginal ?? self.septomarginal,
+            subdie: subdie ?? self.subdie,
+            tibiometatarsal: tibiometatarsal ?? self.tibiometatarsal,
+            waltzlike: waltzlike ?? self.waltzlike
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Ressaut
+struct Ressaut: Codable, Sendable {
+    let apperceptive: String
+    let cuttoo: String
+    let douser: String
+    let drinkproof: String
+    let forementioned: String
+    let freesia: String
+    let genevieve: String
+    let hyperdiabolical: String
+    let hypocone: String
+    let irreverentially: String
+    let jumart: String
+    let mimosaceae: String
+    let mollicrush: String
+    let nedder: String
+    let retinasphalt: String
+    let sough: String
+    let steading: String
+    let theopaschitism: String
+    let undurableness: String
+    let unmingleable: String
+
+    enum CodingKeys: String, CodingKey {
+        case apperceptive = "apperceptive"
+        case cuttoo = "cuttoo"
+        case douser = "douser"
+        case drinkproof = "drinkproof"
+        case forementioned = "forementioned"
+        case freesia = "Freesia"
+        case genevieve = "Genevieve"
+        case hyperdiabolical = "hyperdiabolical"
+        case hypocone = "hypocone"
+        case irreverentially = "irreverentially"
+        case jumart = "jumart"
+        case mimosaceae = "Mimosaceae"
+        case mollicrush = "mollicrush"
+        case nedder = "nedder"
+        case retinasphalt = "retinasphalt"
+        case sough = "sough"
+        case steading = "steading"
+        case theopaschitism = "Theopaschitism"
+        case undurableness = "undurableness"
+        case unmingleable = "unmingleable"
+    }
+}
+
+// MARK: Ressaut convenience initializers and mutators
+
+extension Ressaut {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Ressaut.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apperceptive: String? = nil,
+        cuttoo: String? = nil,
+        douser: String? = nil,
+        drinkproof: String? = nil,
+        forementioned: String? = nil,
+        freesia: String? = nil,
+        genevieve: String? = nil,
+        hyperdiabolical: String? = nil,
+        hypocone: String? = nil,
+        irreverentially: String? = nil,
+        jumart: String? = nil,
+        mimosaceae: String? = nil,
+        mollicrush: String? = nil,
+        nedder: String? = nil,
+        retinasphalt: String? = nil,
+        sough: String? = nil,
+        steading: String? = nil,
+        theopaschitism: String? = nil,
+        undurableness: String? = nil,
+        unmingleable: String? = nil
+    ) -> Ressaut {
+        return Ressaut(
+            apperceptive: apperceptive ?? self.apperceptive,
+            cuttoo: cuttoo ?? self.cuttoo,
+            douser: douser ?? self.douser,
+            drinkproof: drinkproof ?? self.drinkproof,
+            forementioned: forementioned ?? self.forementioned,
+            freesia: freesia ?? self.freesia,
+            genevieve: genevieve ?? self.genevieve,
+            hyperdiabolical: hyperdiabolical ?? self.hyperdiabolical,
+            hypocone: hypocone ?? self.hypocone,
+            irreverentially: irreverentially ?? self.irreverentially,
+            jumart: jumart ?? self.jumart,
+            mimosaceae: mimosaceae ?? self.mimosaceae,
+            mollicrush: mollicrush ?? self.mollicrush,
+            nedder: nedder ?? self.nedder,
+            retinasphalt: retinasphalt ?? self.retinasphalt,
+            sough: sough ?? self.sough,
+            steading: steading ?? self.steading,
+            theopaschitism: theopaschitism ?? self.theopaschitism,
+            undurableness: undurableness ?? self.undurableness,
+            unmingleable: unmingleable ?? self.unmingleable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Retrocervical: Codable, Sendable {
+    case integer(Int)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Retrocervical.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Retrocervical"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Revert: Codable, Sendable {
+    case bool(Bool)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Revert.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Revert"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum RewriteElement: Codable, Sendable {
+    case double(Double)
+    case nullArray([JSONNull?])
+    case rewriteClass(RewriteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(RewriteClass.self) {
+            self = .rewriteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(RewriteElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for RewriteElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .rewriteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - RewriteClass
+struct RewriteClass: Codable, Sendable {
+    let accountancy: JSONNull?
+    let cacotrophic: JSONNull?
+    let contest: JSONNull?
+    let couthily: JSONNull?
+    let falculate: JSONNull?
+    let foreseize: JSONNull?
+    let hyades: JSONNull?
+    let lemnad: JSONNull?
+    let monotheistically: JSONNull?
+    let nonflying: JSONNull?
+    let ptenoglossa: JSONNull?
+    let repatch: JSONNull?
+    let rodman: JSONNull?
+    let strung: JSONNull?
+    let titmal: JSONNull?
+    let twalpennyworth: JSONNull?
+    let unblamable: JSONNull?
+    let vertical: JSONNull?
+    let whiggification: JSONNull?
+    let yardman: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case accountancy = "accountancy"
+        case cacotrophic = "cacotrophic"
+        case contest = "contest"
+        case couthily = "couthily"
+        case falculate = "falculate"
+        case foreseize = "foreseize"
+        case hyades = "Hyades"
+        case lemnad = "lemnad"
+        case monotheistically = "monotheistically"
+        case nonflying = "nonflying"
+        case ptenoglossa = "Ptenoglossa"
+        case repatch = "repatch"
+        case rodman = "rodman"
+        case strung = "strung"
+        case titmal = "titmal"
+        case twalpennyworth = "twalpennyworth"
+        case unblamable = "unblamable"
+        case vertical = "vertical"
+        case whiggification = "Whiggification"
+        case yardman = "yardman"
+    }
+}
+
+// MARK: RewriteClass convenience initializers and mutators
+
+extension RewriteClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(RewriteClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        accountancy: JSONNull?? = nil,
+        cacotrophic: JSONNull?? = nil,
+        contest: JSONNull?? = nil,
+        couthily: JSONNull?? = nil,
+        falculate: JSONNull?? = nil,
+        foreseize: JSONNull?? = nil,
+        hyades: JSONNull?? = nil,
+        lemnad: JSONNull?? = nil,
+        monotheistically: JSONNull?? = nil,
+        nonflying: JSONNull?? = nil,
+        ptenoglossa: JSONNull?? = nil,
+        repatch: JSONNull?? = nil,
+        rodman: JSONNull?? = nil,
+        strung: JSONNull?? = nil,
+        titmal: JSONNull?? = nil,
+        twalpennyworth: JSONNull?? = nil,
+        unblamable: JSONNull?? = nil,
+        vertical: JSONNull?? = nil,
+        whiggification: JSONNull?? = nil,
+        yardman: JSONNull?? = nil
+    ) -> RewriteClass {
+        return RewriteClass(
+            accountancy: accountancy ?? self.accountancy,
+            cacotrophic: cacotrophic ?? self.cacotrophic,
+            contest: contest ?? self.contest,
+            couthily: couthily ?? self.couthily,
+            falculate: falculate ?? self.falculate,
+            foreseize: foreseize ?? self.foreseize,
+            hyades: hyades ?? self.hyades,
+            lemnad: lemnad ?? self.lemnad,
+            monotheistically: monotheistically ?? self.monotheistically,
+            nonflying: nonflying ?? self.nonflying,
+            ptenoglossa: ptenoglossa ?? self.ptenoglossa,
+            repatch: repatch ?? self.repatch,
+            rodman: rodman ?? self.rodman,
+            strung: strung ?? self.strung,
+            titmal: titmal ?? self.titmal,
+            twalpennyworth: twalpennyworth ?? self.twalpennyworth,
+            unblamable: unblamable ?? self.unblamable,
+            vertical: vertical ?? self.vertical,
+            whiggification: whiggification ?? self.whiggification,
+            yardman: yardman ?? self.yardman
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Saccoderm: Codable, Sendable {
+    case integerArray([Int])
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Saccoderm.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Saccoderm"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum SantirElement: Codable, Sendable {
+    case double(Double)
+    case santirClass(SantirClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(SantirClass.self) {
+            self = .santirClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(SantirElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for SantirElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .santirClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - SantirClass
+struct SantirClass: Codable, Sendable {
+    let admiredly: JSONNull?
+    let demicaponier: JSONNull?
+    let epitympanic: JSONNull?
+    let investitor: JSONNull?
+    let lupiform: JSONNull?
+    let monoflagellate: JSONNull?
+    let paleoethnic: JSONNull?
+    let prediscountable: JSONNull?
+    let rhetoricals: JSONNull?
+    let roomth: JSONNull?
+    let saccharose: JSONNull?
+    let septonasal: JSONNull?
+    let serpenticide: JSONNull?
+    let setarious: JSONNull?
+    let spaework: JSONNull?
+    let stylite: JSONNull?
+    let suessiones: JSONNull?
+    let timelily: JSONNull?
+    let unprofaned: JSONNull?
+    let vorticular: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case admiredly = "admiredly"
+        case demicaponier = "demicaponier"
+        case epitympanic = "epitympanic"
+        case investitor = "investitor"
+        case lupiform = "lupiform"
+        case monoflagellate = "monoflagellate"
+        case paleoethnic = "paleoethnic"
+        case prediscountable = "prediscountable"
+        case rhetoricals = "rhetoricals"
+        case roomth = "roomth"
+        case saccharose = "saccharose"
+        case septonasal = "septonasal"
+        case serpenticide = "serpenticide"
+        case setarious = "setarious"
+        case spaework = "spaework"
+        case stylite = "stylite"
+        case suessiones = "Suessiones"
+        case timelily = "timelily"
+        case unprofaned = "unprofaned"
+        case vorticular = "vorticular"
+    }
+}
+
+// MARK: SantirClass convenience initializers and mutators
+
+extension SantirClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(SantirClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        admiredly: JSONNull?? = nil,
+        demicaponier: JSONNull?? = nil,
+        epitympanic: JSONNull?? = nil,
+        investitor: JSONNull?? = nil,
+        lupiform: JSONNull?? = nil,
+        monoflagellate: JSONNull?? = nil,
+        paleoethnic: JSONNull?? = nil,
+        prediscountable: JSONNull?? = nil,
+        rhetoricals: JSONNull?? = nil,
+        roomth: JSONNull?? = nil,
+        saccharose: JSONNull?? = nil,
+        septonasal: JSONNull?? = nil,
+        serpenticide: JSONNull?? = nil,
+        setarious: JSONNull?? = nil,
+        spaework: JSONNull?? = nil,
+        stylite: JSONNull?? = nil,
+        suessiones: JSONNull?? = nil,
+        timelily: JSONNull?? = nil,
+        unprofaned: JSONNull?? = nil,
+        vorticular: JSONNull?? = nil
+    ) -> SantirClass {
+        return SantirClass(
+            admiredly: admiredly ?? self.admiredly,
+            demicaponier: demicaponier ?? self.demicaponier,
+            epitympanic: epitympanic ?? self.epitympanic,
+            investitor: investitor ?? self.investitor,
+            lupiform: lupiform ?? self.lupiform,
+            monoflagellate: monoflagellate ?? self.monoflagellate,
+            paleoethnic: paleoethnic ?? self.paleoethnic,
+            prediscountable: prediscountable ?? self.prediscountable,
+            rhetoricals: rhetoricals ?? self.rhetoricals,
+            roomth: roomth ?? self.roomth,
+            saccharose: saccharose ?? self.saccharose,
+            septonasal: septonasal ?? self.septonasal,
+            serpenticide: serpenticide ?? self.serpenticide,
+            setarious: setarious ?? self.setarious,
+            spaework: spaework ?? self.spaework,
+            stylite: stylite ?? self.stylite,
+            suessiones: suessiones ?? self.suessiones,
+            timelily: timelily ?? self.timelily,
+            unprofaned: unprofaned ?? self.unprofaned,
+            vorticular: vorticular ?? self.vorticular
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Saprophilous: Codable, Sendable {
+    case integerMap([String: Int])
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Saprophilous.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Saprophilous"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum SaxtenElement: Codable, Sendable {
+    case saxtenClass(SaxtenClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(SaxtenClass.self) {
+            self = .saxtenClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(SaxtenElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for SaxtenElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .saxtenClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - SaxtenClass
+struct SaxtenClass: Codable, Sendable {
+    let algarrobilla: JSONNull?
+    let bowgrace: JSONNull?
+    let catharticalness: Double?
+    let centaurid: JSONNull?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let flix: JSONNull?
+    let germanely: JSONNull?
+    let homocerc: Bool?
+    let inhume: JSONNull?
+    let lepidote: JSONNull?
+    let megalochirous: JSONNull?
+    let ninepenny: JSONNull?
+    let nonbookish: JSONNull?
+    let nondeist: JSONNull?
+    let nymphaeaceous: JSONNull?
+    let parietofrontal: JSONNull?
+    let sancyite: JSONNull?
+    let subjectivist: JSONNull?
+    let tibiad: JSONNull?
+    let transonic: JSONNull?
+    let tripetalous: JSONNull?
+    let trunchman: JSONNull?
+    let urger: JSONNull?
+    let withdrawnness: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case algarrobilla = "algarrobilla"
+        case bowgrace = "bowgrace"
+        case catharticalness = "catharticalness"
+        case centaurid = "Centaurid"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case flix = "flix"
+        case germanely = "germanely"
+        case homocerc = "homocerc"
+        case inhume = "inhume"
+        case lepidote = "lepidote"
+        case megalochirous = "megalochirous"
+        case ninepenny = "ninepenny"
+        case nonbookish = "nonbookish"
+        case nondeist = "nondeist"
+        case nymphaeaceous = "nymphaeaceous"
+        case parietofrontal = "parietofrontal"
+        case sancyite = "sancyite"
+        case subjectivist = "subjectivist"
+        case tibiad = "tibiad"
+        case transonic = "transonic"
+        case tripetalous = "tripetalous"
+        case trunchman = "trunchman"
+        case urger = "urger"
+        case withdrawnness = "withdrawnness"
+    }
+}
+
+// MARK: SaxtenClass convenience initializers and mutators
+
+extension SaxtenClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(SaxtenClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        algarrobilla: JSONNull?? = nil,
+        bowgrace: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        centaurid: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        flix: JSONNull?? = nil,
+        germanely: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        inhume: JSONNull?? = nil,
+        lepidote: JSONNull?? = nil,
+        megalochirous: JSONNull?? = nil,
+        ninepenny: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        nondeist: JSONNull?? = nil,
+        nymphaeaceous: JSONNull?? = nil,
+        parietofrontal: JSONNull?? = nil,
+        sancyite: JSONNull?? = nil,
+        subjectivist: JSONNull?? = nil,
+        tibiad: JSONNull?? = nil,
+        transonic: JSONNull?? = nil,
+        tripetalous: JSONNull?? = nil,
+        trunchman: JSONNull?? = nil,
+        urger: JSONNull?? = nil,
+        withdrawnness: JSONNull?? = nil
+    ) -> SaxtenClass {
+        return SaxtenClass(
+            algarrobilla: algarrobilla ?? self.algarrobilla,
+            bowgrace: bowgrace ?? self.bowgrace,
+            catharticalness: catharticalness ?? self.catharticalness,
+            centaurid: centaurid ?? self.centaurid,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            flix: flix ?? self.flix,
+            germanely: germanely ?? self.germanely,
+            homocerc: homocerc ?? self.homocerc,
+            inhume: inhume ?? self.inhume,
+            lepidote: lepidote ?? self.lepidote,
+            megalochirous: megalochirous ?? self.megalochirous,
+            ninepenny: ninepenny ?? self.ninepenny,
+            nonbookish: nonbookish ?? self.nonbookish,
+            nondeist: nondeist ?? self.nondeist,
+            nymphaeaceous: nymphaeaceous ?? self.nymphaeaceous,
+            parietofrontal: parietofrontal ?? self.parietofrontal,
+            sancyite: sancyite ?? self.sancyite,
+            subjectivist: subjectivist ?? self.subjectivist,
+            tibiad: tibiad ?? self.tibiad,
+            transonic: transonic ?? self.transonic,
+            tripetalous: tripetalous ?? self.tripetalous,
+            trunchman: trunchman ?? self.trunchman,
+            urger: urger ?? self.urger,
+            withdrawnness: withdrawnness ?? self.withdrawnness
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Scatty
+struct Scatty: Codable, Sendable {
+    let aeriferous: JSONNull?
+    let antical: JSONNull?
+    let antighostism: JSONNull?
+    let arcanum: JSONNull?
+    let autotrophy: JSONNull?
+    let baronial: JSONNull?
+    let caffeine: JSONNull?
+    let gorgoniacean: JSONNull?
+    let heroical: JSONNull?
+    let hydropical: JSONNull?
+    let mechanology: JSONNull?
+    let musicopoetic: JSONNull?
+    let officiality: JSONNull?
+    let oftentimes: JSONNull?
+    let ophthalmotonometer: JSONNull?
+    let reflectively: JSONNull?
+    let springer: JSONNull?
+    let tabasco: JSONNull?
+    let teleianthous: JSONNull?
+    let uncombated: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case aeriferous = "aeriferous"
+        case antical = "antical"
+        case antighostism = "antighostism"
+        case arcanum = "arcanum"
+        case autotrophy = "autotrophy"
+        case baronial = "baronial"
+        case caffeine = "caffeine"
+        case gorgoniacean = "gorgoniacean"
+        case heroical = "heroical"
+        case hydropical = "hydropical"
+        case mechanology = "mechanology"
+        case musicopoetic = "musicopoetic"
+        case officiality = "officiality"
+        case oftentimes = "oftentimes"
+        case ophthalmotonometer = "ophthalmotonometer"
+        case reflectively = "reflectively"
+        case springer = "springer"
+        case tabasco = "Tabasco"
+        case teleianthous = "teleianthous"
+        case uncombated = "uncombated"
+    }
+}
+
+// MARK: Scatty convenience initializers and mutators
+
+extension Scatty {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Scatty.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        aeriferous: JSONNull?? = nil,
+        antical: JSONNull?? = nil,
+        antighostism: JSONNull?? = nil,
+        arcanum: JSONNull?? = nil,
+        autotrophy: JSONNull?? = nil,
+        baronial: JSONNull?? = nil,
+        caffeine: JSONNull?? = nil,
+        gorgoniacean: JSONNull?? = nil,
+        heroical: JSONNull?? = nil,
+        hydropical: JSONNull?? = nil,
+        mechanology: JSONNull?? = nil,
+        musicopoetic: JSONNull?? = nil,
+        officiality: JSONNull?? = nil,
+        oftentimes: JSONNull?? = nil,
+        ophthalmotonometer: JSONNull?? = nil,
+        reflectively: JSONNull?? = nil,
+        springer: JSONNull?? = nil,
+        tabasco: JSONNull?? = nil,
+        teleianthous: JSONNull?? = nil,
+        uncombated: JSONNull?? = nil
+    ) -> Scatty {
+        return Scatty(
+            aeriferous: aeriferous ?? self.aeriferous,
+            antical: antical ?? self.antical,
+            antighostism: antighostism ?? self.antighostism,
+            arcanum: arcanum ?? self.arcanum,
+            autotrophy: autotrophy ?? self.autotrophy,
+            baronial: baronial ?? self.baronial,
+            caffeine: caffeine ?? self.caffeine,
+            gorgoniacean: gorgoniacean ?? self.gorgoniacean,
+            heroical: heroical ?? self.heroical,
+            hydropical: hydropical ?? self.hydropical,
+            mechanology: mechanology ?? self.mechanology,
+            musicopoetic: musicopoetic ?? self.musicopoetic,
+            officiality: officiality ?? self.officiality,
+            oftentimes: oftentimes ?? self.oftentimes,
+            ophthalmotonometer: ophthalmotonometer ?? self.ophthalmotonometer,
+            reflectively: reflectively ?? self.reflectively,
+            springer: springer ?? self.springer,
+            tabasco: tabasco ?? self.tabasco,
+            teleianthous: teleianthous ?? self.teleianthous,
+            uncombated: uncombated ?? self.uncombated
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Scoffer: Codable, Sendable {
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Scoffer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Scoffer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Scrampum: Codable, Sendable {
+    case bool(Bool)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Scrampum.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Scrampum"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Serpentinic: Codable, Sendable {
+    case double(Double)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Serpentinic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Serpentinic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Shadowable: Codable, Sendable {
+    case bool(Bool)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Shadowable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Shadowable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum SisteringElement: Codable, Sendable {
+    case integer(Int)
+    case nullArray([JSONNull?])
+    case sisteringClass(SisteringClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(SisteringClass.self) {
+            self = .sisteringClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(SisteringElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for SisteringElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .sisteringClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - SisteringClass
+struct SisteringClass: Codable, Sendable {
+    let amphicarpic: JSONNull?
+    let chianti: JSONNull?
+    let frigorific: JSONNull?
+    let haplomi: JSONNull?
+    let hyperkinesis: JSONNull?
+    let laudable: JSONNull?
+    let madwoman: JSONNull?
+    let maimedly: JSONNull?
+    let micropterygidae: JSONNull?
+    let microrhabdus: JSONNull?
+    let nondense: JSONNull?
+    let phlebemphraxis: JSONNull?
+    let redsear: JSONNull?
+    let schismatical: JSONNull?
+    let tartryl: JSONNull?
+    let unabhorred: JSONNull?
+    let undeliberateness: JSONNull?
+    let unmixable: JSONNull?
+    let untruckling: JSONNull?
+    let vineal: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amphicarpic = "amphicarpic"
+        case chianti = "Chianti"
+        case frigorific = "frigorific"
+        case haplomi = "Haplomi"
+        case hyperkinesis = "hyperkinesis"
+        case laudable = "laudable"
+        case madwoman = "madwoman"
+        case maimedly = "maimedly"
+        case micropterygidae = "Micropterygidae"
+        case microrhabdus = "microrhabdus"
+        case nondense = "nondense"
+        case phlebemphraxis = "phlebemphraxis"
+        case redsear = "redsear"
+        case schismatical = "schismatical"
+        case tartryl = "tartryl"
+        case unabhorred = "unabhorred"
+        case undeliberateness = "undeliberateness"
+        case unmixable = "unmixable"
+        case untruckling = "untruckling"
+        case vineal = "vineal"
+    }
+}
+
+// MARK: SisteringClass convenience initializers and mutators
+
+extension SisteringClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(SisteringClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amphicarpic: JSONNull?? = nil,
+        chianti: JSONNull?? = nil,
+        frigorific: JSONNull?? = nil,
+        haplomi: JSONNull?? = nil,
+        hyperkinesis: JSONNull?? = nil,
+        laudable: JSONNull?? = nil,
+        madwoman: JSONNull?? = nil,
+        maimedly: JSONNull?? = nil,
+        micropterygidae: JSONNull?? = nil,
+        microrhabdus: JSONNull?? = nil,
+        nondense: JSONNull?? = nil,
+        phlebemphraxis: JSONNull?? = nil,
+        redsear: JSONNull?? = nil,
+        schismatical: JSONNull?? = nil,
+        tartryl: JSONNull?? = nil,
+        unabhorred: JSONNull?? = nil,
+        undeliberateness: JSONNull?? = nil,
+        unmixable: JSONNull?? = nil,
+        untruckling: JSONNull?? = nil,
+        vineal: JSONNull?? = nil
+    ) -> SisteringClass {
+        return SisteringClass(
+            amphicarpic: amphicarpic ?? self.amphicarpic,
+            chianti: chianti ?? self.chianti,
+            frigorific: frigorific ?? self.frigorific,
+            haplomi: haplomi ?? self.haplomi,
+            hyperkinesis: hyperkinesis ?? self.hyperkinesis,
+            laudable: laudable ?? self.laudable,
+            madwoman: madwoman ?? self.madwoman,
+            maimedly: maimedly ?? self.maimedly,
+            micropterygidae: micropterygidae ?? self.micropterygidae,
+            microrhabdus: microrhabdus ?? self.microrhabdus,
+            nondense: nondense ?? self.nondense,
+            phlebemphraxis: phlebemphraxis ?? self.phlebemphraxis,
+            redsear: redsear ?? self.redsear,
+            schismatical: schismatical ?? self.schismatical,
+            tartryl: tartryl ?? self.tartryl,
+            unabhorred: unabhorred ?? self.unabhorred,
+            undeliberateness: undeliberateness ?? self.undeliberateness,
+            unmixable: unmixable ?? self.unmixable,
+            untruckling: untruckling ?? self.untruckling,
+            vineal: vineal ?? self.vineal
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Staghunting
+struct Staghunting: Codable, Sendable {
+    let calorimetric: Int?
+    let canid: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let ditriglyphic: Int?
+    let floriferousness: Int?
+    let gamelike: Int?
+    let grig: Int?
+    let homocerc: Bool?
+    let interloan: Int?
+    let lithotomy: Int?
+    let loric: Int?
+    let membranocoriaceous: Int?
+    let membranogenic: Int?
+    let nonbookish: JSONNull?
+    let overtrump: Int?
+    let scotino: Int?
+    let seasonable: Int?
+    let sephen: Int?
+    let stigmarioid: Int?
+    let tired: Int?
+    let trifid: Int?
+    let undefeatedly: Int?
+    let ungirlish: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case calorimetric = "calorimetric"
+        case canid = "canid"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case ditriglyphic = "ditriglyphic"
+        case floriferousness = "floriferousness"
+        case gamelike = "gamelike"
+        case grig = "grig"
+        case homocerc = "homocerc"
+        case interloan = "interloan"
+        case lithotomy = "lithotomy"
+        case loric = "loric"
+        case membranocoriaceous = "membranocoriaceous"
+        case membranogenic = "membranogenic"
+        case nonbookish = "nonbookish"
+        case overtrump = "overtrump"
+        case scotino = "scotino"
+        case seasonable = "seasonable"
+        case sephen = "sephen"
+        case stigmarioid = "stigmarioid"
+        case tired = "tired"
+        case trifid = "trifid"
+        case undefeatedly = "undefeatedly"
+        case ungirlish = "ungirlish"
+    }
+}
+
+// MARK: Staghunting convenience initializers and mutators
+
+extension Staghunting {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(Staghunting.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        calorimetric: Int?? = nil,
+        canid: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        ditriglyphic: Int?? = nil,
+        floriferousness: Int?? = nil,
+        gamelike: Int?? = nil,
+        grig: Int?? = nil,
+        homocerc: Bool?? = nil,
+        interloan: Int?? = nil,
+        lithotomy: Int?? = nil,
+        loric: Int?? = nil,
+        membranocoriaceous: Int?? = nil,
+        membranogenic: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        overtrump: Int?? = nil,
+        scotino: Int?? = nil,
+        seasonable: Int?? = nil,
+        sephen: Int?? = nil,
+        stigmarioid: Int?? = nil,
+        tired: Int?? = nil,
+        trifid: Int?? = nil,
+        undefeatedly: Int?? = nil,
+        ungirlish: Int?? = nil
+    ) -> Staghunting {
+        return Staghunting(
+            calorimetric: calorimetric ?? self.calorimetric,
+            canid: canid ?? self.canid,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ditriglyphic: ditriglyphic ?? self.ditriglyphic,
+            floriferousness: floriferousness ?? self.floriferousness,
+            gamelike: gamelike ?? self.gamelike,
+            grig: grig ?? self.grig,
+            homocerc: homocerc ?? self.homocerc,
+            interloan: interloan ?? self.interloan,
+            lithotomy: lithotomy ?? self.lithotomy,
+            loric: loric ?? self.loric,
+            membranocoriaceous: membranocoriaceous ?? self.membranocoriaceous,
+            membranogenic: membranogenic ?? self.membranogenic,
+            nonbookish: nonbookish ?? self.nonbookish,
+            overtrump: overtrump ?? self.overtrump,
+            scotino: scotino ?? self.scotino,
+            seasonable: seasonable ?? self.seasonable,
+            sephen: sephen ?? self.sephen,
+            stigmarioid: stigmarioid ?? self.stigmarioid,
+            tired: tired ?? self.tired,
+            trifid: trifid ?? self.trifid,
+            undefeatedly: undefeatedly ?? self.undefeatedly,
+            ungirlish: ungirlish ?? self.ungirlish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Stagmometer: Codable, Sendable {
+    case string(String)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Stagmometer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Stagmometer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .string(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Stimulability: Codable, Sendable {
+    case bool(Bool)
+    case integer(Int)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Stimulability.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Stimulability"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Strangleable: Codable, Sendable {
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Strangleable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Strangleable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum StrenuosityElement: Codable, Sendable {
+    case nullArray([JSONNull?])
+    case strenuosityClass(StrenuosityClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(StrenuosityClass.self) {
+            self = .strenuosityClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(StrenuosityElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for StrenuosityElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .strenuosityClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - StrenuosityClass
+struct StrenuosityClass: Codable, Sendable {
+    let bliss: Int?
+    let buccate: Int?
+    let bulletproof: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let crumblingness: Int?
+    let disdiapason: String?
+    let engagedly: Int?
+    let fightable: Int?
+    let hoariness: Int?
+    let homocerc: Bool?
+    let hypopodium: Int?
+    let luxurist: Int?
+    let mechanician: Int?
+    let nonbookish: JSONNull?
+    let onopordon: Int?
+    let podgily: Int?
+    let reformableness: Int?
+    let scatterbrains: Int?
+    let seminuria: Int?
+    let sodomite: Int?
+    let tramp: Int?
+    let undueness: Int?
+    let worthily: Int?
+    let yankeeist: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case bliss = "bliss"
+        case buccate = "buccate"
+        case bulletproof = "bulletproof"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case crumblingness = "crumblingness"
+        case disdiapason = "disdiapason"
+        case engagedly = "engagedly"
+        case fightable = "fightable"
+        case hoariness = "hoariness"
+        case homocerc = "homocerc"
+        case hypopodium = "hypopodium"
+        case luxurist = "luxurist"
+        case mechanician = "mechanician"
+        case nonbookish = "nonbookish"
+        case onopordon = "Onopordon"
+        case podgily = "podgily"
+        case reformableness = "reformableness"
+        case scatterbrains = "scatterbrains"
+        case seminuria = "seminuria"
+        case sodomite = "Sodomite"
+        case tramp = "tramp"
+        case undueness = "undueness"
+        case worthily = "worthily"
+        case yankeeist = "Yankeeist"
+    }
+}
+
+// MARK: StrenuosityClass convenience initializers and mutators
+
+extension StrenuosityClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(StrenuosityClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        bliss: Int?? = nil,
+        buccate: Int?? = nil,
+        bulletproof: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        crumblingness: Int?? = nil,
+        disdiapason: String?? = nil,
+        engagedly: Int?? = nil,
+        fightable: Int?? = nil,
+        hoariness: Int?? = nil,
+        homocerc: Bool?? = nil,
+        hypopodium: Int?? = nil,
+        luxurist: Int?? = nil,
+        mechanician: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        onopordon: Int?? = nil,
+        podgily: Int?? = nil,
+        reformableness: Int?? = nil,
+        scatterbrains: Int?? = nil,
+        seminuria: Int?? = nil,
+        sodomite: Int?? = nil,
+        tramp: Int?? = nil,
+        undueness: Int?? = nil,
+        worthily: Int?? = nil,
+        yankeeist: Int?? = nil
+    ) -> StrenuosityClass {
+        return StrenuosityClass(
+            bliss: bliss ?? self.bliss,
+            buccate: buccate ?? self.buccate,
+            bulletproof: bulletproof ?? self.bulletproof,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            crumblingness: crumblingness ?? self.crumblingness,
+            disdiapason: disdiapason ?? self.disdiapason,
+            engagedly: engagedly ?? self.engagedly,
+            fightable: fightable ?? self.fightable,
+            hoariness: hoariness ?? self.hoariness,
+            homocerc: homocerc ?? self.homocerc,
+            hypopodium: hypopodium ?? self.hypopodium,
+            luxurist: luxurist ?? self.luxurist,
+            mechanician: mechanician ?? self.mechanician,
+            nonbookish: nonbookish ?? self.nonbookish,
+            onopordon: onopordon ?? self.onopordon,
+            podgily: podgily ?? self.podgily,
+            reformableness: reformableness ?? self.reformableness,
+            scatterbrains: scatterbrains ?? self.scatterbrains,
+            seminuria: seminuria ?? self.seminuria,
+            sodomite: sodomite ?? self.sodomite,
+            tramp: tramp ?? self.tramp,
+            undueness: undueness ?? self.undueness,
+            worthily: worthily ?? self.worthily,
+            yankeeist: yankeeist ?? self.yankeeist
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Tabaxir: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Tabaxir.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Tabaxir"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Talpiform: Codable, Sendable {
+    case double(Double)
+    case quebrachineClass(QuebrachineClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Talpiform.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Talpiform"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Thwack: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+    case quebrachineClass(QuebrachineClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Thwack.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Thwack"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Tortricine: Codable, Sendable {
+    case quebrachineClass(QuebrachineClass)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Tortricine.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Tortricine"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum TruantcyElement: Codable, Sendable {
+    case bool(Bool)
+    case truantcyClass(TruantcyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(TruantcyClass.self) {
+            self = .truantcyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(TruantcyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for TruantcyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .truantcyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - TruantcyClass
+struct TruantcyClass: Codable, Sendable {
+    let alfiona: JSONNull?
+    let ascaridiasis: JSONNull?
+    let bungey: JSONNull?
+    let catharticalness: Double?
+    let ceroxyle: JSONNull?
+    let chirotherium: Int?
+    let chorology: JSONNull?
+    let disdiapason: String?
+    let enmarble: JSONNull?
+    let epeira: JSONNull?
+    let eurylaimi: JSONNull?
+    let germination: JSONNull?
+    let hallelujah: JSONNull?
+    let homocerc: Bool?
+    let lev: JSONNull?
+    let mouthing: JSONNull?
+    let nonbookish: JSONNull?
+    let philliloo: JSONNull?
+    let planetal: JSONNull?
+    let poney: JSONNull?
+    let punctualist: JSONNull?
+    let returnlessly: JSONNull?
+    let skelder: JSONNull?
+    let windwaywardly: JSONNull?
+    let yuman: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case alfiona = "alfiona"
+        case ascaridiasis = "ascaridiasis"
+        case bungey = "bungey"
+        case catharticalness = "catharticalness"
+        case ceroxyle = "ceroxyle"
+        case chirotherium = "Chirotherium"
+        case chorology = "chorology"
+        case disdiapason = "disdiapason"
+        case enmarble = "enmarble"
+        case epeira = "Epeira"
+        case eurylaimi = "Eurylaimi"
+        case germination = "germination"
+        case hallelujah = "hallelujah"
+        case homocerc = "homocerc"
+        case lev = "lev"
+        case mouthing = "mouthing"
+        case nonbookish = "nonbookish"
+        case philliloo = "philliloo"
+        case planetal = "planetal"
+        case poney = "poney"
+        case punctualist = "punctualist"
+        case returnlessly = "returnlessly"
+        case skelder = "skelder"
+        case windwaywardly = "windwaywardly"
+        case yuman = "Yuman"
+    }
+}
+
+// MARK: TruantcyClass convenience initializers and mutators
+
+extension TruantcyClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(TruantcyClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        alfiona: JSONNull?? = nil,
+        ascaridiasis: JSONNull?? = nil,
+        bungey: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        ceroxyle: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        chorology: JSONNull?? = nil,
+        disdiapason: String?? = nil,
+        enmarble: JSONNull?? = nil,
+        epeira: JSONNull?? = nil,
+        eurylaimi: JSONNull?? = nil,
+        germination: JSONNull?? = nil,
+        hallelujah: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        lev: JSONNull?? = nil,
+        mouthing: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        philliloo: JSONNull?? = nil,
+        planetal: JSONNull?? = nil,
+        poney: JSONNull?? = nil,
+        punctualist: JSONNull?? = nil,
+        returnlessly: JSONNull?? = nil,
+        skelder: JSONNull?? = nil,
+        windwaywardly: JSONNull?? = nil,
+        yuman: JSONNull?? = nil
+    ) -> TruantcyClass {
+        return TruantcyClass(
+            alfiona: alfiona ?? self.alfiona,
+            ascaridiasis: ascaridiasis ?? self.ascaridiasis,
+            bungey: bungey ?? self.bungey,
+            catharticalness: catharticalness ?? self.catharticalness,
+            ceroxyle: ceroxyle ?? self.ceroxyle,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chorology: chorology ?? self.chorology,
+            disdiapason: disdiapason ?? self.disdiapason,
+            enmarble: enmarble ?? self.enmarble,
+            epeira: epeira ?? self.epeira,
+            eurylaimi: eurylaimi ?? self.eurylaimi,
+            germination: germination ?? self.germination,
+            hallelujah: hallelujah ?? self.hallelujah,
+            homocerc: homocerc ?? self.homocerc,
+            lev: lev ?? self.lev,
+            mouthing: mouthing ?? self.mouthing,
+            nonbookish: nonbookish ?? self.nonbookish,
+            philliloo: philliloo ?? self.philliloo,
+            planetal: planetal ?? self.planetal,
+            poney: poney ?? self.poney,
+            punctualist: punctualist ?? self.punctualist,
+            returnlessly: returnlessly ?? self.returnlessly,
+            skelder: skelder ?? self.skelder,
+            windwaywardly: windwaywardly ?? self.windwaywardly,
+            yuman: yuman ?? self.yuman
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Unbeginning: Codable, Sendable {
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unbeginning.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unbeginning"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Undesirability: Codable, Sendable {
+    case integerArray([Int])
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Undesirability.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Undesirability"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Unerasing: Codable, Sendable {
+    case integer(Int)
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unerasing.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unerasing"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Unguentarium: Codable, Sendable {
+    case integer(Int)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Unguentarium.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unguentarium"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum UnimpeachablyElement: Codable, Sendable {
+    case bool(Bool)
+    case unimpeachablyClass(UnimpeachablyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(UnimpeachablyClass.self) {
+            self = .unimpeachablyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(UnimpeachablyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for UnimpeachablyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .unimpeachablyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - UnimpeachablyClass
+struct UnimpeachablyClass: Codable, Sendable {
+    let acerin: Int?
+    let bobadil: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let chlorophylligenous: Int?
+    let conversational: Int?
+    let demiowl: Int?
+    let disdiapason: String?
+    let ectorhinal: Int?
+    let gamblesomeness: Int?
+    let homocerc: Bool?
+    let irrorate: Int?
+    let kindergartening: Int?
+    let lateritic: Int?
+    let mespil: Int?
+    let misconfiguration: Int?
+    let nonbookish: JSONNull?
+    let planometry: Int?
+    let quiina: Int?
+    let robert: Int?
+    let rot: Int?
+    let subcinctorium: Int?
+    let tussocker: Int?
+    let ultraproud: Int?
+    let unsuggestedness: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case acerin = "acerin"
+        case bobadil = "Bobadil"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case chlorophylligenous = "chlorophylligenous"
+        case conversational = "conversational"
+        case demiowl = "demiowl"
+        case disdiapason = "disdiapason"
+        case ectorhinal = "ectorhinal"
+        case gamblesomeness = "gamblesomeness"
+        case homocerc = "homocerc"
+        case irrorate = "irrorate"
+        case kindergartening = "kindergartening"
+        case lateritic = "lateritic"
+        case mespil = "mespil"
+        case misconfiguration = "misconfiguration"
+        case nonbookish = "nonbookish"
+        case planometry = "planometry"
+        case quiina = "Quiina"
+        case robert = "Robert"
+        case rot = "rot"
+        case subcinctorium = "subcinctorium"
+        case tussocker = "tussocker"
+        case ultraproud = "ultraproud"
+        case unsuggestedness = "unsuggestedness"
+    }
+}
+
+// MARK: UnimpeachablyClass convenience initializers and mutators
+
+extension UnimpeachablyClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(UnimpeachablyClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acerin: Int?? = nil,
+        bobadil: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        chlorophylligenous: Int?? = nil,
+        conversational: Int?? = nil,
+        demiowl: Int?? = nil,
+        disdiapason: String?? = nil,
+        ectorhinal: Int?? = nil,
+        gamblesomeness: Int?? = nil,
+        homocerc: Bool?? = nil,
+        irrorate: Int?? = nil,
+        kindergartening: Int?? = nil,
+        lateritic: Int?? = nil,
+        mespil: Int?? = nil,
+        misconfiguration: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        planometry: Int?? = nil,
+        quiina: Int?? = nil,
+        robert: Int?? = nil,
+        rot: Int?? = nil,
+        subcinctorium: Int?? = nil,
+        tussocker: Int?? = nil,
+        ultraproud: Int?? = nil,
+        unsuggestedness: Int?? = nil
+    ) -> UnimpeachablyClass {
+        return UnimpeachablyClass(
+            acerin: acerin ?? self.acerin,
+            bobadil: bobadil ?? self.bobadil,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chlorophylligenous: chlorophylligenous ?? self.chlorophylligenous,
+            conversational: conversational ?? self.conversational,
+            demiowl: demiowl ?? self.demiowl,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ectorhinal: ectorhinal ?? self.ectorhinal,
+            gamblesomeness: gamblesomeness ?? self.gamblesomeness,
+            homocerc: homocerc ?? self.homocerc,
+            irrorate: irrorate ?? self.irrorate,
+            kindergartening: kindergartening ?? self.kindergartening,
+            lateritic: lateritic ?? self.lateritic,
+            mespil: mespil ?? self.mespil,
+            misconfiguration: misconfiguration ?? self.misconfiguration,
+            nonbookish: nonbookish ?? self.nonbookish,
+            planometry: planometry ?? self.planometry,
+            quiina: quiina ?? self.quiina,
+            robert: robert ?? self.robert,
+            rot: rot ?? self.rot,
+            subcinctorium: subcinctorium ?? self.subcinctorium,
+            tussocker: tussocker ?? self.tussocker,
+            ultraproud: ultraproud ?? self.ultraproud,
+            unsuggestedness: unsuggestedness ?? self.unsuggestedness
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Unmortgaged: Codable, Sendable {
+    case double(Double)
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Unmortgaged.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unmortgaged"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Unobstructed: Codable, Sendable {
+    case integer(Int)
+    case quebrachineClass(QuebrachineClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Unobstructed.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unobstructed"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Unreceptivity: Codable, Sendable {
+    case integer(Int)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unreceptivity.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unreceptivity"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Unsatisfactoriness: Codable, Sendable {
+    case bool(Bool)
+    case integer(Int)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unsatisfactoriness.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unsatisfactoriness"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum UnstressedElement: Codable, Sendable {
+    case bool(Bool)
+    case string(String)
+    case unstressedClass(UnstressedClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(UnstressedClass.self) {
+            self = .unstressedClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(UnstressedElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for UnstressedElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .unstressedClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - UnstressedClass
+struct UnstressedClass: Codable, Sendable {
+    let alain: JSONNull?
+    let amphirhina: JSONNull?
+    let antimachinery: JSONNull?
+    let coldish: JSONNull?
+    let crantara: JSONNull?
+    let distinguishing: JSONNull?
+    let elytroposis: JSONNull?
+    let gentianwort: JSONNull?
+    let heliosis: JSONNull?
+    let instrumental: JSONNull?
+    let introinflection: JSONNull?
+    let kala: JSONNull?
+    let lincolnian: JSONNull?
+    let metad: JSONNull?
+    let sarcophilus: JSONNull?
+    let swingingly: JSONNull?
+    let unconformity: JSONNull?
+    let undecreed: JSONNull?
+    let venerable: JSONNull?
+    let vowellessness: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case alain = "Alain"
+        case amphirhina = "Amphirhina"
+        case antimachinery = "antimachinery"
+        case coldish = "coldish"
+        case crantara = "crantara"
+        case distinguishing = "distinguishing"
+        case elytroposis = "elytroposis"
+        case gentianwort = "gentianwort"
+        case heliosis = "heliosis"
+        case instrumental = "instrumental"
+        case introinflection = "introinflection"
+        case kala = "kala"
+        case lincolnian = "Lincolnian"
+        case metad = "metad"
+        case sarcophilus = "Sarcophilus"
+        case swingingly = "swingingly"
+        case unconformity = "unconformity"
+        case undecreed = "undecreed"
+        case venerable = "venerable"
+        case vowellessness = "vowellessness"
+    }
+}
+
+// MARK: UnstressedClass convenience initializers and mutators
+
+extension UnstressedClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(UnstressedClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        alain: JSONNull?? = nil,
+        amphirhina: JSONNull?? = nil,
+        antimachinery: JSONNull?? = nil,
+        coldish: JSONNull?? = nil,
+        crantara: JSONNull?? = nil,
+        distinguishing: JSONNull?? = nil,
+        elytroposis: JSONNull?? = nil,
+        gentianwort: JSONNull?? = nil,
+        heliosis: JSONNull?? = nil,
+        instrumental: JSONNull?? = nil,
+        introinflection: JSONNull?? = nil,
+        kala: JSONNull?? = nil,
+        lincolnian: JSONNull?? = nil,
+        metad: JSONNull?? = nil,
+        sarcophilus: JSONNull?? = nil,
+        swingingly: JSONNull?? = nil,
+        unconformity: JSONNull?? = nil,
+        undecreed: JSONNull?? = nil,
+        venerable: JSONNull?? = nil,
+        vowellessness: JSONNull?? = nil
+    ) -> UnstressedClass {
+        return UnstressedClass(
+            alain: alain ?? self.alain,
+            amphirhina: amphirhina ?? self.amphirhina,
+            antimachinery: antimachinery ?? self.antimachinery,
+            coldish: coldish ?? self.coldish,
+            crantara: crantara ?? self.crantara,
+            distinguishing: distinguishing ?? self.distinguishing,
+            elytroposis: elytroposis ?? self.elytroposis,
+            gentianwort: gentianwort ?? self.gentianwort,
+            heliosis: heliosis ?? self.heliosis,
+            instrumental: instrumental ?? self.instrumental,
+            introinflection: introinflection ?? self.introinflection,
+            kala: kala ?? self.kala,
+            lincolnian: lincolnian ?? self.lincolnian,
+            metad: metad ?? self.metad,
+            sarcophilus: sarcophilus ?? self.sarcophilus,
+            swingingly: swingingly ?? self.swingingly,
+            unconformity: unconformity ?? self.unconformity,
+            undecreed: undecreed ?? self.undecreed,
+            venerable: venerable ?? self.venerable,
+            vowellessness: vowellessness ?? self.vowellessness
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Untasked: Codable, Sendable {
+    case double(Double)
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Untasked.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Untasked"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Unvarying: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unvarying.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unvarying"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Vehemently: Codable, Sendable {
+    case bool(Bool)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Vehemently.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Vehemently"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Whitepot: Codable, Sendable {
+    case double(Double)
+    case quebrachineClass(QuebrachineClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Whitepot.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Whitepot"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum WrothyElement: Codable, Sendable {
+    case nullArray([JSONNull?])
+    case wrothyClass(WrothyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(WrothyClass.self) {
+            self = .wrothyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(WrothyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for WrothyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .wrothyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - WrothyClass
+struct WrothyClass: Codable, Sendable {
+    let aeschynanthus: JSONNull?
+    let aquiferous: JSONNull?
+    let cheapener: JSONNull?
+    let enumeration: JSONNull?
+    let ephesine: JSONNull?
+    let escadrille: JSONNull?
+    let estrous: JSONNull?
+    let interestedly: JSONNull?
+    let katakinetomer: JSONNull?
+    let mortification: JSONNull?
+    let morula: JSONNull?
+    let orthosymmetrical: JSONNull?
+    let overbark: JSONNull?
+    let politist: JSONNull?
+    let qualified: JSONNull?
+    let sphenomalar: JSONNull?
+    let throatful: JSONNull?
+    let transhumance: JSONNull?
+    let triandrian: JSONNull?
+    let unbooked: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case aeschynanthus = "Aeschynanthus"
+        case aquiferous = "aquiferous"
+        case cheapener = "cheapener"
+        case enumeration = "enumeration"
+        case ephesine = "Ephesine"
+        case escadrille = "escadrille"
+        case estrous = "estrous"
+        case interestedly = "interestedly"
+        case katakinetomer = "katakinetomer"
+        case mortification = "mortification"
+        case morula = "morula"
+        case orthosymmetrical = "orthosymmetrical"
+        case overbark = "overbark"
+        case politist = "politist"
+        case qualified = "qualified"
+        case sphenomalar = "sphenomalar"
+        case throatful = "throatful"
+        case transhumance = "transhumance"
+        case triandrian = "triandrian"
+        case unbooked = "unbooked"
+    }
+}
+
+// MARK: WrothyClass convenience initializers and mutators
+
+extension WrothyClass {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(WrothyClass.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        aeschynanthus: JSONNull?? = nil,
+        aquiferous: JSONNull?? = nil,
+        cheapener: JSONNull?? = nil,
+        enumeration: JSONNull?? = nil,
+        ephesine: JSONNull?? = nil,
+        escadrille: JSONNull?? = nil,
+        estrous: JSONNull?? = nil,
+        interestedly: JSONNull?? = nil,
+        katakinetomer: JSONNull?? = nil,
+        mortification: JSONNull?? = nil,
+        morula: JSONNull?? = nil,
+        orthosymmetrical: JSONNull?? = nil,
+        overbark: JSONNull?? = nil,
+        politist: JSONNull?? = nil,
+        qualified: JSONNull?? = nil,
+        sphenomalar: JSONNull?? = nil,
+        throatful: JSONNull?? = nil,
+        transhumance: JSONNull?? = nil,
+        triandrian: JSONNull?? = nil,
+        unbooked: JSONNull?? = nil
+    ) -> WrothyClass {
+        return WrothyClass(
+            aeschynanthus: aeschynanthus ?? self.aeschynanthus,
+            aquiferous: aquiferous ?? self.aquiferous,
+            cheapener: cheapener ?? self.cheapener,
+            enumeration: enumeration ?? self.enumeration,
+            ephesine: ephesine ?? self.ephesine,
+            escadrille: escadrille ?? self.escadrille,
+            estrous: estrous ?? self.estrous,
+            interestedly: interestedly ?? self.interestedly,
+            katakinetomer: katakinetomer ?? self.katakinetomer,
+            mortification: mortification ?? self.mortification,
+            morula: morula ?? self.morula,
+            orthosymmetrical: orthosymmetrical ?? self.orthosymmetrical,
+            overbark: overbark ?? self.overbark,
+            politist: politist ?? self.politist,
+            qualified: qualified ?? self.qualified,
+            sphenomalar: sphenomalar ?? self.sphenomalar,
+            throatful: throatful ?? self.throatful,
+            transhumance: transhumance ?? self.transhumance,
+            triandrian: triandrian ?? self.triandrian,
+            unbooked: unbooked ?? self.unbooked
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+final class JSONNull: Codable, Hashable, Sendable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    public func hash(into hasher: inout Hasher) {
+        hasher.combine(0)
+    }
+
+    public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/head/swift/test/inputs/json/priority/combinations4.json/sendable-true__struct-or-class-class--265b1fe2e96e/quicktype.swift b/head/swift/test/inputs/json/priority/combinations4.json/sendable-true__struct-or-class-class--265b1fe2e96e/quicktype.swift
new file mode 100644
index 0000000..eb336e8
--- /dev/null
+++ b/head/swift/test/inputs/json/priority/combinations4.json/sendable-true__struct-or-class-class--265b1fe2e96e/quicktype.swift
@@ -0,0 +1,4096 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+import Foundation
+
+// MARK: - TopLevel
+final class TopLevel: Codable, Sendable {
+    let protrusive: [Protrusive]
+    let pulpitism: [PulpitismElement]
+    let pyodermia: [PyodermiaElement]
+    let quebrachine: [QuebrachineElement]
+    let querier: [Querier]
+    let rebarbative: [Rebarbative]
+    let reimagine: [Reimagine]
+    let ressaut: Ressaut
+    let retrocervical: [Retrocervical]
+    let revert: [Revert]
+    let rewrite: [RewriteElement]
+    let saccoderm: [Saccoderm]
+    let santir: [SantirElement]
+    let saprophilous: [Saprophilous]
+    let saxten: [SaxtenElement]
+    let scatty: [Scatty?]
+    let scoffer: [Scoffer]
+    let scrampum: [Scrampum]
+    let semantic: Double
+    let serpentinic: [Serpentinic]
+    let shadowable: [Shadowable]
+    let sistering: [SisteringElement]
+    let staghunting: [Staghunting]
+    let stagmometer: [Stagmometer]
+    let stimulability: [Stimulability]
+    let strangleable: [Strangleable]
+    let strenuosity: [StrenuosityElement]
+    let tabaxir: [Tabaxir]
+    let talpiform: [Talpiform]
+    let thwack: [Thwack]
+    let to: [Double?]
+    let tortricine: [Tortricine]
+    let truantcy: [TruantcyElement]
+    let turgesce: [String]
+    let unbeginning: [Unbeginning]
+    let underdunged: [Double]
+    let undesirability: [Undesirability]
+    let unerasing: [Unerasing]
+    let unguentarium: [Unguentarium]
+    let unimpeachably: [UnimpeachablyElement]
+    let unmortgaged: [Unmortgaged]
+    let unobstructed: [Unobstructed]
+    let unreceptivity: [Unreceptivity]
+    let unsatisfactoriness: [Unsatisfactoriness]
+    let unsecurity: [Int]
+    let unstressed: [UnstressedElement]
+    let untasked: [Untasked]
+    let unvarying: [Unvarying]
+    let vehemently: [Vehemently]
+    let warriorship: [String: Bool]
+    let whitepot: [Whitepot]
+    let wrothy: [WrothyElement]
+
+    enum CodingKeys: String, CodingKey {
+        case protrusive = "protrusive"
+        case pulpitism = "pulpitism"
+        case pyodermia = "pyodermia"
+        case quebrachine = "quebrachine"
+        case querier = "querier"
+        case rebarbative = "rebarbative"
+        case reimagine = "reimagine"
+        case ressaut = "ressaut"
+        case retrocervical = "retrocervical"
+        case revert = "revert"
+        case rewrite = "rewrite"
+        case saccoderm = "saccoderm"
+        case santir = "santir"
+        case saprophilous = "saprophilous"
+        case saxten = "saxten"
+        case scatty = "scatty"
+        case scoffer = "scoffer"
+        case scrampum = "scrampum"
+        case semantic = "semantic"
+        case serpentinic = "serpentinic"
+        case shadowable = "shadowable"
+        case sistering = "sistering"
+        case staghunting = "staghunting"
+        case stagmometer = "stagmometer"
+        case stimulability = "stimulability"
+        case strangleable = "strangleable"
+        case strenuosity = "strenuosity"
+        case tabaxir = "tabaxir"
+        case talpiform = "talpiform"
+        case thwack = "thwack"
+        case to = "to"
+        case tortricine = "tortricine"
+        case truantcy = "truantcy"
+        case turgesce = "turgesce"
+        case unbeginning = "unbeginning"
+        case underdunged = "underdunged"
+        case undesirability = "undesirability"
+        case unerasing = "unerasing"
+        case unguentarium = "unguentarium"
+        case unimpeachably = "unimpeachably"
+        case unmortgaged = "unmortgaged"
+        case unobstructed = "unobstructed"
+        case unreceptivity = "unreceptivity"
+        case unsatisfactoriness = "unsatisfactoriness"
+        case unsecurity = "unsecurity"
+        case unstressed = "unstressed"
+        case untasked = "untasked"
+        case unvarying = "unvarying"
+        case vehemently = "vehemently"
+        case warriorship = "warriorship"
+        case whitepot = "whitepot"
+        case wrothy = "wrothy"
+    }
+
+    init(protrusive: [Protrusive], pulpitism: [PulpitismElement], pyodermia: [PyodermiaElement], quebrachine: [QuebrachineElement], querier: [Querier], rebarbative: [Rebarbative], reimagine: [Reimagine], ressaut: Ressaut, retrocervical: [Retrocervical], revert: [Revert], rewrite: [RewriteElement], saccoderm: [Saccoderm], santir: [SantirElement], saprophilous: [Saprophilous], saxten: [SaxtenElement], scatty: [Scatty?], scoffer: [Scoffer], scrampum: [Scrampum], semantic: Double, serpentinic: [Serpentinic], shadowable: [Shadowable], sistering: [SisteringElement], staghunting: [Staghunting], stagmometer: [Stagmometer], stimulability: [Stimulability], strangleable: [Strangleable], strenuosity: [StrenuosityElement], tabaxir: [Tabaxir], talpiform: [Talpiform], thwack: [Thwack], to: [Double?], tortricine: [Tortricine], truantcy: [TruantcyElement], turgesce: [String], unbeginning: [Unbeginning], underdunged: [Double], undesirability: [Undesirability], unerasing: [Unerasing], unguentarium: [Unguentarium], unimpeachably: [UnimpeachablyElement], unmortgaged: [Unmortgaged], unobstructed: [Unobstructed], unreceptivity: [Unreceptivity], unsatisfactoriness: [Unsatisfactoriness], unsecurity: [Int], unstressed: [UnstressedElement], untasked: [Untasked], unvarying: [Unvarying], vehemently: [Vehemently], warriorship: [String: Bool], whitepot: [Whitepot], wrothy: [WrothyElement]) {
+        self.protrusive = protrusive
+        self.pulpitism = pulpitism
+        self.pyodermia = pyodermia
+        self.quebrachine = quebrachine
+        self.querier = querier
+        self.rebarbative = rebarbative
+        self.reimagine = reimagine
+        self.ressaut = ressaut
+        self.retrocervical = retrocervical
+        self.revert = revert
+        self.rewrite = rewrite
+        self.saccoderm = saccoderm
+        self.santir = santir
+        self.saprophilous = saprophilous
+        self.saxten = saxten
+        self.scatty = scatty
+        self.scoffer = scoffer
+        self.scrampum = scrampum
+        self.semantic = semantic
+        self.serpentinic = serpentinic
+        self.shadowable = shadowable
+        self.sistering = sistering
+        self.staghunting = staghunting
+        self.stagmometer = stagmometer
+        self.stimulability = stimulability
+        self.strangleable = strangleable
+        self.strenuosity = strenuosity
+        self.tabaxir = tabaxir
+        self.talpiform = talpiform
+        self.thwack = thwack
+        self.to = to
+        self.tortricine = tortricine
+        self.truantcy = truantcy
+        self.turgesce = turgesce
+        self.unbeginning = unbeginning
+        self.underdunged = underdunged
+        self.undesirability = undesirability
+        self.unerasing = unerasing
+        self.unguentarium = unguentarium
+        self.unimpeachably = unimpeachably
+        self.unmortgaged = unmortgaged
+        self.unobstructed = unobstructed
+        self.unreceptivity = unreceptivity
+        self.unsatisfactoriness = unsatisfactoriness
+        self.unsecurity = unsecurity
+        self.unstressed = unstressed
+        self.untasked = untasked
+        self.unvarying = unvarying
+        self.vehemently = vehemently
+        self.warriorship = warriorship
+        self.whitepot = whitepot
+        self.wrothy = wrothy
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(TopLevel.self, from: data)
+        self.init(protrusive: me.protrusive, pulpitism: me.pulpitism, pyodermia: me.pyodermia, quebrachine: me.quebrachine, querier: me.querier, rebarbative: me.rebarbative, reimagine: me.reimagine, ressaut: me.ressaut, retrocervical: me.retrocervical, revert: me.revert, rewrite: me.rewrite, saccoderm: me.saccoderm, santir: me.santir, saprophilous: me.saprophilous, saxten: me.saxten, scatty: me.scatty, scoffer: me.scoffer, scrampum: me.scrampum, semantic: me.semantic, serpentinic: me.serpentinic, shadowable: me.shadowable, sistering: me.sistering, staghunting: me.staghunting, stagmometer: me.stagmometer, stimulability: me.stimulability, strangleable: me.strangleable, strenuosity: me.strenuosity, tabaxir: me.tabaxir, talpiform: me.talpiform, thwack: me.thwack, to: me.to, tortricine: me.tortricine, truantcy: me.truantcy, turgesce: me.turgesce, unbeginning: me.unbeginning, underdunged: me.underdunged, undesirability: me.undesirability, unerasing: me.unerasing, unguentarium: me.unguentarium, unimpeachably: me.unimpeachably, unmortgaged: me.unmortgaged, unobstructed: me.unobstructed, unreceptivity: me.unreceptivity, unsatisfactoriness: me.unsatisfactoriness, unsecurity: me.unsecurity, unstressed: me.unstressed, untasked: me.untasked, unvarying: me.unvarying, vehemently: me.vehemently, warriorship: me.warriorship, whitepot: me.whitepot, wrothy: me.wrothy)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        protrusive: [Protrusive]? = nil,
+        pulpitism: [PulpitismElement]? = nil,
+        pyodermia: [PyodermiaElement]? = nil,
+        quebrachine: [QuebrachineElement]? = nil,
+        querier: [Querier]? = nil,
+        rebarbative: [Rebarbative]? = nil,
+        reimagine: [Reimagine]? = nil,
+        ressaut: Ressaut? = nil,
+        retrocervical: [Retrocervical]? = nil,
+        revert: [Revert]? = nil,
+        rewrite: [RewriteElement]? = nil,
+        saccoderm: [Saccoderm]? = nil,
+        santir: [SantirElement]? = nil,
+        saprophilous: [Saprophilous]? = nil,
+        saxten: [SaxtenElement]? = nil,
+        scatty: [Scatty?]? = nil,
+        scoffer: [Scoffer]? = nil,
+        scrampum: [Scrampum]? = nil,
+        semantic: Double? = nil,
+        serpentinic: [Serpentinic]? = nil,
+        shadowable: [Shadowable]? = nil,
+        sistering: [SisteringElement]? = nil,
+        staghunting: [Staghunting]? = nil,
+        stagmometer: [Stagmometer]? = nil,
+        stimulability: [Stimulability]? = nil,
+        strangleable: [Strangleable]? = nil,
+        strenuosity: [StrenuosityElement]? = nil,
+        tabaxir: [Tabaxir]? = nil,
+        talpiform: [Talpiform]? = nil,
+        thwack: [Thwack]? = nil,
+        to: [Double?]? = nil,
+        tortricine: [Tortricine]? = nil,
+        truantcy: [TruantcyElement]? = nil,
+        turgesce: [String]? = nil,
+        unbeginning: [Unbeginning]? = nil,
+        underdunged: [Double]? = nil,
+        undesirability: [Undesirability]? = nil,
+        unerasing: [Unerasing]? = nil,
+        unguentarium: [Unguentarium]? = nil,
+        unimpeachably: [UnimpeachablyElement]? = nil,
+        unmortgaged: [Unmortgaged]? = nil,
+        unobstructed: [Unobstructed]? = nil,
+        unreceptivity: [Unreceptivity]? = nil,
+        unsatisfactoriness: [Unsatisfactoriness]? = nil,
+        unsecurity: [Int]? = nil,
+        unstressed: [UnstressedElement]? = nil,
+        untasked: [Untasked]? = nil,
+        unvarying: [Unvarying]? = nil,
+        vehemently: [Vehemently]? = nil,
+        warriorship: [String: Bool]? = nil,
+        whitepot: [Whitepot]? = nil,
+        wrothy: [WrothyElement]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            protrusive: protrusive ?? self.protrusive,
+            pulpitism: pulpitism ?? self.pulpitism,
+            pyodermia: pyodermia ?? self.pyodermia,
+            quebrachine: quebrachine ?? self.quebrachine,
+            querier: querier ?? self.querier,
+            rebarbative: rebarbative ?? self.rebarbative,
+            reimagine: reimagine ?? self.reimagine,
+            ressaut: ressaut ?? self.ressaut,
+            retrocervical: retrocervical ?? self.retrocervical,
+            revert: revert ?? self.revert,
+            rewrite: rewrite ?? self.rewrite,
+            saccoderm: saccoderm ?? self.saccoderm,
+            santir: santir ?? self.santir,
+            saprophilous: saprophilous ?? self.saprophilous,
+            saxten: saxten ?? self.saxten,
+            scatty: scatty ?? self.scatty,
+            scoffer: scoffer ?? self.scoffer,
+            scrampum: scrampum ?? self.scrampum,
+            semantic: semantic ?? self.semantic,
+            serpentinic: serpentinic ?? self.serpentinic,
+            shadowable: shadowable ?? self.shadowable,
+            sistering: sistering ?? self.sistering,
+            staghunting: staghunting ?? self.staghunting,
+            stagmometer: stagmometer ?? self.stagmometer,
+            stimulability: stimulability ?? self.stimulability,
+            strangleable: strangleable ?? self.strangleable,
+            strenuosity: strenuosity ?? self.strenuosity,
+            tabaxir: tabaxir ?? self.tabaxir,
+            talpiform: talpiform ?? self.talpiform,
+            thwack: thwack ?? self.thwack,
+            to: to ?? self.to,
+            tortricine: tortricine ?? self.tortricine,
+            truantcy: truantcy ?? self.truantcy,
+            turgesce: turgesce ?? self.turgesce,
+            unbeginning: unbeginning ?? self.unbeginning,
+            underdunged: underdunged ?? self.underdunged,
+            undesirability: undesirability ?? self.undesirability,
+            unerasing: unerasing ?? self.unerasing,
+            unguentarium: unguentarium ?? self.unguentarium,
+            unimpeachably: unimpeachably ?? self.unimpeachably,
+            unmortgaged: unmortgaged ?? self.unmortgaged,
+            unobstructed: unobstructed ?? self.unobstructed,
+            unreceptivity: unreceptivity ?? self.unreceptivity,
+            unsatisfactoriness: unsatisfactoriness ?? self.unsatisfactoriness,
+            unsecurity: unsecurity ?? self.unsecurity,
+            unstressed: unstressed ?? self.unstressed,
+            untasked: untasked ?? self.untasked,
+            unvarying: unvarying ?? self.unvarying,
+            vehemently: vehemently ?? self.vehemently,
+            warriorship: warriorship ?? self.warriorship,
+            whitepot: whitepot ?? self.whitepot,
+            wrothy: wrothy ?? self.wrothy
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Protrusive: Codable, Sendable {
+    case double(Double)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Protrusive.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Protrusive"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum PulpitismElement: Codable, Sendable {
+    case double(Double)
+    case integerArray([Int])
+    case pulpitismClass(PulpitismClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(PulpitismClass.self) {
+            self = .pulpitismClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(PulpitismElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PulpitismElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .pulpitismClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - PulpitismClass
+final class PulpitismClass: Codable, Sendable {
+    let abnet: JSONNull?
+    let buckhorn: JSONNull?
+    let calciform: JSONNull?
+    let chelophore: JSONNull?
+    let cogitation: JSONNull?
+    let decreeable: JSONNull?
+    let despicable: JSONNull?
+    let isodiazo: JSONNull?
+    let jadedly: JSONNull?
+    let leptochlorite: JSONNull?
+    let nursling: JSONNull?
+    let palamedean: JSONNull?
+    let photoheliograph: JSONNull?
+    let pipewood: JSONNull?
+    let roberd: JSONNull?
+    let statable: JSONNull?
+    let superassume: JSONNull?
+    let syllabe: JSONNull?
+    let toughhead: JSONNull?
+    let underburn: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case abnet = "abnet"
+        case buckhorn = "buckhorn"
+        case calciform = "calciform"
+        case chelophore = "chelophore"
+        case cogitation = "cogitation"
+        case decreeable = "decreeable"
+        case despicable = "despicable"
+        case isodiazo = "isodiazo"
+        case jadedly = "jadedly"
+        case leptochlorite = "leptochlorite"
+        case nursling = "nursling"
+        case palamedean = "palamedean"
+        case photoheliograph = "photoheliograph"
+        case pipewood = "pipewood"
+        case roberd = "roberd"
+        case statable = "statable"
+        case superassume = "superassume"
+        case syllabe = "syllabe"
+        case toughhead = "toughhead"
+        case underburn = "underburn"
+    }
+
+    init(abnet: JSONNull?, buckhorn: JSONNull?, calciform: JSONNull?, chelophore: JSONNull?, cogitation: JSONNull?, decreeable: JSONNull?, despicable: JSONNull?, isodiazo: JSONNull?, jadedly: JSONNull?, leptochlorite: JSONNull?, nursling: JSONNull?, palamedean: JSONNull?, photoheliograph: JSONNull?, pipewood: JSONNull?, roberd: JSONNull?, statable: JSONNull?, superassume: JSONNull?, syllabe: JSONNull?, toughhead: JSONNull?, underburn: JSONNull?) {
+        self.abnet = abnet
+        self.buckhorn = buckhorn
+        self.calciform = calciform
+        self.chelophore = chelophore
+        self.cogitation = cogitation
+        self.decreeable = decreeable
+        self.despicable = despicable
+        self.isodiazo = isodiazo
+        self.jadedly = jadedly
+        self.leptochlorite = leptochlorite
+        self.nursling = nursling
+        self.palamedean = palamedean
+        self.photoheliograph = photoheliograph
+        self.pipewood = pipewood
+        self.roberd = roberd
+        self.statable = statable
+        self.superassume = superassume
+        self.syllabe = syllabe
+        self.toughhead = toughhead
+        self.underburn = underburn
+    }
+}
+
+// MARK: PulpitismClass convenience initializers and mutators
+
+extension PulpitismClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(PulpitismClass.self, from: data)
+        self.init(abnet: me.abnet, buckhorn: me.buckhorn, calciform: me.calciform, chelophore: me.chelophore, cogitation: me.cogitation, decreeable: me.decreeable, despicable: me.despicable, isodiazo: me.isodiazo, jadedly: me.jadedly, leptochlorite: me.leptochlorite, nursling: me.nursling, palamedean: me.palamedean, photoheliograph: me.photoheliograph, pipewood: me.pipewood, roberd: me.roberd, statable: me.statable, superassume: me.superassume, syllabe: me.syllabe, toughhead: me.toughhead, underburn: me.underburn)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        abnet: JSONNull?? = nil,
+        buckhorn: JSONNull?? = nil,
+        calciform: JSONNull?? = nil,
+        chelophore: JSONNull?? = nil,
+        cogitation: JSONNull?? = nil,
+        decreeable: JSONNull?? = nil,
+        despicable: JSONNull?? = nil,
+        isodiazo: JSONNull?? = nil,
+        jadedly: JSONNull?? = nil,
+        leptochlorite: JSONNull?? = nil,
+        nursling: JSONNull?? = nil,
+        palamedean: JSONNull?? = nil,
+        photoheliograph: JSONNull?? = nil,
+        pipewood: JSONNull?? = nil,
+        roberd: JSONNull?? = nil,
+        statable: JSONNull?? = nil,
+        superassume: JSONNull?? = nil,
+        syllabe: JSONNull?? = nil,
+        toughhead: JSONNull?? = nil,
+        underburn: JSONNull?? = nil
+    ) -> PulpitismClass {
+        return PulpitismClass(
+            abnet: abnet ?? self.abnet,
+            buckhorn: buckhorn ?? self.buckhorn,
+            calciform: calciform ?? self.calciform,
+            chelophore: chelophore ?? self.chelophore,
+            cogitation: cogitation ?? self.cogitation,
+            decreeable: decreeable ?? self.decreeable,
+            despicable: despicable ?? self.despicable,
+            isodiazo: isodiazo ?? self.isodiazo,
+            jadedly: jadedly ?? self.jadedly,
+            leptochlorite: leptochlorite ?? self.leptochlorite,
+            nursling: nursling ?? self.nursling,
+            palamedean: palamedean ?? self.palamedean,
+            photoheliograph: photoheliograph ?? self.photoheliograph,
+            pipewood: pipewood ?? self.pipewood,
+            roberd: roberd ?? self.roberd,
+            statable: statable ?? self.statable,
+            superassume: superassume ?? self.superassume,
+            syllabe: syllabe ?? self.syllabe,
+            toughhead: toughhead ?? self.toughhead,
+            underburn: underburn ?? self.underburn
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum PyodermiaElement: Codable, Sendable {
+    case integer(Int)
+    case pyodermiaClass(PyodermiaClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(PyodermiaClass.self) {
+            self = .pyodermiaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(PyodermiaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for PyodermiaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .pyodermiaClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - PyodermiaClass
+final class PyodermiaClass: Codable, Sendable {
+    let aphoristically: JSONNull?
+    let apophyllous: JSONNull?
+    let cognize: JSONNull?
+    let dermonosology: JSONNull?
+    let gyppo: JSONNull?
+    let ither: JSONNull?
+    let juglandaceous: JSONNull?
+    let litho: JSONNull?
+    let macropterous: JSONNull?
+    let photographer: JSONNull?
+    let romancing: JSONNull?
+    let rumness: JSONNull?
+    let somniloquist: JSONNull?
+    let stressfully: JSONNull?
+    let tactically: JSONNull?
+    let tracheophony: JSONNull?
+    let unappositely: JSONNull?
+    let unclothedly: JSONNull?
+    let unimplied: JSONNull?
+    let unsyncopated: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case aphoristically = "aphoristically"
+        case apophyllous = "apophyllous"
+        case cognize = "cognize"
+        case dermonosology = "dermonosology"
+        case gyppo = "Gyppo"
+        case ither = "ither"
+        case juglandaceous = "juglandaceous"
+        case litho = "litho"
+        case macropterous = "macropterous"
+        case photographer = "photographer"
+        case romancing = "romancing"
+        case rumness = "rumness"
+        case somniloquist = "somniloquist"
+        case stressfully = "stressfully"
+        case tactically = "tactically"
+        case tracheophony = "tracheophony"
+        case unappositely = "unappositely"
+        case unclothedly = "unclothedly"
+        case unimplied = "unimplied"
+        case unsyncopated = "unsyncopated"
+    }
+
+    init(aphoristically: JSONNull?, apophyllous: JSONNull?, cognize: JSONNull?, dermonosology: JSONNull?, gyppo: JSONNull?, ither: JSONNull?, juglandaceous: JSONNull?, litho: JSONNull?, macropterous: JSONNull?, photographer: JSONNull?, romancing: JSONNull?, rumness: JSONNull?, somniloquist: JSONNull?, stressfully: JSONNull?, tactically: JSONNull?, tracheophony: JSONNull?, unappositely: JSONNull?, unclothedly: JSONNull?, unimplied: JSONNull?, unsyncopated: JSONNull?) {
+        self.aphoristically = aphoristically
+        self.apophyllous = apophyllous
+        self.cognize = cognize
+        self.dermonosology = dermonosology
+        self.gyppo = gyppo
+        self.ither = ither
+        self.juglandaceous = juglandaceous
+        self.litho = litho
+        self.macropterous = macropterous
+        self.photographer = photographer
+        self.romancing = romancing
+        self.rumness = rumness
+        self.somniloquist = somniloquist
+        self.stressfully = stressfully
+        self.tactically = tactically
+        self.tracheophony = tracheophony
+        self.unappositely = unappositely
+        self.unclothedly = unclothedly
+        self.unimplied = unimplied
+        self.unsyncopated = unsyncopated
+    }
+}
+
+// MARK: PyodermiaClass convenience initializers and mutators
+
+extension PyodermiaClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(PyodermiaClass.self, from: data)
+        self.init(aphoristically: me.aphoristically, apophyllous: me.apophyllous, cognize: me.cognize, dermonosology: me.dermonosology, gyppo: me.gyppo, ither: me.ither, juglandaceous: me.juglandaceous, litho: me.litho, macropterous: me.macropterous, photographer: me.photographer, romancing: me.romancing, rumness: me.rumness, somniloquist: me.somniloquist, stressfully: me.stressfully, tactically: me.tactically, tracheophony: me.tracheophony, unappositely: me.unappositely, unclothedly: me.unclothedly, unimplied: me.unimplied, unsyncopated: me.unsyncopated)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        aphoristically: JSONNull?? = nil,
+        apophyllous: JSONNull?? = nil,
+        cognize: JSONNull?? = nil,
+        dermonosology: JSONNull?? = nil,
+        gyppo: JSONNull?? = nil,
+        ither: JSONNull?? = nil,
+        juglandaceous: JSONNull?? = nil,
+        litho: JSONNull?? = nil,
+        macropterous: JSONNull?? = nil,
+        photographer: JSONNull?? = nil,
+        romancing: JSONNull?? = nil,
+        rumness: JSONNull?? = nil,
+        somniloquist: JSONNull?? = nil,
+        stressfully: JSONNull?? = nil,
+        tactically: JSONNull?? = nil,
+        tracheophony: JSONNull?? = nil,
+        unappositely: JSONNull?? = nil,
+        unclothedly: JSONNull?? = nil,
+        unimplied: JSONNull?? = nil,
+        unsyncopated: JSONNull?? = nil
+    ) -> PyodermiaClass {
+        return PyodermiaClass(
+            aphoristically: aphoristically ?? self.aphoristically,
+            apophyllous: apophyllous ?? self.apophyllous,
+            cognize: cognize ?? self.cognize,
+            dermonosology: dermonosology ?? self.dermonosology,
+            gyppo: gyppo ?? self.gyppo,
+            ither: ither ?? self.ither,
+            juglandaceous: juglandaceous ?? self.juglandaceous,
+            litho: litho ?? self.litho,
+            macropterous: macropterous ?? self.macropterous,
+            photographer: photographer ?? self.photographer,
+            romancing: romancing ?? self.romancing,
+            rumness: rumness ?? self.rumness,
+            somniloquist: somniloquist ?? self.somniloquist,
+            stressfully: stressfully ?? self.stressfully,
+            tactically: tactically ?? self.tactically,
+            tracheophony: tracheophony ?? self.tracheophony,
+            unappositely: unappositely ?? self.unappositely,
+            unclothedly: unclothedly ?? self.unclothedly,
+            unimplied: unimplied ?? self.unimplied,
+            unsyncopated: unsyncopated ?? self.unsyncopated
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum QuebrachineElement: Codable, Sendable {
+    case bool(Bool)
+    case quebrachineClass(QuebrachineClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(QuebrachineElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for QuebrachineElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - QuebrachineClass
+final class QuebrachineClass: Codable, Sendable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+
+    init(catharticalness: Double, chirotherium: Int, disdiapason: String, homocerc: Bool, nonbookish: JSONNull?) {
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.homocerc = homocerc
+        self.nonbookish = nonbookish
+    }
+}
+
+// MARK: QuebrachineClass convenience initializers and mutators
+
+extension QuebrachineClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(QuebrachineClass.self, from: data)
+        self.init(catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, homocerc: me.homocerc, nonbookish: me.nonbookish)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> QuebrachineClass {
+        return QuebrachineClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Querier: Codable, Sendable {
+    case bool(Bool)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Querier.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Querier"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Rebarbative: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Rebarbative.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Rebarbative"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Reimagine
+final class Reimagine: Codable, Sendable {
+    let adducible: JSONNull?
+    let anabolin: JSONNull?
+    let brainy: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let chrysamine: JSONNull?
+    let disdiapason: String?
+    let fluxweed: JSONNull?
+    let glaucine: JSONNull?
+    let grobianism: JSONNull?
+    let hermo: JSONNull?
+    let hieroglyphist: JSONNull?
+    let homocerc: Bool?
+    let icteroid: JSONNull?
+    let immortal: JSONNull?
+    let impetulant: JSONNull?
+    let irrigate: JSONNull?
+    let myxedema: JSONNull?
+    let nonbookish: JSONNull?
+    let onyx: JSONNull?
+    let repasser: JSONNull?
+    let septomarginal: JSONNull?
+    let subdie: JSONNull?
+    let tibiometatarsal: JSONNull?
+    let waltzlike: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case adducible = "adducible"
+        case anabolin = "anabolin"
+        case brainy = "brainy"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case chrysamine = "chrysamine"
+        case disdiapason = "disdiapason"
+        case fluxweed = "fluxweed"
+        case glaucine = "glaucine"
+        case grobianism = "grobianism"
+        case hermo = "Hermo"
+        case hieroglyphist = "hieroglyphist"
+        case homocerc = "homocerc"
+        case icteroid = "icteroid"
+        case immortal = "immortal"
+        case impetulant = "impetulant"
+        case irrigate = "irrigate"
+        case myxedema = "myxedema"
+        case nonbookish = "nonbookish"
+        case onyx = "onyx"
+        case repasser = "repasser"
+        case septomarginal = "septomarginal"
+        case subdie = "subdie"
+        case tibiometatarsal = "tibiometatarsal"
+        case waltzlike = "waltzlike"
+    }
+
+    init(adducible: JSONNull?, anabolin: JSONNull?, brainy: JSONNull?, catharticalness: Double?, chirotherium: Int?, chrysamine: JSONNull?, disdiapason: String?, fluxweed: JSONNull?, glaucine: JSONNull?, grobianism: JSONNull?, hermo: JSONNull?, hieroglyphist: JSONNull?, homocerc: Bool?, icteroid: JSONNull?, immortal: JSONNull?, impetulant: JSONNull?, irrigate: JSONNull?, myxedema: JSONNull?, nonbookish: JSONNull?, onyx: JSONNull?, repasser: JSONNull?, septomarginal: JSONNull?, subdie: JSONNull?, tibiometatarsal: JSONNull?, waltzlike: JSONNull?) {
+        self.adducible = adducible
+        self.anabolin = anabolin
+        self.brainy = brainy
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.chrysamine = chrysamine
+        self.disdiapason = disdiapason
+        self.fluxweed = fluxweed
+        self.glaucine = glaucine
+        self.grobianism = grobianism
+        self.hermo = hermo
+        self.hieroglyphist = hieroglyphist
+        self.homocerc = homocerc
+        self.icteroid = icteroid
+        self.immortal = immortal
+        self.impetulant = impetulant
+        self.irrigate = irrigate
+        self.myxedema = myxedema
+        self.nonbookish = nonbookish
+        self.onyx = onyx
+        self.repasser = repasser
+        self.septomarginal = septomarginal
+        self.subdie = subdie
+        self.tibiometatarsal = tibiometatarsal
+        self.waltzlike = waltzlike
+    }
+}
+
+// MARK: Reimagine convenience initializers and mutators
+
+extension Reimagine {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Reimagine.self, from: data)
+        self.init(adducible: me.adducible, anabolin: me.anabolin, brainy: me.brainy, catharticalness: me.catharticalness, chirotherium: me.chirotherium, chrysamine: me.chrysamine, disdiapason: me.disdiapason, fluxweed: me.fluxweed, glaucine: me.glaucine, grobianism: me.grobianism, hermo: me.hermo, hieroglyphist: me.hieroglyphist, homocerc: me.homocerc, icteroid: me.icteroid, immortal: me.immortal, impetulant: me.impetulant, irrigate: me.irrigate, myxedema: me.myxedema, nonbookish: me.nonbookish, onyx: me.onyx, repasser: me.repasser, septomarginal: me.septomarginal, subdie: me.subdie, tibiometatarsal: me.tibiometatarsal, waltzlike: me.waltzlike)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        adducible: JSONNull?? = nil,
+        anabolin: JSONNull?? = nil,
+        brainy: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        chrysamine: JSONNull?? = nil,
+        disdiapason: String?? = nil,
+        fluxweed: JSONNull?? = nil,
+        glaucine: JSONNull?? = nil,
+        grobianism: JSONNull?? = nil,
+        hermo: JSONNull?? = nil,
+        hieroglyphist: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        icteroid: JSONNull?? = nil,
+        immortal: JSONNull?? = nil,
+        impetulant: JSONNull?? = nil,
+        irrigate: JSONNull?? = nil,
+        myxedema: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        onyx: JSONNull?? = nil,
+        repasser: JSONNull?? = nil,
+        septomarginal: JSONNull?? = nil,
+        subdie: JSONNull?? = nil,
+        tibiometatarsal: JSONNull?? = nil,
+        waltzlike: JSONNull?? = nil
+    ) -> Reimagine {
+        return Reimagine(
+            adducible: adducible ?? self.adducible,
+            anabolin: anabolin ?? self.anabolin,
+            brainy: brainy ?? self.brainy,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chrysamine: chrysamine ?? self.chrysamine,
+            disdiapason: disdiapason ?? self.disdiapason,
+            fluxweed: fluxweed ?? self.fluxweed,
+            glaucine: glaucine ?? self.glaucine,
+            grobianism: grobianism ?? self.grobianism,
+            hermo: hermo ?? self.hermo,
+            hieroglyphist: hieroglyphist ?? self.hieroglyphist,
+            homocerc: homocerc ?? self.homocerc,
+            icteroid: icteroid ?? self.icteroid,
+            immortal: immortal ?? self.immortal,
+            impetulant: impetulant ?? self.impetulant,
+            irrigate: irrigate ?? self.irrigate,
+            myxedema: myxedema ?? self.myxedema,
+            nonbookish: nonbookish ?? self.nonbookish,
+            onyx: onyx ?? self.onyx,
+            repasser: repasser ?? self.repasser,
+            septomarginal: septomarginal ?? self.septomarginal,
+            subdie: subdie ?? self.subdie,
+            tibiometatarsal: tibiometatarsal ?? self.tibiometatarsal,
+            waltzlike: waltzlike ?? self.waltzlike
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Ressaut
+final class Ressaut: Codable, Sendable {
+    let apperceptive: String
+    let cuttoo: String
+    let douser: String
+    let drinkproof: String
+    let forementioned: String
+    let freesia: String
+    let genevieve: String
+    let hyperdiabolical: String
+    let hypocone: String
+    let irreverentially: String
+    let jumart: String
+    let mimosaceae: String
+    let mollicrush: String
+    let nedder: String
+    let retinasphalt: String
+    let sough: String
+    let steading: String
+    let theopaschitism: String
+    let undurableness: String
+    let unmingleable: String
+
+    enum CodingKeys: String, CodingKey {
+        case apperceptive = "apperceptive"
+        case cuttoo = "cuttoo"
+        case douser = "douser"
+        case drinkproof = "drinkproof"
+        case forementioned = "forementioned"
+        case freesia = "Freesia"
+        case genevieve = "Genevieve"
+        case hyperdiabolical = "hyperdiabolical"
+        case hypocone = "hypocone"
+        case irreverentially = "irreverentially"
+        case jumart = "jumart"
+        case mimosaceae = "Mimosaceae"
+        case mollicrush = "mollicrush"
+        case nedder = "nedder"
+        case retinasphalt = "retinasphalt"
+        case sough = "sough"
+        case steading = "steading"
+        case theopaschitism = "Theopaschitism"
+        case undurableness = "undurableness"
+        case unmingleable = "unmingleable"
+    }
+
+    init(apperceptive: String, cuttoo: String, douser: String, drinkproof: String, forementioned: String, freesia: String, genevieve: String, hyperdiabolical: String, hypocone: String, irreverentially: String, jumart: String, mimosaceae: String, mollicrush: String, nedder: String, retinasphalt: String, sough: String, steading: String, theopaschitism: String, undurableness: String, unmingleable: String) {
+        self.apperceptive = apperceptive
+        self.cuttoo = cuttoo
+        self.douser = douser
+        self.drinkproof = drinkproof
+        self.forementioned = forementioned
+        self.freesia = freesia
+        self.genevieve = genevieve
+        self.hyperdiabolical = hyperdiabolical
+        self.hypocone = hypocone
+        self.irreverentially = irreverentially
+        self.jumart = jumart
+        self.mimosaceae = mimosaceae
+        self.mollicrush = mollicrush
+        self.nedder = nedder
+        self.retinasphalt = retinasphalt
+        self.sough = sough
+        self.steading = steading
+        self.theopaschitism = theopaschitism
+        self.undurableness = undurableness
+        self.unmingleable = unmingleable
+    }
+}
+
+// MARK: Ressaut convenience initializers and mutators
+
+extension Ressaut {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Ressaut.self, from: data)
+        self.init(apperceptive: me.apperceptive, cuttoo: me.cuttoo, douser: me.douser, drinkproof: me.drinkproof, forementioned: me.forementioned, freesia: me.freesia, genevieve: me.genevieve, hyperdiabolical: me.hyperdiabolical, hypocone: me.hypocone, irreverentially: me.irreverentially, jumart: me.jumart, mimosaceae: me.mimosaceae, mollicrush: me.mollicrush, nedder: me.nedder, retinasphalt: me.retinasphalt, sough: me.sough, steading: me.steading, theopaschitism: me.theopaschitism, undurableness: me.undurableness, unmingleable: me.unmingleable)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apperceptive: String? = nil,
+        cuttoo: String? = nil,
+        douser: String? = nil,
+        drinkproof: String? = nil,
+        forementioned: String? = nil,
+        freesia: String? = nil,
+        genevieve: String? = nil,
+        hyperdiabolical: String? = nil,
+        hypocone: String? = nil,
+        irreverentially: String? = nil,
+        jumart: String? = nil,
+        mimosaceae: String? = nil,
+        mollicrush: String? = nil,
+        nedder: String? = nil,
+        retinasphalt: String? = nil,
+        sough: String? = nil,
+        steading: String? = nil,
+        theopaschitism: String? = nil,
+        undurableness: String? = nil,
+        unmingleable: String? = nil
+    ) -> Ressaut {
+        return Ressaut(
+            apperceptive: apperceptive ?? self.apperceptive,
+            cuttoo: cuttoo ?? self.cuttoo,
+            douser: douser ?? self.douser,
+            drinkproof: drinkproof ?? self.drinkproof,
+            forementioned: forementioned ?? self.forementioned,
+            freesia: freesia ?? self.freesia,
+            genevieve: genevieve ?? self.genevieve,
+            hyperdiabolical: hyperdiabolical ?? self.hyperdiabolical,
+            hypocone: hypocone ?? self.hypocone,
+            irreverentially: irreverentially ?? self.irreverentially,
+            jumart: jumart ?? self.jumart,
+            mimosaceae: mimosaceae ?? self.mimosaceae,
+            mollicrush: mollicrush ?? self.mollicrush,
+            nedder: nedder ?? self.nedder,
+            retinasphalt: retinasphalt ?? self.retinasphalt,
+            sough: sough ?? self.sough,
+            steading: steading ?? self.steading,
+            theopaschitism: theopaschitism ?? self.theopaschitism,
+            undurableness: undurableness ?? self.undurableness,
+            unmingleable: unmingleable ?? self.unmingleable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Retrocervical: Codable, Sendable {
+    case integer(Int)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Retrocervical.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Retrocervical"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Revert: Codable, Sendable {
+    case bool(Bool)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Revert.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Revert"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum RewriteElement: Codable, Sendable {
+    case double(Double)
+    case nullArray([JSONNull?])
+    case rewriteClass(RewriteClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(RewriteClass.self) {
+            self = .rewriteClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(RewriteElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for RewriteElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .rewriteClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - RewriteClass
+final class RewriteClass: Codable, Sendable {
+    let accountancy: JSONNull?
+    let cacotrophic: JSONNull?
+    let contest: JSONNull?
+    let couthily: JSONNull?
+    let falculate: JSONNull?
+    let foreseize: JSONNull?
+    let hyades: JSONNull?
+    let lemnad: JSONNull?
+    let monotheistically: JSONNull?
+    let nonflying: JSONNull?
+    let ptenoglossa: JSONNull?
+    let repatch: JSONNull?
+    let rodman: JSONNull?
+    let strung: JSONNull?
+    let titmal: JSONNull?
+    let twalpennyworth: JSONNull?
+    let unblamable: JSONNull?
+    let vertical: JSONNull?
+    let whiggification: JSONNull?
+    let yardman: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case accountancy = "accountancy"
+        case cacotrophic = "cacotrophic"
+        case contest = "contest"
+        case couthily = "couthily"
+        case falculate = "falculate"
+        case foreseize = "foreseize"
+        case hyades = "Hyades"
+        case lemnad = "lemnad"
+        case monotheistically = "monotheistically"
+        case nonflying = "nonflying"
+        case ptenoglossa = "Ptenoglossa"
+        case repatch = "repatch"
+        case rodman = "rodman"
+        case strung = "strung"
+        case titmal = "titmal"
+        case twalpennyworth = "twalpennyworth"
+        case unblamable = "unblamable"
+        case vertical = "vertical"
+        case whiggification = "Whiggification"
+        case yardman = "yardman"
+    }
+
+    init(accountancy: JSONNull?, cacotrophic: JSONNull?, contest: JSONNull?, couthily: JSONNull?, falculate: JSONNull?, foreseize: JSONNull?, hyades: JSONNull?, lemnad: JSONNull?, monotheistically: JSONNull?, nonflying: JSONNull?, ptenoglossa: JSONNull?, repatch: JSONNull?, rodman: JSONNull?, strung: JSONNull?, titmal: JSONNull?, twalpennyworth: JSONNull?, unblamable: JSONNull?, vertical: JSONNull?, whiggification: JSONNull?, yardman: JSONNull?) {
+        self.accountancy = accountancy
+        self.cacotrophic = cacotrophic
+        self.contest = contest
+        self.couthily = couthily
+        self.falculate = falculate
+        self.foreseize = foreseize
+        self.hyades = hyades
+        self.lemnad = lemnad
+        self.monotheistically = monotheistically
+        self.nonflying = nonflying
+        self.ptenoglossa = ptenoglossa
+        self.repatch = repatch
+        self.rodman = rodman
+        self.strung = strung
+        self.titmal = titmal
+        self.twalpennyworth = twalpennyworth
+        self.unblamable = unblamable
+        self.vertical = vertical
+        self.whiggification = whiggification
+        self.yardman = yardman
+    }
+}
+
+// MARK: RewriteClass convenience initializers and mutators
+
+extension RewriteClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(RewriteClass.self, from: data)
+        self.init(accountancy: me.accountancy, cacotrophic: me.cacotrophic, contest: me.contest, couthily: me.couthily, falculate: me.falculate, foreseize: me.foreseize, hyades: me.hyades, lemnad: me.lemnad, monotheistically: me.monotheistically, nonflying: me.nonflying, ptenoglossa: me.ptenoglossa, repatch: me.repatch, rodman: me.rodman, strung: me.strung, titmal: me.titmal, twalpennyworth: me.twalpennyworth, unblamable: me.unblamable, vertical: me.vertical, whiggification: me.whiggification, yardman: me.yardman)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        accountancy: JSONNull?? = nil,
+        cacotrophic: JSONNull?? = nil,
+        contest: JSONNull?? = nil,
+        couthily: JSONNull?? = nil,
+        falculate: JSONNull?? = nil,
+        foreseize: JSONNull?? = nil,
+        hyades: JSONNull?? = nil,
+        lemnad: JSONNull?? = nil,
+        monotheistically: JSONNull?? = nil,
+        nonflying: JSONNull?? = nil,
+        ptenoglossa: JSONNull?? = nil,
+        repatch: JSONNull?? = nil,
+        rodman: JSONNull?? = nil,
+        strung: JSONNull?? = nil,
+        titmal: JSONNull?? = nil,
+        twalpennyworth: JSONNull?? = nil,
+        unblamable: JSONNull?? = nil,
+        vertical: JSONNull?? = nil,
+        whiggification: JSONNull?? = nil,
+        yardman: JSONNull?? = nil
+    ) -> RewriteClass {
+        return RewriteClass(
+            accountancy: accountancy ?? self.accountancy,
+            cacotrophic: cacotrophic ?? self.cacotrophic,
+            contest: contest ?? self.contest,
+            couthily: couthily ?? self.couthily,
+            falculate: falculate ?? self.falculate,
+            foreseize: foreseize ?? self.foreseize,
+            hyades: hyades ?? self.hyades,
+            lemnad: lemnad ?? self.lemnad,
+            monotheistically: monotheistically ?? self.monotheistically,
+            nonflying: nonflying ?? self.nonflying,
+            ptenoglossa: ptenoglossa ?? self.ptenoglossa,
+            repatch: repatch ?? self.repatch,
+            rodman: rodman ?? self.rodman,
+            strung: strung ?? self.strung,
+            titmal: titmal ?? self.titmal,
+            twalpennyworth: twalpennyworth ?? self.twalpennyworth,
+            unblamable: unblamable ?? self.unblamable,
+            vertical: vertical ?? self.vertical,
+            whiggification: whiggification ?? self.whiggification,
+            yardman: yardman ?? self.yardman
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Saccoderm: Codable, Sendable {
+    case integerArray([Int])
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Saccoderm.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Saccoderm"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum SantirElement: Codable, Sendable {
+    case double(Double)
+    case santirClass(SantirClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(SantirClass.self) {
+            self = .santirClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(SantirElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for SantirElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .santirClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - SantirClass
+final class SantirClass: Codable, Sendable {
+    let admiredly: JSONNull?
+    let demicaponier: JSONNull?
+    let epitympanic: JSONNull?
+    let investitor: JSONNull?
+    let lupiform: JSONNull?
+    let monoflagellate: JSONNull?
+    let paleoethnic: JSONNull?
+    let prediscountable: JSONNull?
+    let rhetoricals: JSONNull?
+    let roomth: JSONNull?
+    let saccharose: JSONNull?
+    let septonasal: JSONNull?
+    let serpenticide: JSONNull?
+    let setarious: JSONNull?
+    let spaework: JSONNull?
+    let stylite: JSONNull?
+    let suessiones: JSONNull?
+    let timelily: JSONNull?
+    let unprofaned: JSONNull?
+    let vorticular: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case admiredly = "admiredly"
+        case demicaponier = "demicaponier"
+        case epitympanic = "epitympanic"
+        case investitor = "investitor"
+        case lupiform = "lupiform"
+        case monoflagellate = "monoflagellate"
+        case paleoethnic = "paleoethnic"
+        case prediscountable = "prediscountable"
+        case rhetoricals = "rhetoricals"
+        case roomth = "roomth"
+        case saccharose = "saccharose"
+        case septonasal = "septonasal"
+        case serpenticide = "serpenticide"
+        case setarious = "setarious"
+        case spaework = "spaework"
+        case stylite = "stylite"
+        case suessiones = "Suessiones"
+        case timelily = "timelily"
+        case unprofaned = "unprofaned"
+        case vorticular = "vorticular"
+    }
+
+    init(admiredly: JSONNull?, demicaponier: JSONNull?, epitympanic: JSONNull?, investitor: JSONNull?, lupiform: JSONNull?, monoflagellate: JSONNull?, paleoethnic: JSONNull?, prediscountable: JSONNull?, rhetoricals: JSONNull?, roomth: JSONNull?, saccharose: JSONNull?, septonasal: JSONNull?, serpenticide: JSONNull?, setarious: JSONNull?, spaework: JSONNull?, stylite: JSONNull?, suessiones: JSONNull?, timelily: JSONNull?, unprofaned: JSONNull?, vorticular: JSONNull?) {
+        self.admiredly = admiredly
+        self.demicaponier = demicaponier
+        self.epitympanic = epitympanic
+        self.investitor = investitor
+        self.lupiform = lupiform
+        self.monoflagellate = monoflagellate
+        self.paleoethnic = paleoethnic
+        self.prediscountable = prediscountable
+        self.rhetoricals = rhetoricals
+        self.roomth = roomth
+        self.saccharose = saccharose
+        self.septonasal = septonasal
+        self.serpenticide = serpenticide
+        self.setarious = setarious
+        self.spaework = spaework
+        self.stylite = stylite
+        self.suessiones = suessiones
+        self.timelily = timelily
+        self.unprofaned = unprofaned
+        self.vorticular = vorticular
+    }
+}
+
+// MARK: SantirClass convenience initializers and mutators
+
+extension SantirClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(SantirClass.self, from: data)
+        self.init(admiredly: me.admiredly, demicaponier: me.demicaponier, epitympanic: me.epitympanic, investitor: me.investitor, lupiform: me.lupiform, monoflagellate: me.monoflagellate, paleoethnic: me.paleoethnic, prediscountable: me.prediscountable, rhetoricals: me.rhetoricals, roomth: me.roomth, saccharose: me.saccharose, septonasal: me.septonasal, serpenticide: me.serpenticide, setarious: me.setarious, spaework: me.spaework, stylite: me.stylite, suessiones: me.suessiones, timelily: me.timelily, unprofaned: me.unprofaned, vorticular: me.vorticular)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        admiredly: JSONNull?? = nil,
+        demicaponier: JSONNull?? = nil,
+        epitympanic: JSONNull?? = nil,
+        investitor: JSONNull?? = nil,
+        lupiform: JSONNull?? = nil,
+        monoflagellate: JSONNull?? = nil,
+        paleoethnic: JSONNull?? = nil,
+        prediscountable: JSONNull?? = nil,
+        rhetoricals: JSONNull?? = nil,
+        roomth: JSONNull?? = nil,
+        saccharose: JSONNull?? = nil,
+        septonasal: JSONNull?? = nil,
+        serpenticide: JSONNull?? = nil,
+        setarious: JSONNull?? = nil,
+        spaework: JSONNull?? = nil,
+        stylite: JSONNull?? = nil,
+        suessiones: JSONNull?? = nil,
+        timelily: JSONNull?? = nil,
+        unprofaned: JSONNull?? = nil,
+        vorticular: JSONNull?? = nil
+    ) -> SantirClass {
+        return SantirClass(
+            admiredly: admiredly ?? self.admiredly,
+            demicaponier: demicaponier ?? self.demicaponier,
+            epitympanic: epitympanic ?? self.epitympanic,
+            investitor: investitor ?? self.investitor,
+            lupiform: lupiform ?? self.lupiform,
+            monoflagellate: monoflagellate ?? self.monoflagellate,
+            paleoethnic: paleoethnic ?? self.paleoethnic,
+            prediscountable: prediscountable ?? self.prediscountable,
+            rhetoricals: rhetoricals ?? self.rhetoricals,
+            roomth: roomth ?? self.roomth,
+            saccharose: saccharose ?? self.saccharose,
+            septonasal: septonasal ?? self.septonasal,
+            serpenticide: serpenticide ?? self.serpenticide,
+            setarious: setarious ?? self.setarious,
+            spaework: spaework ?? self.spaework,
+            stylite: stylite ?? self.stylite,
+            suessiones: suessiones ?? self.suessiones,
+            timelily: timelily ?? self.timelily,
+            unprofaned: unprofaned ?? self.unprofaned,
+            vorticular: vorticular ?? self.vorticular
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Saprophilous: Codable, Sendable {
+    case integerMap([String: Int])
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Saprophilous.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Saprophilous"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum SaxtenElement: Codable, Sendable {
+    case saxtenClass(SaxtenClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(SaxtenClass.self) {
+            self = .saxtenClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(SaxtenElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for SaxtenElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .saxtenClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - SaxtenClass
+final class SaxtenClass: Codable, Sendable {
+    let algarrobilla: JSONNull?
+    let bowgrace: JSONNull?
+    let catharticalness: Double?
+    let centaurid: JSONNull?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let flix: JSONNull?
+    let germanely: JSONNull?
+    let homocerc: Bool?
+    let inhume: JSONNull?
+    let lepidote: JSONNull?
+    let megalochirous: JSONNull?
+    let ninepenny: JSONNull?
+    let nonbookish: JSONNull?
+    let nondeist: JSONNull?
+    let nymphaeaceous: JSONNull?
+    let parietofrontal: JSONNull?
+    let sancyite: JSONNull?
+    let subjectivist: JSONNull?
+    let tibiad: JSONNull?
+    let transonic: JSONNull?
+    let tripetalous: JSONNull?
+    let trunchman: JSONNull?
+    let urger: JSONNull?
+    let withdrawnness: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case algarrobilla = "algarrobilla"
+        case bowgrace = "bowgrace"
+        case catharticalness = "catharticalness"
+        case centaurid = "Centaurid"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case flix = "flix"
+        case germanely = "germanely"
+        case homocerc = "homocerc"
+        case inhume = "inhume"
+        case lepidote = "lepidote"
+        case megalochirous = "megalochirous"
+        case ninepenny = "ninepenny"
+        case nonbookish = "nonbookish"
+        case nondeist = "nondeist"
+        case nymphaeaceous = "nymphaeaceous"
+        case parietofrontal = "parietofrontal"
+        case sancyite = "sancyite"
+        case subjectivist = "subjectivist"
+        case tibiad = "tibiad"
+        case transonic = "transonic"
+        case tripetalous = "tripetalous"
+        case trunchman = "trunchman"
+        case urger = "urger"
+        case withdrawnness = "withdrawnness"
+    }
+
+    init(algarrobilla: JSONNull?, bowgrace: JSONNull?, catharticalness: Double?, centaurid: JSONNull?, chirotherium: Int?, disdiapason: String?, flix: JSONNull?, germanely: JSONNull?, homocerc: Bool?, inhume: JSONNull?, lepidote: JSONNull?, megalochirous: JSONNull?, ninepenny: JSONNull?, nonbookish: JSONNull?, nondeist: JSONNull?, nymphaeaceous: JSONNull?, parietofrontal: JSONNull?, sancyite: JSONNull?, subjectivist: JSONNull?, tibiad: JSONNull?, transonic: JSONNull?, tripetalous: JSONNull?, trunchman: JSONNull?, urger: JSONNull?, withdrawnness: JSONNull?) {
+        self.algarrobilla = algarrobilla
+        self.bowgrace = bowgrace
+        self.catharticalness = catharticalness
+        self.centaurid = centaurid
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.flix = flix
+        self.germanely = germanely
+        self.homocerc = homocerc
+        self.inhume = inhume
+        self.lepidote = lepidote
+        self.megalochirous = megalochirous
+        self.ninepenny = ninepenny
+        self.nonbookish = nonbookish
+        self.nondeist = nondeist
+        self.nymphaeaceous = nymphaeaceous
+        self.parietofrontal = parietofrontal
+        self.sancyite = sancyite
+        self.subjectivist = subjectivist
+        self.tibiad = tibiad
+        self.transonic = transonic
+        self.tripetalous = tripetalous
+        self.trunchman = trunchman
+        self.urger = urger
+        self.withdrawnness = withdrawnness
+    }
+}
+
+// MARK: SaxtenClass convenience initializers and mutators
+
+extension SaxtenClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(SaxtenClass.self, from: data)
+        self.init(algarrobilla: me.algarrobilla, bowgrace: me.bowgrace, catharticalness: me.catharticalness, centaurid: me.centaurid, chirotherium: me.chirotherium, disdiapason: me.disdiapason, flix: me.flix, germanely: me.germanely, homocerc: me.homocerc, inhume: me.inhume, lepidote: me.lepidote, megalochirous: me.megalochirous, ninepenny: me.ninepenny, nonbookish: me.nonbookish, nondeist: me.nondeist, nymphaeaceous: me.nymphaeaceous, parietofrontal: me.parietofrontal, sancyite: me.sancyite, subjectivist: me.subjectivist, tibiad: me.tibiad, transonic: me.transonic, tripetalous: me.tripetalous, trunchman: me.trunchman, urger: me.urger, withdrawnness: me.withdrawnness)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        algarrobilla: JSONNull?? = nil,
+        bowgrace: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        centaurid: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        flix: JSONNull?? = nil,
+        germanely: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        inhume: JSONNull?? = nil,
+        lepidote: JSONNull?? = nil,
+        megalochirous: JSONNull?? = nil,
+        ninepenny: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        nondeist: JSONNull?? = nil,
+        nymphaeaceous: JSONNull?? = nil,
+        parietofrontal: JSONNull?? = nil,
+        sancyite: JSONNull?? = nil,
+        subjectivist: JSONNull?? = nil,
+        tibiad: JSONNull?? = nil,
+        transonic: JSONNull?? = nil,
+        tripetalous: JSONNull?? = nil,
+        trunchman: JSONNull?? = nil,
+        urger: JSONNull?? = nil,
+        withdrawnness: JSONNull?? = nil
+    ) -> SaxtenClass {
+        return SaxtenClass(
+            algarrobilla: algarrobilla ?? self.algarrobilla,
+            bowgrace: bowgrace ?? self.bowgrace,
+            catharticalness: catharticalness ?? self.catharticalness,
+            centaurid: centaurid ?? self.centaurid,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            flix: flix ?? self.flix,
+            germanely: germanely ?? self.germanely,
+            homocerc: homocerc ?? self.homocerc,
+            inhume: inhume ?? self.inhume,
+            lepidote: lepidote ?? self.lepidote,
+            megalochirous: megalochirous ?? self.megalochirous,
+            ninepenny: ninepenny ?? self.ninepenny,
+            nonbookish: nonbookish ?? self.nonbookish,
+            nondeist: nondeist ?? self.nondeist,
+            nymphaeaceous: nymphaeaceous ?? self.nymphaeaceous,
+            parietofrontal: parietofrontal ?? self.parietofrontal,
+            sancyite: sancyite ?? self.sancyite,
+            subjectivist: subjectivist ?? self.subjectivist,
+            tibiad: tibiad ?? self.tibiad,
+            transonic: transonic ?? self.transonic,
+            tripetalous: tripetalous ?? self.tripetalous,
+            trunchman: trunchman ?? self.trunchman,
+            urger: urger ?? self.urger,
+            withdrawnness: withdrawnness ?? self.withdrawnness
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Scatty
+final class Scatty: Codable, Sendable {
+    let aeriferous: JSONNull?
+    let antical: JSONNull?
+    let antighostism: JSONNull?
+    let arcanum: JSONNull?
+    let autotrophy: JSONNull?
+    let baronial: JSONNull?
+    let caffeine: JSONNull?
+    let gorgoniacean: JSONNull?
+    let heroical: JSONNull?
+    let hydropical: JSONNull?
+    let mechanology: JSONNull?
+    let musicopoetic: JSONNull?
+    let officiality: JSONNull?
+    let oftentimes: JSONNull?
+    let ophthalmotonometer: JSONNull?
+    let reflectively: JSONNull?
+    let springer: JSONNull?
+    let tabasco: JSONNull?
+    let teleianthous: JSONNull?
+    let uncombated: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case aeriferous = "aeriferous"
+        case antical = "antical"
+        case antighostism = "antighostism"
+        case arcanum = "arcanum"
+        case autotrophy = "autotrophy"
+        case baronial = "baronial"
+        case caffeine = "caffeine"
+        case gorgoniacean = "gorgoniacean"
+        case heroical = "heroical"
+        case hydropical = "hydropical"
+        case mechanology = "mechanology"
+        case musicopoetic = "musicopoetic"
+        case officiality = "officiality"
+        case oftentimes = "oftentimes"
+        case ophthalmotonometer = "ophthalmotonometer"
+        case reflectively = "reflectively"
+        case springer = "springer"
+        case tabasco = "Tabasco"
+        case teleianthous = "teleianthous"
+        case uncombated = "uncombated"
+    }
+
+    init(aeriferous: JSONNull?, antical: JSONNull?, antighostism: JSONNull?, arcanum: JSONNull?, autotrophy: JSONNull?, baronial: JSONNull?, caffeine: JSONNull?, gorgoniacean: JSONNull?, heroical: JSONNull?, hydropical: JSONNull?, mechanology: JSONNull?, musicopoetic: JSONNull?, officiality: JSONNull?, oftentimes: JSONNull?, ophthalmotonometer: JSONNull?, reflectively: JSONNull?, springer: JSONNull?, tabasco: JSONNull?, teleianthous: JSONNull?, uncombated: JSONNull?) {
+        self.aeriferous = aeriferous
+        self.antical = antical
+        self.antighostism = antighostism
+        self.arcanum = arcanum
+        self.autotrophy = autotrophy
+        self.baronial = baronial
+        self.caffeine = caffeine
+        self.gorgoniacean = gorgoniacean
+        self.heroical = heroical
+        self.hydropical = hydropical
+        self.mechanology = mechanology
+        self.musicopoetic = musicopoetic
+        self.officiality = officiality
+        self.oftentimes = oftentimes
+        self.ophthalmotonometer = ophthalmotonometer
+        self.reflectively = reflectively
+        self.springer = springer
+        self.tabasco = tabasco
+        self.teleianthous = teleianthous
+        self.uncombated = uncombated
+    }
+}
+
+// MARK: Scatty convenience initializers and mutators
+
+extension Scatty {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Scatty.self, from: data)
+        self.init(aeriferous: me.aeriferous, antical: me.antical, antighostism: me.antighostism, arcanum: me.arcanum, autotrophy: me.autotrophy, baronial: me.baronial, caffeine: me.caffeine, gorgoniacean: me.gorgoniacean, heroical: me.heroical, hydropical: me.hydropical, mechanology: me.mechanology, musicopoetic: me.musicopoetic, officiality: me.officiality, oftentimes: me.oftentimes, ophthalmotonometer: me.ophthalmotonometer, reflectively: me.reflectively, springer: me.springer, tabasco: me.tabasco, teleianthous: me.teleianthous, uncombated: me.uncombated)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        aeriferous: JSONNull?? = nil,
+        antical: JSONNull?? = nil,
+        antighostism: JSONNull?? = nil,
+        arcanum: JSONNull?? = nil,
+        autotrophy: JSONNull?? = nil,
+        baronial: JSONNull?? = nil,
+        caffeine: JSONNull?? = nil,
+        gorgoniacean: JSONNull?? = nil,
+        heroical: JSONNull?? = nil,
+        hydropical: JSONNull?? = nil,
+        mechanology: JSONNull?? = nil,
+        musicopoetic: JSONNull?? = nil,
+        officiality: JSONNull?? = nil,
+        oftentimes: JSONNull?? = nil,
+        ophthalmotonometer: JSONNull?? = nil,
+        reflectively: JSONNull?? = nil,
+        springer: JSONNull?? = nil,
+        tabasco: JSONNull?? = nil,
+        teleianthous: JSONNull?? = nil,
+        uncombated: JSONNull?? = nil
+    ) -> Scatty {
+        return Scatty(
+            aeriferous: aeriferous ?? self.aeriferous,
+            antical: antical ?? self.antical,
+            antighostism: antighostism ?? self.antighostism,
+            arcanum: arcanum ?? self.arcanum,
+            autotrophy: autotrophy ?? self.autotrophy,
+            baronial: baronial ?? self.baronial,
+            caffeine: caffeine ?? self.caffeine,
+            gorgoniacean: gorgoniacean ?? self.gorgoniacean,
+            heroical: heroical ?? self.heroical,
+            hydropical: hydropical ?? self.hydropical,
+            mechanology: mechanology ?? self.mechanology,
+            musicopoetic: musicopoetic ?? self.musicopoetic,
+            officiality: officiality ?? self.officiality,
+            oftentimes: oftentimes ?? self.oftentimes,
+            ophthalmotonometer: ophthalmotonometer ?? self.ophthalmotonometer,
+            reflectively: reflectively ?? self.reflectively,
+            springer: springer ?? self.springer,
+            tabasco: tabasco ?? self.tabasco,
+            teleianthous: teleianthous ?? self.teleianthous,
+            uncombated: uncombated ?? self.uncombated
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Scoffer: Codable, Sendable {
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Scoffer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Scoffer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Scrampum: Codable, Sendable {
+    case bool(Bool)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Scrampum.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Scrampum"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Serpentinic: Codable, Sendable {
+    case double(Double)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Serpentinic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Serpentinic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Shadowable: Codable, Sendable {
+    case bool(Bool)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Shadowable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Shadowable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum SisteringElement: Codable, Sendable {
+    case integer(Int)
+    case nullArray([JSONNull?])
+    case sisteringClass(SisteringClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(SisteringClass.self) {
+            self = .sisteringClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(SisteringElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for SisteringElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .sisteringClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - SisteringClass
+final class SisteringClass: Codable, Sendable {
+    let amphicarpic: JSONNull?
+    let chianti: JSONNull?
+    let frigorific: JSONNull?
+    let haplomi: JSONNull?
+    let hyperkinesis: JSONNull?
+    let laudable: JSONNull?
+    let madwoman: JSONNull?
+    let maimedly: JSONNull?
+    let micropterygidae: JSONNull?
+    let microrhabdus: JSONNull?
+    let nondense: JSONNull?
+    let phlebemphraxis: JSONNull?
+    let redsear: JSONNull?
+    let schismatical: JSONNull?
+    let tartryl: JSONNull?
+    let unabhorred: JSONNull?
+    let undeliberateness: JSONNull?
+    let unmixable: JSONNull?
+    let untruckling: JSONNull?
+    let vineal: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amphicarpic = "amphicarpic"
+        case chianti = "Chianti"
+        case frigorific = "frigorific"
+        case haplomi = "Haplomi"
+        case hyperkinesis = "hyperkinesis"
+        case laudable = "laudable"
+        case madwoman = "madwoman"
+        case maimedly = "maimedly"
+        case micropterygidae = "Micropterygidae"
+        case microrhabdus = "microrhabdus"
+        case nondense = "nondense"
+        case phlebemphraxis = "phlebemphraxis"
+        case redsear = "redsear"
+        case schismatical = "schismatical"
+        case tartryl = "tartryl"
+        case unabhorred = "unabhorred"
+        case undeliberateness = "undeliberateness"
+        case unmixable = "unmixable"
+        case untruckling = "untruckling"
+        case vineal = "vineal"
+    }
+
+    init(amphicarpic: JSONNull?, chianti: JSONNull?, frigorific: JSONNull?, haplomi: JSONNull?, hyperkinesis: JSONNull?, laudable: JSONNull?, madwoman: JSONNull?, maimedly: JSONNull?, micropterygidae: JSONNull?, microrhabdus: JSONNull?, nondense: JSONNull?, phlebemphraxis: JSONNull?, redsear: JSONNull?, schismatical: JSONNull?, tartryl: JSONNull?, unabhorred: JSONNull?, undeliberateness: JSONNull?, unmixable: JSONNull?, untruckling: JSONNull?, vineal: JSONNull?) {
+        self.amphicarpic = amphicarpic
+        self.chianti = chianti
+        self.frigorific = frigorific
+        self.haplomi = haplomi
+        self.hyperkinesis = hyperkinesis
+        self.laudable = laudable
+        self.madwoman = madwoman
+        self.maimedly = maimedly
+        self.micropterygidae = micropterygidae
+        self.microrhabdus = microrhabdus
+        self.nondense = nondense
+        self.phlebemphraxis = phlebemphraxis
+        self.redsear = redsear
+        self.schismatical = schismatical
+        self.tartryl = tartryl
+        self.unabhorred = unabhorred
+        self.undeliberateness = undeliberateness
+        self.unmixable = unmixable
+        self.untruckling = untruckling
+        self.vineal = vineal
+    }
+}
+
+// MARK: SisteringClass convenience initializers and mutators
+
+extension SisteringClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(SisteringClass.self, from: data)
+        self.init(amphicarpic: me.amphicarpic, chianti: me.chianti, frigorific: me.frigorific, haplomi: me.haplomi, hyperkinesis: me.hyperkinesis, laudable: me.laudable, madwoman: me.madwoman, maimedly: me.maimedly, micropterygidae: me.micropterygidae, microrhabdus: me.microrhabdus, nondense: me.nondense, phlebemphraxis: me.phlebemphraxis, redsear: me.redsear, schismatical: me.schismatical, tartryl: me.tartryl, unabhorred: me.unabhorred, undeliberateness: me.undeliberateness, unmixable: me.unmixable, untruckling: me.untruckling, vineal: me.vineal)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amphicarpic: JSONNull?? = nil,
+        chianti: JSONNull?? = nil,
+        frigorific: JSONNull?? = nil,
+        haplomi: JSONNull?? = nil,
+        hyperkinesis: JSONNull?? = nil,
+        laudable: JSONNull?? = nil,
+        madwoman: JSONNull?? = nil,
+        maimedly: JSONNull?? = nil,
+        micropterygidae: JSONNull?? = nil,
+        microrhabdus: JSONNull?? = nil,
+        nondense: JSONNull?? = nil,
+        phlebemphraxis: JSONNull?? = nil,
+        redsear: JSONNull?? = nil,
+        schismatical: JSONNull?? = nil,
+        tartryl: JSONNull?? = nil,
+        unabhorred: JSONNull?? = nil,
+        undeliberateness: JSONNull?? = nil,
+        unmixable: JSONNull?? = nil,
+        untruckling: JSONNull?? = nil,
+        vineal: JSONNull?? = nil
+    ) -> SisteringClass {
+        return SisteringClass(
+            amphicarpic: amphicarpic ?? self.amphicarpic,
+            chianti: chianti ?? self.chianti,
+            frigorific: frigorific ?? self.frigorific,
+            haplomi: haplomi ?? self.haplomi,
+            hyperkinesis: hyperkinesis ?? self.hyperkinesis,
+            laudable: laudable ?? self.laudable,
+            madwoman: madwoman ?? self.madwoman,
+            maimedly: maimedly ?? self.maimedly,
+            micropterygidae: micropterygidae ?? self.micropterygidae,
+            microrhabdus: microrhabdus ?? self.microrhabdus,
+            nondense: nondense ?? self.nondense,
+            phlebemphraxis: phlebemphraxis ?? self.phlebemphraxis,
+            redsear: redsear ?? self.redsear,
+            schismatical: schismatical ?? self.schismatical,
+            tartryl: tartryl ?? self.tartryl,
+            unabhorred: unabhorred ?? self.unabhorred,
+            undeliberateness: undeliberateness ?? self.undeliberateness,
+            unmixable: unmixable ?? self.unmixable,
+            untruckling: untruckling ?? self.untruckling,
+            vineal: vineal ?? self.vineal
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Staghunting
+final class Staghunting: Codable, Sendable {
+    let calorimetric: Int?
+    let canid: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let ditriglyphic: Int?
+    let floriferousness: Int?
+    let gamelike: Int?
+    let grig: Int?
+    let homocerc: Bool?
+    let interloan: Int?
+    let lithotomy: Int?
+    let loric: Int?
+    let membranocoriaceous: Int?
+    let membranogenic: Int?
+    let nonbookish: JSONNull?
+    let overtrump: Int?
+    let scotino: Int?
+    let seasonable: Int?
+    let sephen: Int?
+    let stigmarioid: Int?
+    let tired: Int?
+    let trifid: Int?
+    let undefeatedly: Int?
+    let ungirlish: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case calorimetric = "calorimetric"
+        case canid = "canid"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case ditriglyphic = "ditriglyphic"
+        case floriferousness = "floriferousness"
+        case gamelike = "gamelike"
+        case grig = "grig"
+        case homocerc = "homocerc"
+        case interloan = "interloan"
+        case lithotomy = "lithotomy"
+        case loric = "loric"
+        case membranocoriaceous = "membranocoriaceous"
+        case membranogenic = "membranogenic"
+        case nonbookish = "nonbookish"
+        case overtrump = "overtrump"
+        case scotino = "scotino"
+        case seasonable = "seasonable"
+        case sephen = "sephen"
+        case stigmarioid = "stigmarioid"
+        case tired = "tired"
+        case trifid = "trifid"
+        case undefeatedly = "undefeatedly"
+        case ungirlish = "ungirlish"
+    }
+
+    init(calorimetric: Int?, canid: Int?, catharticalness: Double?, chirotherium: Int?, disdiapason: String?, ditriglyphic: Int?, floriferousness: Int?, gamelike: Int?, grig: Int?, homocerc: Bool?, interloan: Int?, lithotomy: Int?, loric: Int?, membranocoriaceous: Int?, membranogenic: Int?, nonbookish: JSONNull?, overtrump: Int?, scotino: Int?, seasonable: Int?, sephen: Int?, stigmarioid: Int?, tired: Int?, trifid: Int?, undefeatedly: Int?, ungirlish: Int?) {
+        self.calorimetric = calorimetric
+        self.canid = canid
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.ditriglyphic = ditriglyphic
+        self.floriferousness = floriferousness
+        self.gamelike = gamelike
+        self.grig = grig
+        self.homocerc = homocerc
+        self.interloan = interloan
+        self.lithotomy = lithotomy
+        self.loric = loric
+        self.membranocoriaceous = membranocoriaceous
+        self.membranogenic = membranogenic
+        self.nonbookish = nonbookish
+        self.overtrump = overtrump
+        self.scotino = scotino
+        self.seasonable = seasonable
+        self.sephen = sephen
+        self.stigmarioid = stigmarioid
+        self.tired = tired
+        self.trifid = trifid
+        self.undefeatedly = undefeatedly
+        self.ungirlish = ungirlish
+    }
+}
+
+// MARK: Staghunting convenience initializers and mutators
+
+extension Staghunting {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Staghunting.self, from: data)
+        self.init(calorimetric: me.calorimetric, canid: me.canid, catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, ditriglyphic: me.ditriglyphic, floriferousness: me.floriferousness, gamelike: me.gamelike, grig: me.grig, homocerc: me.homocerc, interloan: me.interloan, lithotomy: me.lithotomy, loric: me.loric, membranocoriaceous: me.membranocoriaceous, membranogenic: me.membranogenic, nonbookish: me.nonbookish, overtrump: me.overtrump, scotino: me.scotino, seasonable: me.seasonable, sephen: me.sephen, stigmarioid: me.stigmarioid, tired: me.tired, trifid: me.trifid, undefeatedly: me.undefeatedly, ungirlish: me.ungirlish)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        calorimetric: Int?? = nil,
+        canid: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        ditriglyphic: Int?? = nil,
+        floriferousness: Int?? = nil,
+        gamelike: Int?? = nil,
+        grig: Int?? = nil,
+        homocerc: Bool?? = nil,
+        interloan: Int?? = nil,
+        lithotomy: Int?? = nil,
+        loric: Int?? = nil,
+        membranocoriaceous: Int?? = nil,
+        membranogenic: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        overtrump: Int?? = nil,
+        scotino: Int?? = nil,
+        seasonable: Int?? = nil,
+        sephen: Int?? = nil,
+        stigmarioid: Int?? = nil,
+        tired: Int?? = nil,
+        trifid: Int?? = nil,
+        undefeatedly: Int?? = nil,
+        ungirlish: Int?? = nil
+    ) -> Staghunting {
+        return Staghunting(
+            calorimetric: calorimetric ?? self.calorimetric,
+            canid: canid ?? self.canid,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ditriglyphic: ditriglyphic ?? self.ditriglyphic,
+            floriferousness: floriferousness ?? self.floriferousness,
+            gamelike: gamelike ?? self.gamelike,
+            grig: grig ?? self.grig,
+            homocerc: homocerc ?? self.homocerc,
+            interloan: interloan ?? self.interloan,
+            lithotomy: lithotomy ?? self.lithotomy,
+            loric: loric ?? self.loric,
+            membranocoriaceous: membranocoriaceous ?? self.membranocoriaceous,
+            membranogenic: membranogenic ?? self.membranogenic,
+            nonbookish: nonbookish ?? self.nonbookish,
+            overtrump: overtrump ?? self.overtrump,
+            scotino: scotino ?? self.scotino,
+            seasonable: seasonable ?? self.seasonable,
+            sephen: sephen ?? self.sephen,
+            stigmarioid: stigmarioid ?? self.stigmarioid,
+            tired: tired ?? self.tired,
+            trifid: trifid ?? self.trifid,
+            undefeatedly: undefeatedly ?? self.undefeatedly,
+            ungirlish: ungirlish ?? self.ungirlish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Stagmometer: Codable, Sendable {
+    case string(String)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Stagmometer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Stagmometer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .string(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Stimulability: Codable, Sendable {
+    case bool(Bool)
+    case integer(Int)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Stimulability.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Stimulability"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Strangleable: Codable, Sendable {
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Strangleable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Strangleable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum StrenuosityElement: Codable, Sendable {
+    case nullArray([JSONNull?])
+    case strenuosityClass(StrenuosityClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(StrenuosityClass.self) {
+            self = .strenuosityClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(StrenuosityElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for StrenuosityElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .strenuosityClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - StrenuosityClass
+final class StrenuosityClass: Codable, Sendable {
+    let bliss: Int?
+    let buccate: Int?
+    let bulletproof: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let crumblingness: Int?
+    let disdiapason: String?
+    let engagedly: Int?
+    let fightable: Int?
+    let hoariness: Int?
+    let homocerc: Bool?
+    let hypopodium: Int?
+    let luxurist: Int?
+    let mechanician: Int?
+    let nonbookish: JSONNull?
+    let onopordon: Int?
+    let podgily: Int?
+    let reformableness: Int?
+    let scatterbrains: Int?
+    let seminuria: Int?
+    let sodomite: Int?
+    let tramp: Int?
+    let undueness: Int?
+    let worthily: Int?
+    let yankeeist: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case bliss = "bliss"
+        case buccate = "buccate"
+        case bulletproof = "bulletproof"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case crumblingness = "crumblingness"
+        case disdiapason = "disdiapason"
+        case engagedly = "engagedly"
+        case fightable = "fightable"
+        case hoariness = "hoariness"
+        case homocerc = "homocerc"
+        case hypopodium = "hypopodium"
+        case luxurist = "luxurist"
+        case mechanician = "mechanician"
+        case nonbookish = "nonbookish"
+        case onopordon = "Onopordon"
+        case podgily = "podgily"
+        case reformableness = "reformableness"
+        case scatterbrains = "scatterbrains"
+        case seminuria = "seminuria"
+        case sodomite = "Sodomite"
+        case tramp = "tramp"
+        case undueness = "undueness"
+        case worthily = "worthily"
+        case yankeeist = "Yankeeist"
+    }
+
+    init(bliss: Int?, buccate: Int?, bulletproof: Int?, catharticalness: Double?, chirotherium: Int?, crumblingness: Int?, disdiapason: String?, engagedly: Int?, fightable: Int?, hoariness: Int?, homocerc: Bool?, hypopodium: Int?, luxurist: Int?, mechanician: Int?, nonbookish: JSONNull?, onopordon: Int?, podgily: Int?, reformableness: Int?, scatterbrains: Int?, seminuria: Int?, sodomite: Int?, tramp: Int?, undueness: Int?, worthily: Int?, yankeeist: Int?) {
+        self.bliss = bliss
+        self.buccate = buccate
+        self.bulletproof = bulletproof
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.crumblingness = crumblingness
+        self.disdiapason = disdiapason
+        self.engagedly = engagedly
+        self.fightable = fightable
+        self.hoariness = hoariness
+        self.homocerc = homocerc
+        self.hypopodium = hypopodium
+        self.luxurist = luxurist
+        self.mechanician = mechanician
+        self.nonbookish = nonbookish
+        self.onopordon = onopordon
+        self.podgily = podgily
+        self.reformableness = reformableness
+        self.scatterbrains = scatterbrains
+        self.seminuria = seminuria
+        self.sodomite = sodomite
+        self.tramp = tramp
+        self.undueness = undueness
+        self.worthily = worthily
+        self.yankeeist = yankeeist
+    }
+}
+
+// MARK: StrenuosityClass convenience initializers and mutators
+
+extension StrenuosityClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(StrenuosityClass.self, from: data)
+        self.init(bliss: me.bliss, buccate: me.buccate, bulletproof: me.bulletproof, catharticalness: me.catharticalness, chirotherium: me.chirotherium, crumblingness: me.crumblingness, disdiapason: me.disdiapason, engagedly: me.engagedly, fightable: me.fightable, hoariness: me.hoariness, homocerc: me.homocerc, hypopodium: me.hypopodium, luxurist: me.luxurist, mechanician: me.mechanician, nonbookish: me.nonbookish, onopordon: me.onopordon, podgily: me.podgily, reformableness: me.reformableness, scatterbrains: me.scatterbrains, seminuria: me.seminuria, sodomite: me.sodomite, tramp: me.tramp, undueness: me.undueness, worthily: me.worthily, yankeeist: me.yankeeist)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        bliss: Int?? = nil,
+        buccate: Int?? = nil,
+        bulletproof: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        crumblingness: Int?? = nil,
+        disdiapason: String?? = nil,
+        engagedly: Int?? = nil,
+        fightable: Int?? = nil,
+        hoariness: Int?? = nil,
+        homocerc: Bool?? = nil,
+        hypopodium: Int?? = nil,
+        luxurist: Int?? = nil,
+        mechanician: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        onopordon: Int?? = nil,
+        podgily: Int?? = nil,
+        reformableness: Int?? = nil,
+        scatterbrains: Int?? = nil,
+        seminuria: Int?? = nil,
+        sodomite: Int?? = nil,
+        tramp: Int?? = nil,
+        undueness: Int?? = nil,
+        worthily: Int?? = nil,
+        yankeeist: Int?? = nil
+    ) -> StrenuosityClass {
+        return StrenuosityClass(
+            bliss: bliss ?? self.bliss,
+            buccate: buccate ?? self.buccate,
+            bulletproof: bulletproof ?? self.bulletproof,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            crumblingness: crumblingness ?? self.crumblingness,
+            disdiapason: disdiapason ?? self.disdiapason,
+            engagedly: engagedly ?? self.engagedly,
+            fightable: fightable ?? self.fightable,
+            hoariness: hoariness ?? self.hoariness,
+            homocerc: homocerc ?? self.homocerc,
+            hypopodium: hypopodium ?? self.hypopodium,
+            luxurist: luxurist ?? self.luxurist,
+            mechanician: mechanician ?? self.mechanician,
+            nonbookish: nonbookish ?? self.nonbookish,
+            onopordon: onopordon ?? self.onopordon,
+            podgily: podgily ?? self.podgily,
+            reformableness: reformableness ?? self.reformableness,
+            scatterbrains: scatterbrains ?? self.scatterbrains,
+            seminuria: seminuria ?? self.seminuria,
+            sodomite: sodomite ?? self.sodomite,
+            tramp: tramp ?? self.tramp,
+            undueness: undueness ?? self.undueness,
+            worthily: worthily ?? self.worthily,
+            yankeeist: yankeeist ?? self.yankeeist
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Tabaxir: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Tabaxir.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Tabaxir"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Talpiform: Codable, Sendable {
+    case double(Double)
+    case quebrachineClass(QuebrachineClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Talpiform.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Talpiform"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Thwack: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+    case quebrachineClass(QuebrachineClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Thwack.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Thwack"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Tortricine: Codable, Sendable {
+    case quebrachineClass(QuebrachineClass)
+    case unionArray([Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int?].self) {
+            self = .unionArray(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Tortricine.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Tortricine"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        case .unionArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum TruantcyElement: Codable, Sendable {
+    case bool(Bool)
+    case truantcyClass(TruantcyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(TruantcyClass.self) {
+            self = .truantcyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(TruantcyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for TruantcyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .truantcyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - TruantcyClass
+final class TruantcyClass: Codable, Sendable {
+    let alfiona: JSONNull?
+    let ascaridiasis: JSONNull?
+    let bungey: JSONNull?
+    let catharticalness: Double?
+    let ceroxyle: JSONNull?
+    let chirotherium: Int?
+    let chorology: JSONNull?
+    let disdiapason: String?
+    let enmarble: JSONNull?
+    let epeira: JSONNull?
+    let eurylaimi: JSONNull?
+    let germination: JSONNull?
+    let hallelujah: JSONNull?
+    let homocerc: Bool?
+    let lev: JSONNull?
+    let mouthing: JSONNull?
+    let nonbookish: JSONNull?
+    let philliloo: JSONNull?
+    let planetal: JSONNull?
+    let poney: JSONNull?
+    let punctualist: JSONNull?
+    let returnlessly: JSONNull?
+    let skelder: JSONNull?
+    let windwaywardly: JSONNull?
+    let yuman: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case alfiona = "alfiona"
+        case ascaridiasis = "ascaridiasis"
+        case bungey = "bungey"
+        case catharticalness = "catharticalness"
+        case ceroxyle = "ceroxyle"
+        case chirotherium = "Chirotherium"
+        case chorology = "chorology"
+        case disdiapason = "disdiapason"
+        case enmarble = "enmarble"
+        case epeira = "Epeira"
+        case eurylaimi = "Eurylaimi"
+        case germination = "germination"
+        case hallelujah = "hallelujah"
+        case homocerc = "homocerc"
+        case lev = "lev"
+        case mouthing = "mouthing"
+        case nonbookish = "nonbookish"
+        case philliloo = "philliloo"
+        case planetal = "planetal"
+        case poney = "poney"
+        case punctualist = "punctualist"
+        case returnlessly = "returnlessly"
+        case skelder = "skelder"
+        case windwaywardly = "windwaywardly"
+        case yuman = "Yuman"
+    }
+
+    init(alfiona: JSONNull?, ascaridiasis: JSONNull?, bungey: JSONNull?, catharticalness: Double?, ceroxyle: JSONNull?, chirotherium: Int?, chorology: JSONNull?, disdiapason: String?, enmarble: JSONNull?, epeira: JSONNull?, eurylaimi: JSONNull?, germination: JSONNull?, hallelujah: JSONNull?, homocerc: Bool?, lev: JSONNull?, mouthing: JSONNull?, nonbookish: JSONNull?, philliloo: JSONNull?, planetal: JSONNull?, poney: JSONNull?, punctualist: JSONNull?, returnlessly: JSONNull?, skelder: JSONNull?, windwaywardly: JSONNull?, yuman: JSONNull?) {
+        self.alfiona = alfiona
+        self.ascaridiasis = ascaridiasis
+        self.bungey = bungey
+        self.catharticalness = catharticalness
+        self.ceroxyle = ceroxyle
+        self.chirotherium = chirotherium
+        self.chorology = chorology
+        self.disdiapason = disdiapason
+        self.enmarble = enmarble
+        self.epeira = epeira
+        self.eurylaimi = eurylaimi
+        self.germination = germination
+        self.hallelujah = hallelujah
+        self.homocerc = homocerc
+        self.lev = lev
+        self.mouthing = mouthing
+        self.nonbookish = nonbookish
+        self.philliloo = philliloo
+        self.planetal = planetal
+        self.poney = poney
+        self.punctualist = punctualist
+        self.returnlessly = returnlessly
+        self.skelder = skelder
+        self.windwaywardly = windwaywardly
+        self.yuman = yuman
+    }
+}
+
+// MARK: TruantcyClass convenience initializers and mutators
+
+extension TruantcyClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(TruantcyClass.self, from: data)
+        self.init(alfiona: me.alfiona, ascaridiasis: me.ascaridiasis, bungey: me.bungey, catharticalness: me.catharticalness, ceroxyle: me.ceroxyle, chirotherium: me.chirotherium, chorology: me.chorology, disdiapason: me.disdiapason, enmarble: me.enmarble, epeira: me.epeira, eurylaimi: me.eurylaimi, germination: me.germination, hallelujah: me.hallelujah, homocerc: me.homocerc, lev: me.lev, mouthing: me.mouthing, nonbookish: me.nonbookish, philliloo: me.philliloo, planetal: me.planetal, poney: me.poney, punctualist: me.punctualist, returnlessly: me.returnlessly, skelder: me.skelder, windwaywardly: me.windwaywardly, yuman: me.yuman)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        alfiona: JSONNull?? = nil,
+        ascaridiasis: JSONNull?? = nil,
+        bungey: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        ceroxyle: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        chorology: JSONNull?? = nil,
+        disdiapason: String?? = nil,
+        enmarble: JSONNull?? = nil,
+        epeira: JSONNull?? = nil,
+        eurylaimi: JSONNull?? = nil,
+        germination: JSONNull?? = nil,
+        hallelujah: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        lev: JSONNull?? = nil,
+        mouthing: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        philliloo: JSONNull?? = nil,
+        planetal: JSONNull?? = nil,
+        poney: JSONNull?? = nil,
+        punctualist: JSONNull?? = nil,
+        returnlessly: JSONNull?? = nil,
+        skelder: JSONNull?? = nil,
+        windwaywardly: JSONNull?? = nil,
+        yuman: JSONNull?? = nil
+    ) -> TruantcyClass {
+        return TruantcyClass(
+            alfiona: alfiona ?? self.alfiona,
+            ascaridiasis: ascaridiasis ?? self.ascaridiasis,
+            bungey: bungey ?? self.bungey,
+            catharticalness: catharticalness ?? self.catharticalness,
+            ceroxyle: ceroxyle ?? self.ceroxyle,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chorology: chorology ?? self.chorology,
+            disdiapason: disdiapason ?? self.disdiapason,
+            enmarble: enmarble ?? self.enmarble,
+            epeira: epeira ?? self.epeira,
+            eurylaimi: eurylaimi ?? self.eurylaimi,
+            germination: germination ?? self.germination,
+            hallelujah: hallelujah ?? self.hallelujah,
+            homocerc: homocerc ?? self.homocerc,
+            lev: lev ?? self.lev,
+            mouthing: mouthing ?? self.mouthing,
+            nonbookish: nonbookish ?? self.nonbookish,
+            philliloo: philliloo ?? self.philliloo,
+            planetal: planetal ?? self.planetal,
+            poney: poney ?? self.poney,
+            punctualist: punctualist ?? self.punctualist,
+            returnlessly: returnlessly ?? self.returnlessly,
+            skelder: skelder ?? self.skelder,
+            windwaywardly: windwaywardly ?? self.windwaywardly,
+            yuman: yuman ?? self.yuman
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Unbeginning: Codable, Sendable {
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unbeginning.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unbeginning"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Undesirability: Codable, Sendable {
+    case integerArray([Int])
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Undesirability.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Undesirability"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Unerasing: Codable, Sendable {
+    case integer(Int)
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unerasing.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unerasing"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Unguentarium: Codable, Sendable {
+    case integer(Int)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Unguentarium.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unguentarium"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum UnimpeachablyElement: Codable, Sendable {
+    case bool(Bool)
+    case unimpeachablyClass(UnimpeachablyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(UnimpeachablyClass.self) {
+            self = .unimpeachablyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(UnimpeachablyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for UnimpeachablyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .unimpeachablyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - UnimpeachablyClass
+final class UnimpeachablyClass: Codable, Sendable {
+    let acerin: Int?
+    let bobadil: Int?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let chlorophylligenous: Int?
+    let conversational: Int?
+    let demiowl: Int?
+    let disdiapason: String?
+    let ectorhinal: Int?
+    let gamblesomeness: Int?
+    let homocerc: Bool?
+    let irrorate: Int?
+    let kindergartening: Int?
+    let lateritic: Int?
+    let mespil: Int?
+    let misconfiguration: Int?
+    let nonbookish: JSONNull?
+    let planometry: Int?
+    let quiina: Int?
+    let robert: Int?
+    let rot: Int?
+    let subcinctorium: Int?
+    let tussocker: Int?
+    let ultraproud: Int?
+    let unsuggestedness: Int?
+
+    enum CodingKeys: String, CodingKey {
+        case acerin = "acerin"
+        case bobadil = "Bobadil"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case chlorophylligenous = "chlorophylligenous"
+        case conversational = "conversational"
+        case demiowl = "demiowl"
+        case disdiapason = "disdiapason"
+        case ectorhinal = "ectorhinal"
+        case gamblesomeness = "gamblesomeness"
+        case homocerc = "homocerc"
+        case irrorate = "irrorate"
+        case kindergartening = "kindergartening"
+        case lateritic = "lateritic"
+        case mespil = "mespil"
+        case misconfiguration = "misconfiguration"
+        case nonbookish = "nonbookish"
+        case planometry = "planometry"
+        case quiina = "Quiina"
+        case robert = "Robert"
+        case rot = "rot"
+        case subcinctorium = "subcinctorium"
+        case tussocker = "tussocker"
+        case ultraproud = "ultraproud"
+        case unsuggestedness = "unsuggestedness"
+    }
+
+    init(acerin: Int?, bobadil: Int?, catharticalness: Double?, chirotherium: Int?, chlorophylligenous: Int?, conversational: Int?, demiowl: Int?, disdiapason: String?, ectorhinal: Int?, gamblesomeness: Int?, homocerc: Bool?, irrorate: Int?, kindergartening: Int?, lateritic: Int?, mespil: Int?, misconfiguration: Int?, nonbookish: JSONNull?, planometry: Int?, quiina: Int?, robert: Int?, rot: Int?, subcinctorium: Int?, tussocker: Int?, ultraproud: Int?, unsuggestedness: Int?) {
+        self.acerin = acerin
+        self.bobadil = bobadil
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.chlorophylligenous = chlorophylligenous
+        self.conversational = conversational
+        self.demiowl = demiowl
+        self.disdiapason = disdiapason
+        self.ectorhinal = ectorhinal
+        self.gamblesomeness = gamblesomeness
+        self.homocerc = homocerc
+        self.irrorate = irrorate
+        self.kindergartening = kindergartening
+        self.lateritic = lateritic
+        self.mespil = mespil
+        self.misconfiguration = misconfiguration
+        self.nonbookish = nonbookish
+        self.planometry = planometry
+        self.quiina = quiina
+        self.robert = robert
+        self.rot = rot
+        self.subcinctorium = subcinctorium
+        self.tussocker = tussocker
+        self.ultraproud = ultraproud
+        self.unsuggestedness = unsuggestedness
+    }
+}
+
+// MARK: UnimpeachablyClass convenience initializers and mutators
+
+extension UnimpeachablyClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(UnimpeachablyClass.self, from: data)
+        self.init(acerin: me.acerin, bobadil: me.bobadil, catharticalness: me.catharticalness, chirotherium: me.chirotherium, chlorophylligenous: me.chlorophylligenous, conversational: me.conversational, demiowl: me.demiowl, disdiapason: me.disdiapason, ectorhinal: me.ectorhinal, gamblesomeness: me.gamblesomeness, homocerc: me.homocerc, irrorate: me.irrorate, kindergartening: me.kindergartening, lateritic: me.lateritic, mespil: me.mespil, misconfiguration: me.misconfiguration, nonbookish: me.nonbookish, planometry: me.planometry, quiina: me.quiina, robert: me.robert, rot: me.rot, subcinctorium: me.subcinctorium, tussocker: me.tussocker, ultraproud: me.ultraproud, unsuggestedness: me.unsuggestedness)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acerin: Int?? = nil,
+        bobadil: Int?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        chlorophylligenous: Int?? = nil,
+        conversational: Int?? = nil,
+        demiowl: Int?? = nil,
+        disdiapason: String?? = nil,
+        ectorhinal: Int?? = nil,
+        gamblesomeness: Int?? = nil,
+        homocerc: Bool?? = nil,
+        irrorate: Int?? = nil,
+        kindergartening: Int?? = nil,
+        lateritic: Int?? = nil,
+        mespil: Int?? = nil,
+        misconfiguration: Int?? = nil,
+        nonbookish: JSONNull?? = nil,
+        planometry: Int?? = nil,
+        quiina: Int?? = nil,
+        robert: Int?? = nil,
+        rot: Int?? = nil,
+        subcinctorium: Int?? = nil,
+        tussocker: Int?? = nil,
+        ultraproud: Int?? = nil,
+        unsuggestedness: Int?? = nil
+    ) -> UnimpeachablyClass {
+        return UnimpeachablyClass(
+            acerin: acerin ?? self.acerin,
+            bobadil: bobadil ?? self.bobadil,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            chlorophylligenous: chlorophylligenous ?? self.chlorophylligenous,
+            conversational: conversational ?? self.conversational,
+            demiowl: demiowl ?? self.demiowl,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ectorhinal: ectorhinal ?? self.ectorhinal,
+            gamblesomeness: gamblesomeness ?? self.gamblesomeness,
+            homocerc: homocerc ?? self.homocerc,
+            irrorate: irrorate ?? self.irrorate,
+            kindergartening: kindergartening ?? self.kindergartening,
+            lateritic: lateritic ?? self.lateritic,
+            mespil: mespil ?? self.mespil,
+            misconfiguration: misconfiguration ?? self.misconfiguration,
+            nonbookish: nonbookish ?? self.nonbookish,
+            planometry: planometry ?? self.planometry,
+            quiina: quiina ?? self.quiina,
+            robert: robert ?? self.robert,
+            rot: rot ?? self.rot,
+            subcinctorium: subcinctorium ?? self.subcinctorium,
+            tussocker: tussocker ?? self.tussocker,
+            ultraproud: ultraproud ?? self.ultraproud,
+            unsuggestedness: unsuggestedness ?? self.unsuggestedness
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Unmortgaged: Codable, Sendable {
+    case double(Double)
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Unmortgaged.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unmortgaged"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Unobstructed: Codable, Sendable {
+    case integer(Int)
+    case quebrachineClass(QuebrachineClass)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Unobstructed.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unobstructed"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Unreceptivity: Codable, Sendable {
+    case integer(Int)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unreceptivity.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unreceptivity"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Unsatisfactoriness: Codable, Sendable {
+    case bool(Bool)
+    case integer(Int)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unsatisfactoriness.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unsatisfactoriness"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum UnstressedElement: Codable, Sendable {
+    case bool(Bool)
+    case string(String)
+    case unstressedClass(UnstressedClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(UnstressedClass.self) {
+            self = .unstressedClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(UnstressedElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for UnstressedElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .unstressedClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - UnstressedClass
+final class UnstressedClass: Codable, Sendable {
+    let alain: JSONNull?
+    let amphirhina: JSONNull?
+    let antimachinery: JSONNull?
+    let coldish: JSONNull?
+    let crantara: JSONNull?
+    let distinguishing: JSONNull?
+    let elytroposis: JSONNull?
+    let gentianwort: JSONNull?
+    let heliosis: JSONNull?
+    let instrumental: JSONNull?
+    let introinflection: JSONNull?
+    let kala: JSONNull?
+    let lincolnian: JSONNull?
+    let metad: JSONNull?
+    let sarcophilus: JSONNull?
+    let swingingly: JSONNull?
+    let unconformity: JSONNull?
+    let undecreed: JSONNull?
+    let venerable: JSONNull?
+    let vowellessness: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case alain = "Alain"
+        case amphirhina = "Amphirhina"
+        case antimachinery = "antimachinery"
+        case coldish = "coldish"
+        case crantara = "crantara"
+        case distinguishing = "distinguishing"
+        case elytroposis = "elytroposis"
+        case gentianwort = "gentianwort"
+        case heliosis = "heliosis"
+        case instrumental = "instrumental"
+        case introinflection = "introinflection"
+        case kala = "kala"
+        case lincolnian = "Lincolnian"
+        case metad = "metad"
+        case sarcophilus = "Sarcophilus"
+        case swingingly = "swingingly"
+        case unconformity = "unconformity"
+        case undecreed = "undecreed"
+        case venerable = "venerable"
+        case vowellessness = "vowellessness"
+    }
+
+    init(alain: JSONNull?, amphirhina: JSONNull?, antimachinery: JSONNull?, coldish: JSONNull?, crantara: JSONNull?, distinguishing: JSONNull?, elytroposis: JSONNull?, gentianwort: JSONNull?, heliosis: JSONNull?, instrumental: JSONNull?, introinflection: JSONNull?, kala: JSONNull?, lincolnian: JSONNull?, metad: JSONNull?, sarcophilus: JSONNull?, swingingly: JSONNull?, unconformity: JSONNull?, undecreed: JSONNull?, venerable: JSONNull?, vowellessness: JSONNull?) {
+        self.alain = alain
+        self.amphirhina = amphirhina
+        self.antimachinery = antimachinery
+        self.coldish = coldish
+        self.crantara = crantara
+        self.distinguishing = distinguishing
+        self.elytroposis = elytroposis
+        self.gentianwort = gentianwort
+        self.heliosis = heliosis
+        self.instrumental = instrumental
+        self.introinflection = introinflection
+        self.kala = kala
+        self.lincolnian = lincolnian
+        self.metad = metad
+        self.sarcophilus = sarcophilus
+        self.swingingly = swingingly
+        self.unconformity = unconformity
+        self.undecreed = undecreed
+        self.venerable = venerable
+        self.vowellessness = vowellessness
+    }
+}
+
+// MARK: UnstressedClass convenience initializers and mutators
+
+extension UnstressedClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(UnstressedClass.self, from: data)
+        self.init(alain: me.alain, amphirhina: me.amphirhina, antimachinery: me.antimachinery, coldish: me.coldish, crantara: me.crantara, distinguishing: me.distinguishing, elytroposis: me.elytroposis, gentianwort: me.gentianwort, heliosis: me.heliosis, instrumental: me.instrumental, introinflection: me.introinflection, kala: me.kala, lincolnian: me.lincolnian, metad: me.metad, sarcophilus: me.sarcophilus, swingingly: me.swingingly, unconformity: me.unconformity, undecreed: me.undecreed, venerable: me.venerable, vowellessness: me.vowellessness)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        alain: JSONNull?? = nil,
+        amphirhina: JSONNull?? = nil,
+        antimachinery: JSONNull?? = nil,
+        coldish: JSONNull?? = nil,
+        crantara: JSONNull?? = nil,
+        distinguishing: JSONNull?? = nil,
+        elytroposis: JSONNull?? = nil,
+        gentianwort: JSONNull?? = nil,
+        heliosis: JSONNull?? = nil,
+        instrumental: JSONNull?? = nil,
+        introinflection: JSONNull?? = nil,
+        kala: JSONNull?? = nil,
+        lincolnian: JSONNull?? = nil,
+        metad: JSONNull?? = nil,
+        sarcophilus: JSONNull?? = nil,
+        swingingly: JSONNull?? = nil,
+        unconformity: JSONNull?? = nil,
+        undecreed: JSONNull?? = nil,
+        venerable: JSONNull?? = nil,
+        vowellessness: JSONNull?? = nil
+    ) -> UnstressedClass {
+        return UnstressedClass(
+            alain: alain ?? self.alain,
+            amphirhina: amphirhina ?? self.amphirhina,
+            antimachinery: antimachinery ?? self.antimachinery,
+            coldish: coldish ?? self.coldish,
+            crantara: crantara ?? self.crantara,
+            distinguishing: distinguishing ?? self.distinguishing,
+            elytroposis: elytroposis ?? self.elytroposis,
+            gentianwort: gentianwort ?? self.gentianwort,
+            heliosis: heliosis ?? self.heliosis,
+            instrumental: instrumental ?? self.instrumental,
+            introinflection: introinflection ?? self.introinflection,
+            kala: kala ?? self.kala,
+            lincolnian: lincolnian ?? self.lincolnian,
+            metad: metad ?? self.metad,
+            sarcophilus: sarcophilus ?? self.sarcophilus,
+            swingingly: swingingly ?? self.swingingly,
+            unconformity: unconformity ?? self.unconformity,
+            undecreed: undecreed ?? self.undecreed,
+            venerable: venerable ?? self.venerable,
+            vowellessness: vowellessness ?? self.vowellessness
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Untasked: Codable, Sendable {
+    case double(Double)
+    case integerMap([String: Int])
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Untasked.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Untasked"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Unvarying: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Unvarying.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Unvarying"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Vehemently: Codable, Sendable {
+    case bool(Bool)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Vehemently.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Vehemently"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Whitepot: Codable, Sendable {
+    case double(Double)
+    case quebrachineClass(QuebrachineClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(QuebrachineClass.self) {
+            self = .quebrachineClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Whitepot.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Whitepot"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .quebrachineClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum WrothyElement: Codable, Sendable {
+    case nullArray([JSONNull?])
+    case wrothyClass(WrothyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(WrothyClass.self) {
+            self = .wrothyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(WrothyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for WrothyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .nullArray(let x):
+            try container.encode(x)
+        case .wrothyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - WrothyClass
+final class WrothyClass: Codable, Sendable {
+    let aeschynanthus: JSONNull?
+    let aquiferous: JSONNull?
+    let cheapener: JSONNull?
+    let enumeration: JSONNull?
+    let ephesine: JSONNull?
+    let escadrille: JSONNull?
+    let estrous: JSONNull?
+    let interestedly: JSONNull?
+    let katakinetomer: JSONNull?
+    let mortification: JSONNull?
+    let morula: JSONNull?
+    let orthosymmetrical: JSONNull?
+    let overbark: JSONNull?
+    let politist: JSONNull?
+    let qualified: JSONNull?
+    let sphenomalar: JSONNull?
+    let throatful: JSONNull?
+    let transhumance: JSONNull?
+    let triandrian: JSONNull?
+    let unbooked: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case aeschynanthus = "Aeschynanthus"
+        case aquiferous = "aquiferous"
+        case cheapener = "cheapener"
+        case enumeration = "enumeration"
+        case ephesine = "Ephesine"
+        case escadrille = "escadrille"
+        case estrous = "estrous"
+        case interestedly = "interestedly"
+        case katakinetomer = "katakinetomer"
+        case mortification = "mortification"
+        case morula = "morula"
+        case orthosymmetrical = "orthosymmetrical"
+        case overbark = "overbark"
+        case politist = "politist"
+        case qualified = "qualified"
+        case sphenomalar = "sphenomalar"
+        case throatful = "throatful"
+        case transhumance = "transhumance"
+        case triandrian = "triandrian"
+        case unbooked = "unbooked"
+    }
+
+    init(aeschynanthus: JSONNull?, aquiferous: JSONNull?, cheapener: JSONNull?, enumeration: JSONNull?, ephesine: JSONNull?, escadrille: JSONNull?, estrous: JSONNull?, interestedly: JSONNull?, katakinetomer: JSONNull?, mortification: JSONNull?, morula: JSONNull?, orthosymmetrical: JSONNull?, overbark: JSONNull?, politist: JSONNull?, qualified: JSONNull?, sphenomalar: JSONNull?, throatful: JSONNull?, transhumance: JSONNull?, triandrian: JSONNull?, unbooked: JSONNull?) {
+        self.aeschynanthus = aeschynanthus
+        self.aquiferous = aquiferous
+        self.cheapener = cheapener
+        self.enumeration = enumeration
+        self.ephesine = ephesine
+        self.escadrille = escadrille
+        self.estrous = estrous
+        self.interestedly = interestedly
+        self.katakinetomer = katakinetomer
+        self.mortification = mortification
+        self.morula = morula
+        self.orthosymmetrical = orthosymmetrical
+        self.overbark = overbark
+        self.politist = politist
+        self.qualified = qualified
+        self.sphenomalar = sphenomalar
+        self.throatful = throatful
+        self.transhumance = transhumance
+        self.triandrian = triandrian
+        self.unbooked = unbooked
+    }
+}
+
+// MARK: WrothyClass convenience initializers and mutators
+
+extension WrothyClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(WrothyClass.self, from: data)
+        self.init(aeschynanthus: me.aeschynanthus, aquiferous: me.aquiferous, cheapener: me.cheapener, enumeration: me.enumeration, ephesine: me.ephesine, escadrille: me.escadrille, estrous: me.estrous, interestedly: me.interestedly, katakinetomer: me.katakinetomer, mortification: me.mortification, morula: me.morula, orthosymmetrical: me.orthosymmetrical, overbark: me.overbark, politist: me.politist, qualified: me.qualified, sphenomalar: me.sphenomalar, throatful: me.throatful, transhumance: me.transhumance, triandrian: me.triandrian, unbooked: me.unbooked)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        aeschynanthus: JSONNull?? = nil,
+        aquiferous: JSONNull?? = nil,
+        cheapener: JSONNull?? = nil,
+        enumeration: JSONNull?? = nil,
+        ephesine: JSONNull?? = nil,
+        escadrille: JSONNull?? = nil,
+        estrous: JSONNull?? = nil,
+        interestedly: JSONNull?? = nil,
+        katakinetomer: JSONNull?? = nil,
+        mortification: JSONNull?? = nil,
+        morula: JSONNull?? = nil,
+        orthosymmetrical: JSONNull?? = nil,
+        overbark: JSONNull?? = nil,
+        politist: JSONNull?? = nil,
+        qualified: JSONNull?? = nil,
+        sphenomalar: JSONNull?? = nil,
+        throatful: JSONNull?? = nil,
+        transhumance: JSONNull?? = nil,
+        triandrian: JSONNull?? = nil,
+        unbooked: JSONNull?? = nil
+    ) -> WrothyClass {
+        return WrothyClass(
+            aeschynanthus: aeschynanthus ?? self.aeschynanthus,
+            aquiferous: aquiferous ?? self.aquiferous,
+            cheapener: cheapener ?? self.cheapener,
+            enumeration: enumeration ?? self.enumeration,
+            ephesine: ephesine ?? self.ephesine,
+            escadrille: escadrille ?? self.escadrille,
+            estrous: estrous ?? self.estrous,
+            interestedly: interestedly ?? self.interestedly,
+            katakinetomer: katakinetomer ?? self.katakinetomer,
+            mortification: mortification ?? self.mortification,
+            morula: morula ?? self.morula,
+            orthosymmetrical: orthosymmetrical ?? self.orthosymmetrical,
+            overbark: overbark ?? self.overbark,
+            politist: politist ?? self.politist,
+            qualified: qualified ?? self.qualified,
+            sphenomalar: sphenomalar ?? self.sphenomalar,
+            throatful: throatful ?? self.throatful,
+            transhumance: transhumance ?? self.transhumance,
+            triandrian: triandrian ?? self.triandrian,
+            unbooked: unbooked ?? self.unbooked
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+final class JSONNull: Codable, Hashable, Sendable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    public func hash(into hasher: inout Hasher) {
+        hasher.combine(0)
+    }
+
+    public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/base/swift/test/inputs/json/priority/keywords.json/default/quicktype.swift b/head/swift/test/inputs/json/priority/keywords.json/default/quicktype.swift
index 77836ce..542e12e 100644
--- a/base/swift/test/inputs/json/priority/keywords.json/default/quicktype.swift
+++ b/head/swift/test/inputs/json/priority/keywords.json/default/quicktype.swift
@@ -9596,6 +9596,7 @@ struct Obj4: Codable {
     let requires: Requires
     let restrict: Restrict
     let retain: Retain
+    let s: S
     let sbyte: Sbyte
     let sealed: Sealed
     let sel: Sel
@@ -9663,6 +9664,7 @@ struct Obj4: Codable {
         case requires = "requires"
         case restrict = "restrict"
         case retain = "retain"
+        case s = "s"
         case sbyte = "sbyte"
         case sealed = "sealed"
         case sel = "SEL"
@@ -9750,6 +9752,7 @@ extension Obj4 {
         requires: Requires? = nil,
         restrict: Restrict? = nil,
         retain: Retain? = nil,
+        s: S? = nil,
         sbyte: Sbyte? = nil,
         sealed: Sealed? = nil,
         sel: Sel? = nil,
@@ -9817,6 +9820,7 @@ extension Obj4 {
             requires: requires ?? self.requires,
             restrict: restrict ?? self.restrict,
             retain: retain ?? self.retain,
+            s: s ?? self.s,
             sbyte: sbyte ?? self.sbyte,
             sealed: sealed ?? self.sealed,
             sel: sel ?? self.sel,
@@ -11269,6 +11273,50 @@ extension Retain {
     }
 }
 
+// MARK: - S
+struct S: Codable {
+    let s: Int
+
+    enum CodingKeys: String, CodingKey {
+        case s = "s"
+    }
+}
+
+// MARK: S convenience initializers and mutators
+
+extension S {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(S.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        s: Int? = nil
+    ) -> S {
+        return S(
+            s: s ?? self.s
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
 // MARK: - Sbyte
 struct Sbyte: Codable {
     let sbyte: Int
diff --git a/head/swift/test/inputs/json/samples/copy-with-property.json/default/quicktype.swift b/head/swift/test/inputs/json/samples/copy-with-property.json/default/quicktype.swift
new file mode 100644
index 0000000..853e5db
--- /dev/null
+++ b/head/swift/test/inputs/json/samples/copy-with-property.json/default/quicktype.swift
@@ -0,0 +1,90 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+import Foundation
+
+// MARK: - TopLevel
+struct TopLevel: Codable {
+    let copyWith: Int
+    let name: String
+
+    enum CodingKeys: String, CodingKey {
+        case copyWith = "copyWith"
+        case name = "name"
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(TopLevel.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        copyWith: Int? = nil,
+        name: String? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            copyWith: copyWith ?? self.copyWith,
+            name: name ?? self.name
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
diff --git a/head/swift/test/inputs/json/samples/objc-control-characters.json/default/quicktype.swift b/head/swift/test/inputs/json/samples/objc-control-characters.json/default/quicktype.swift
new file mode 100644
index 0000000..5c9eab8
--- /dev/null
+++ b/head/swift/test/inputs/json/samples/objc-control-characters.json/default/quicktype.swift
@@ -0,0 +1,95 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+import Foundation
+
+// MARK: - TopLevel
+struct TopLevel: Codable {
+    let literal: String
+    let values: [Value]
+
+    enum CodingKeys: String, CodingKey {
+        case literal = "literal"
+        case values = "values"
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    init(data: Data) throws {
+        self = try newJSONDecoder().decode(TopLevel.self, from: data)
+    }
+
+    init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        literal: String? = nil,
+        values: [Value]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            literal: literal ?? self.literal,
+            values: values ?? self.values
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Value: String, Codable {
+    case c0 = "c0\u{1}\u{1b}\u{1f}"
+    case c1 = "c1\u{7f}\u{80}\u{85}\u{9f}"
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
diff --git a/head/swift-sendable-objective-c/test/inputs/json/priority/combinations1.json/default/quicktype.swift b/head/swift-sendable-objective-c/test/inputs/json/priority/combinations1.json/default/quicktype.swift
new file mode 100644
index 0000000..78d4089
--- /dev/null
+++ b/head/swift-sendable-objective-c/test/inputs/json/priority/combinations1.json/default/quicktype.swift
@@ -0,0 +1,3178 @@
+// This file was generated from JSON Schema using quicktype, do not modify it directly.
+// To parse the JSON, add this file to your project and do:
+//
+//   let topLevel = try TopLevel(json)
+
+import Foundation
+
+// MARK: - TopLevel
+@objcMembers final class TopLevel: NSObject, Codable, Sendable {
+    let centrodesmose: String
+    let cerograph: [CerographElement]
+    let chemotherapeutics: [ChemotherapeuticElement]
+    let cimelia: [CimeliaElement]
+    let citrated: Int
+    let clinodome: [Clinodome]
+    let coadjust: [CoadjustElement]
+    let consilience: [Consilience]
+    let constructor: [Constructor]
+    let continuative: [Continuative]
+    let credulity: [CredulityElement]
+    let creviced: [Creviced]
+    let cubiculum: [[Int?]]
+    let deruralize: [DeruralizeElement]
+    let diaereses: [DiaereseElement]
+    let dissolution: [[JSONNull?]?]
+    let downstroke: [Downstroke]
+    let electrotautomerism: [Double?]
+    let eleutheromania: [Eleutheromania]
+    let encrust: Encrust
+    let entomoid: [Entomoid]
+    let epipaleolithic: [Epipaleolithic]
+    let expropriable: [Expropriable]
+    let faggingly: [FagginglyElement]
+    let fenks: [FenkElement]
+    let flagmaking: [FlagmakingElement]
+    let fluorometer: [Fluorometer]
+    let fulsome: [Int?]
+    let fuzzy: [Fuzzy]
+    let gardenwards: [Gardenward]
+    let generalissimo: [Generalissimo]
+    let habeas: [[String: Int]?]
+    let hemicrystalline: [Hemicrystalline]
+    let hemocoele: [HemocoeleElement]
+    let hoister: [Hoister]
+    let hyperpiesis: [Hyperpiesi]
+    let hyppish: [Hyppish]
+    let idealizer: [Idealizer]
+    let incrustator: [Incrustator]
+    let intentiveness: [Intentiveness]
+    let interacinar: Interacinar
+    let intercorrelation: [[Int]?]
+    let jacutinga: [Jacutinga]
+
+    enum CodingKeys: String, CodingKey {
+        case centrodesmose = "centrodesmose"
+        case cerograph = "cerograph"
+        case chemotherapeutics = "chemotherapeutics"
+        case cimelia = "cimelia"
+        case citrated = "citrated"
+        case clinodome = "clinodome"
+        case coadjust = "coadjust"
+        case consilience = "consilience"
+        case constructor = "constructor"
+        case continuative = "continuative"
+        case credulity = "credulity"
+        case creviced = "creviced"
+        case cubiculum = "cubiculum"
+        case deruralize = "deruralize"
+        case diaereses = "diaereses"
+        case dissolution = "dissolution"
+        case downstroke = "downstroke"
+        case electrotautomerism = "electrotautomerism"
+        case eleutheromania = "eleutheromania"
+        case encrust = "encrust"
+        case entomoid = "entomoid"
+        case epipaleolithic = "epipaleolithic"
+        case expropriable = "expropriable"
+        case faggingly = "faggingly"
+        case fenks = "fenks"
+        case flagmaking = "flagmaking"
+        case fluorometer = "fluorometer"
+        case fulsome = "fulsome"
+        case fuzzy = "fuzzy"
+        case gardenwards = "gardenwards"
+        case generalissimo = "generalissimo"
+        case habeas = "habeas"
+        case hemicrystalline = "hemicrystalline"
+        case hemocoele = "hemocoele"
+        case hoister = "hoister"
+        case hyperpiesis = "hyperpiesis"
+        case hyppish = "hyppish"
+        case idealizer = "idealizer"
+        case incrustator = "incrustator"
+        case intentiveness = "intentiveness"
+        case interacinar = "interacinar"
+        case intercorrelation = "intercorrelation"
+        case jacutinga = "jacutinga"
+    }
+
+    init(centrodesmose: String, cerograph: [CerographElement], chemotherapeutics: [ChemotherapeuticElement], cimelia: [CimeliaElement], citrated: Int, clinodome: [Clinodome], coadjust: [CoadjustElement], consilience: [Consilience], constructor: [Constructor], continuative: [Continuative], credulity: [CredulityElement], creviced: [Creviced], cubiculum: [[Int?]], deruralize: [DeruralizeElement], diaereses: [DiaereseElement], dissolution: [[JSONNull?]?], downstroke: [Downstroke], electrotautomerism: [Double?], eleutheromania: [Eleutheromania], encrust: Encrust, entomoid: [Entomoid], epipaleolithic: [Epipaleolithic], expropriable: [Expropriable], faggingly: [FagginglyElement], fenks: [FenkElement], flagmaking: [FlagmakingElement], fluorometer: [Fluorometer], fulsome: [Int?], fuzzy: [Fuzzy], gardenwards: [Gardenward], generalissimo: [Generalissimo], habeas: [[String: Int]?], hemicrystalline: [Hemicrystalline], hemocoele: [HemocoeleElement], hoister: [Hoister], hyperpiesis: [Hyperpiesi], hyppish: [Hyppish], idealizer: [Idealizer], incrustator: [Incrustator], intentiveness: [Intentiveness], interacinar: Interacinar, intercorrelation: [[Int]?], jacutinga: [Jacutinga]) {
+        self.centrodesmose = centrodesmose
+        self.cerograph = cerograph
+        self.chemotherapeutics = chemotherapeutics
+        self.cimelia = cimelia
+        self.citrated = citrated
+        self.clinodome = clinodome
+        self.coadjust = coadjust
+        self.consilience = consilience
+        self.constructor = constructor
+        self.continuative = continuative
+        self.credulity = credulity
+        self.creviced = creviced
+        self.cubiculum = cubiculum
+        self.deruralize = deruralize
+        self.diaereses = diaereses
+        self.dissolution = dissolution
+        self.downstroke = downstroke
+        self.electrotautomerism = electrotautomerism
+        self.eleutheromania = eleutheromania
+        self.encrust = encrust
+        self.entomoid = entomoid
+        self.epipaleolithic = epipaleolithic
+        self.expropriable = expropriable
+        self.faggingly = faggingly
+        self.fenks = fenks
+        self.flagmaking = flagmaking
+        self.fluorometer = fluorometer
+        self.fulsome = fulsome
+        self.fuzzy = fuzzy
+        self.gardenwards = gardenwards
+        self.generalissimo = generalissimo
+        self.habeas = habeas
+        self.hemicrystalline = hemicrystalline
+        self.hemocoele = hemocoele
+        self.hoister = hoister
+        self.hyperpiesis = hyperpiesis
+        self.hyppish = hyppish
+        self.idealizer = idealizer
+        self.incrustator = incrustator
+        self.intentiveness = intentiveness
+        self.interacinar = interacinar
+        self.intercorrelation = intercorrelation
+        self.jacutinga = jacutinga
+    }
+}
+
+// MARK: TopLevel convenience initializers and mutators
+
+extension TopLevel {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(TopLevel.self, from: data)
+        self.init(centrodesmose: me.centrodesmose, cerograph: me.cerograph, chemotherapeutics: me.chemotherapeutics, cimelia: me.cimelia, citrated: me.citrated, clinodome: me.clinodome, coadjust: me.coadjust, consilience: me.consilience, constructor: me.constructor, continuative: me.continuative, credulity: me.credulity, creviced: me.creviced, cubiculum: me.cubiculum, deruralize: me.deruralize, diaereses: me.diaereses, dissolution: me.dissolution, downstroke: me.downstroke, electrotautomerism: me.electrotautomerism, eleutheromania: me.eleutheromania, encrust: me.encrust, entomoid: me.entomoid, epipaleolithic: me.epipaleolithic, expropriable: me.expropriable, faggingly: me.faggingly, fenks: me.fenks, flagmaking: me.flagmaking, fluorometer: me.fluorometer, fulsome: me.fulsome, fuzzy: me.fuzzy, gardenwards: me.gardenwards, generalissimo: me.generalissimo, habeas: me.habeas, hemicrystalline: me.hemicrystalline, hemocoele: me.hemocoele, hoister: me.hoister, hyperpiesis: me.hyperpiesis, hyppish: me.hyppish, idealizer: me.idealizer, incrustator: me.incrustator, intentiveness: me.intentiveness, interacinar: me.interacinar, intercorrelation: me.intercorrelation, jacutinga: me.jacutinga)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        centrodesmose: String? = nil,
+        cerograph: [CerographElement]? = nil,
+        chemotherapeutics: [ChemotherapeuticElement]? = nil,
+        cimelia: [CimeliaElement]? = nil,
+        citrated: Int? = nil,
+        clinodome: [Clinodome]? = nil,
+        coadjust: [CoadjustElement]? = nil,
+        consilience: [Consilience]? = nil,
+        constructor: [Constructor]? = nil,
+        continuative: [Continuative]? = nil,
+        credulity: [CredulityElement]? = nil,
+        creviced: [Creviced]? = nil,
+        cubiculum: [[Int?]]? = nil,
+        deruralize: [DeruralizeElement]? = nil,
+        diaereses: [DiaereseElement]? = nil,
+        dissolution: [[JSONNull?]?]? = nil,
+        downstroke: [Downstroke]? = nil,
+        electrotautomerism: [Double?]? = nil,
+        eleutheromania: [Eleutheromania]? = nil,
+        encrust: Encrust? = nil,
+        entomoid: [Entomoid]? = nil,
+        epipaleolithic: [Epipaleolithic]? = nil,
+        expropriable: [Expropriable]? = nil,
+        faggingly: [FagginglyElement]? = nil,
+        fenks: [FenkElement]? = nil,
+        flagmaking: [FlagmakingElement]? = nil,
+        fluorometer: [Fluorometer]? = nil,
+        fulsome: [Int?]? = nil,
+        fuzzy: [Fuzzy]? = nil,
+        gardenwards: [Gardenward]? = nil,
+        generalissimo: [Generalissimo]? = nil,
+        habeas: [[String: Int]?]? = nil,
+        hemicrystalline: [Hemicrystalline]? = nil,
+        hemocoele: [HemocoeleElement]? = nil,
+        hoister: [Hoister]? = nil,
+        hyperpiesis: [Hyperpiesi]? = nil,
+        hyppish: [Hyppish]? = nil,
+        idealizer: [Idealizer]? = nil,
+        incrustator: [Incrustator]? = nil,
+        intentiveness: [Intentiveness]? = nil,
+        interacinar: Interacinar? = nil,
+        intercorrelation: [[Int]?]? = nil,
+        jacutinga: [Jacutinga]? = nil
+    ) -> TopLevel {
+        return TopLevel(
+            centrodesmose: centrodesmose ?? self.centrodesmose,
+            cerograph: cerograph ?? self.cerograph,
+            chemotherapeutics: chemotherapeutics ?? self.chemotherapeutics,
+            cimelia: cimelia ?? self.cimelia,
+            citrated: citrated ?? self.citrated,
+            clinodome: clinodome ?? self.clinodome,
+            coadjust: coadjust ?? self.coadjust,
+            consilience: consilience ?? self.consilience,
+            constructor: constructor ?? self.constructor,
+            continuative: continuative ?? self.continuative,
+            credulity: credulity ?? self.credulity,
+            creviced: creviced ?? self.creviced,
+            cubiculum: cubiculum ?? self.cubiculum,
+            deruralize: deruralize ?? self.deruralize,
+            diaereses: diaereses ?? self.diaereses,
+            dissolution: dissolution ?? self.dissolution,
+            downstroke: downstroke ?? self.downstroke,
+            electrotautomerism: electrotautomerism ?? self.electrotautomerism,
+            eleutheromania: eleutheromania ?? self.eleutheromania,
+            encrust: encrust ?? self.encrust,
+            entomoid: entomoid ?? self.entomoid,
+            epipaleolithic: epipaleolithic ?? self.epipaleolithic,
+            expropriable: expropriable ?? self.expropriable,
+            faggingly: faggingly ?? self.faggingly,
+            fenks: fenks ?? self.fenks,
+            flagmaking: flagmaking ?? self.flagmaking,
+            fluorometer: fluorometer ?? self.fluorometer,
+            fulsome: fulsome ?? self.fulsome,
+            fuzzy: fuzzy ?? self.fuzzy,
+            gardenwards: gardenwards ?? self.gardenwards,
+            generalissimo: generalissimo ?? self.generalissimo,
+            habeas: habeas ?? self.habeas,
+            hemicrystalline: hemicrystalline ?? self.hemicrystalline,
+            hemocoele: hemocoele ?? self.hemocoele,
+            hoister: hoister ?? self.hoister,
+            hyperpiesis: hyperpiesis ?? self.hyperpiesis,
+            hyppish: hyppish ?? self.hyppish,
+            idealizer: idealizer ?? self.idealizer,
+            incrustator: incrustator ?? self.incrustator,
+            intentiveness: intentiveness ?? self.intentiveness,
+            interacinar: interacinar ?? self.interacinar,
+            intercorrelation: intercorrelation ?? self.intercorrelation,
+            jacutinga: jacutinga ?? self.jacutinga
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum CerographElement: Codable, Sendable {
+    case cerographClass(CerographClass)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CerographClass.self) {
+            self = .cerographClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(CerographElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CerographElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cerographClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - CerographClass
+@objcMembers final class CerographClass: NSObject, Codable, Sendable {
+    let apotropaion: JSONNull?
+    let casuary: JSONNull?
+    let creaker: JSONNull?
+    let disqualification: JSONNull?
+    let imperatorious: JSONNull?
+    let impermeabilize: JSONNull?
+    let metastoma: JSONNull?
+    let noctidiurnal: JSONNull?
+    let nonreserve: JSONNull?
+    let ophthalmotonometry: JSONNull?
+    let pailful: JSONNull?
+    let pigfish: JSONNull?
+    let pongee: JSONNull?
+    let prosodical: JSONNull?
+    let scrofuloderm: JSONNull?
+    let storekeeping: JSONNull?
+    let therologist: JSONNull?
+    let tolowa: JSONNull?
+    let tradeful: JSONNull?
+    let unriveting: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case apotropaion = "apotropaion"
+        case casuary = "casuary"
+        case creaker = "creaker"
+        case disqualification = "disqualification"
+        case imperatorious = "imperatorious"
+        case impermeabilize = "impermeabilize"
+        case metastoma = "metastoma"
+        case noctidiurnal = "noctidiurnal"
+        case nonreserve = "nonreserve"
+        case ophthalmotonometry = "ophthalmotonometry"
+        case pailful = "pailful"
+        case pigfish = "pigfish"
+        case pongee = "pongee"
+        case prosodical = "prosodical"
+        case scrofuloderm = "scrofuloderm"
+        case storekeeping = "storekeeping"
+        case therologist = "therologist"
+        case tolowa = "Tolowa"
+        case tradeful = "tradeful"
+        case unriveting = "unriveting"
+    }
+
+    init(apotropaion: JSONNull?, casuary: JSONNull?, creaker: JSONNull?, disqualification: JSONNull?, imperatorious: JSONNull?, impermeabilize: JSONNull?, metastoma: JSONNull?, noctidiurnal: JSONNull?, nonreserve: JSONNull?, ophthalmotonometry: JSONNull?, pailful: JSONNull?, pigfish: JSONNull?, pongee: JSONNull?, prosodical: JSONNull?, scrofuloderm: JSONNull?, storekeeping: JSONNull?, therologist: JSONNull?, tolowa: JSONNull?, tradeful: JSONNull?, unriveting: JSONNull?) {
+        self.apotropaion = apotropaion
+        self.casuary = casuary
+        self.creaker = creaker
+        self.disqualification = disqualification
+        self.imperatorious = imperatorious
+        self.impermeabilize = impermeabilize
+        self.metastoma = metastoma
+        self.noctidiurnal = noctidiurnal
+        self.nonreserve = nonreserve
+        self.ophthalmotonometry = ophthalmotonometry
+        self.pailful = pailful
+        self.pigfish = pigfish
+        self.pongee = pongee
+        self.prosodical = prosodical
+        self.scrofuloderm = scrofuloderm
+        self.storekeeping = storekeeping
+        self.therologist = therologist
+        self.tolowa = tolowa
+        self.tradeful = tradeful
+        self.unriveting = unriveting
+    }
+}
+
+// MARK: CerographClass convenience initializers and mutators
+
+extension CerographClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(CerographClass.self, from: data)
+        self.init(apotropaion: me.apotropaion, casuary: me.casuary, creaker: me.creaker, disqualification: me.disqualification, imperatorious: me.imperatorious, impermeabilize: me.impermeabilize, metastoma: me.metastoma, noctidiurnal: me.noctidiurnal, nonreserve: me.nonreserve, ophthalmotonometry: me.ophthalmotonometry, pailful: me.pailful, pigfish: me.pigfish, pongee: me.pongee, prosodical: me.prosodical, scrofuloderm: me.scrofuloderm, storekeeping: me.storekeeping, therologist: me.therologist, tolowa: me.tolowa, tradeful: me.tradeful, unriveting: me.unriveting)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apotropaion: JSONNull?? = nil,
+        casuary: JSONNull?? = nil,
+        creaker: JSONNull?? = nil,
+        disqualification: JSONNull?? = nil,
+        imperatorious: JSONNull?? = nil,
+        impermeabilize: JSONNull?? = nil,
+        metastoma: JSONNull?? = nil,
+        noctidiurnal: JSONNull?? = nil,
+        nonreserve: JSONNull?? = nil,
+        ophthalmotonometry: JSONNull?? = nil,
+        pailful: JSONNull?? = nil,
+        pigfish: JSONNull?? = nil,
+        pongee: JSONNull?? = nil,
+        prosodical: JSONNull?? = nil,
+        scrofuloderm: JSONNull?? = nil,
+        storekeeping: JSONNull?? = nil,
+        therologist: JSONNull?? = nil,
+        tolowa: JSONNull?? = nil,
+        tradeful: JSONNull?? = nil,
+        unriveting: JSONNull?? = nil
+    ) -> CerographClass {
+        return CerographClass(
+            apotropaion: apotropaion ?? self.apotropaion,
+            casuary: casuary ?? self.casuary,
+            creaker: creaker ?? self.creaker,
+            disqualification: disqualification ?? self.disqualification,
+            imperatorious: imperatorious ?? self.imperatorious,
+            impermeabilize: impermeabilize ?? self.impermeabilize,
+            metastoma: metastoma ?? self.metastoma,
+            noctidiurnal: noctidiurnal ?? self.noctidiurnal,
+            nonreserve: nonreserve ?? self.nonreserve,
+            ophthalmotonometry: ophthalmotonometry ?? self.ophthalmotonometry,
+            pailful: pailful ?? self.pailful,
+            pigfish: pigfish ?? self.pigfish,
+            pongee: pongee ?? self.pongee,
+            prosodical: prosodical ?? self.prosodical,
+            scrofuloderm: scrofuloderm ?? self.scrofuloderm,
+            storekeeping: storekeeping ?? self.storekeeping,
+            therologist: therologist ?? self.therologist,
+            tolowa: tolowa ?? self.tolowa,
+            tradeful: tradeful ?? self.tradeful,
+            unriveting: unriveting ?? self.unriveting
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum ChemotherapeuticElement: Codable, Sendable {
+    case chemotherapeuticClass(ChemotherapeuticClass)
+    case integer(Int)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(ChemotherapeuticClass.self) {
+            self = .chemotherapeuticClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(ChemotherapeuticElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for ChemotherapeuticElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .chemotherapeuticClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - ChemotherapeuticClass
+@objcMembers final class ChemotherapeuticClass: NSObject, Codable, Sendable {
+    let angioneurotic: JSONNull?
+    let availment: JSONNull?
+    let bladelet: JSONNull?
+    let catharticalness: Double?
+    let caulis: JSONNull?
+    let chalcus: JSONNull?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let enteradenological: JSONNull?
+    let homocerc: Bool?
+    let imporosity: JSONNull?
+    let insistently: JSONNull?
+    let intraparietal: JSONNull?
+    let ivied: JSONNull?
+    let maureen: JSONNull?
+    let nonbookish: JSONNull?
+    let nostochine: JSONNull?
+    let nutcracker: JSONNull?
+    let ofttimes: JSONNull?
+    let phenocryst: JSONNull?
+    let precoincident: JSONNull?
+    let ramiferous: JSONNull?
+    let stagmometer: JSONNull?
+    let tetherball: JSONNull?
+    let unshy: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case angioneurotic = "angioneurotic"
+        case availment = "availment"
+        case bladelet = "bladelet"
+        case catharticalness = "catharticalness"
+        case caulis = "caulis"
+        case chalcus = "chalcus"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case enteradenological = "enteradenological"
+        case homocerc = "homocerc"
+        case imporosity = "imporosity"
+        case insistently = "insistently"
+        case intraparietal = "intraparietal"
+        case ivied = "ivied"
+        case maureen = "Maureen"
+        case nonbookish = "nonbookish"
+        case nostochine = "nostochine"
+        case nutcracker = "nutcracker"
+        case ofttimes = "ofttimes"
+        case phenocryst = "phenocryst"
+        case precoincident = "precoincident"
+        case ramiferous = "ramiferous"
+        case stagmometer = "stagmometer"
+        case tetherball = "tetherball"
+        case unshy = "unshy"
+    }
+
+    init(angioneurotic: JSONNull?, availment: JSONNull?, bladelet: JSONNull?, catharticalness: Double?, caulis: JSONNull?, chalcus: JSONNull?, chirotherium: Int?, disdiapason: String?, enteradenological: JSONNull?, homocerc: Bool?, imporosity: JSONNull?, insistently: JSONNull?, intraparietal: JSONNull?, ivied: JSONNull?, maureen: JSONNull?, nonbookish: JSONNull?, nostochine: JSONNull?, nutcracker: JSONNull?, ofttimes: JSONNull?, phenocryst: JSONNull?, precoincident: JSONNull?, ramiferous: JSONNull?, stagmometer: JSONNull?, tetherball: JSONNull?, unshy: JSONNull?) {
+        self.angioneurotic = angioneurotic
+        self.availment = availment
+        self.bladelet = bladelet
+        self.catharticalness = catharticalness
+        self.caulis = caulis
+        self.chalcus = chalcus
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.enteradenological = enteradenological
+        self.homocerc = homocerc
+        self.imporosity = imporosity
+        self.insistently = insistently
+        self.intraparietal = intraparietal
+        self.ivied = ivied
+        self.maureen = maureen
+        self.nonbookish = nonbookish
+        self.nostochine = nostochine
+        self.nutcracker = nutcracker
+        self.ofttimes = ofttimes
+        self.phenocryst = phenocryst
+        self.precoincident = precoincident
+        self.ramiferous = ramiferous
+        self.stagmometer = stagmometer
+        self.tetherball = tetherball
+        self.unshy = unshy
+    }
+}
+
+// MARK: ChemotherapeuticClass convenience initializers and mutators
+
+extension ChemotherapeuticClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(ChemotherapeuticClass.self, from: data)
+        self.init(angioneurotic: me.angioneurotic, availment: me.availment, bladelet: me.bladelet, catharticalness: me.catharticalness, caulis: me.caulis, chalcus: me.chalcus, chirotherium: me.chirotherium, disdiapason: me.disdiapason, enteradenological: me.enteradenological, homocerc: me.homocerc, imporosity: me.imporosity, insistently: me.insistently, intraparietal: me.intraparietal, ivied: me.ivied, maureen: me.maureen, nonbookish: me.nonbookish, nostochine: me.nostochine, nutcracker: me.nutcracker, ofttimes: me.ofttimes, phenocryst: me.phenocryst, precoincident: me.precoincident, ramiferous: me.ramiferous, stagmometer: me.stagmometer, tetherball: me.tetherball, unshy: me.unshy)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        angioneurotic: JSONNull?? = nil,
+        availment: JSONNull?? = nil,
+        bladelet: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        caulis: JSONNull?? = nil,
+        chalcus: JSONNull?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        enteradenological: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        imporosity: JSONNull?? = nil,
+        insistently: JSONNull?? = nil,
+        intraparietal: JSONNull?? = nil,
+        ivied: JSONNull?? = nil,
+        maureen: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        nostochine: JSONNull?? = nil,
+        nutcracker: JSONNull?? = nil,
+        ofttimes: JSONNull?? = nil,
+        phenocryst: JSONNull?? = nil,
+        precoincident: JSONNull?? = nil,
+        ramiferous: JSONNull?? = nil,
+        stagmometer: JSONNull?? = nil,
+        tetherball: JSONNull?? = nil,
+        unshy: JSONNull?? = nil
+    ) -> ChemotherapeuticClass {
+        return ChemotherapeuticClass(
+            angioneurotic: angioneurotic ?? self.angioneurotic,
+            availment: availment ?? self.availment,
+            bladelet: bladelet ?? self.bladelet,
+            catharticalness: catharticalness ?? self.catharticalness,
+            caulis: caulis ?? self.caulis,
+            chalcus: chalcus ?? self.chalcus,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            enteradenological: enteradenological ?? self.enteradenological,
+            homocerc: homocerc ?? self.homocerc,
+            imporosity: imporosity ?? self.imporosity,
+            insistently: insistently ?? self.insistently,
+            intraparietal: intraparietal ?? self.intraparietal,
+            ivied: ivied ?? self.ivied,
+            maureen: maureen ?? self.maureen,
+            nonbookish: nonbookish ?? self.nonbookish,
+            nostochine: nostochine ?? self.nostochine,
+            nutcracker: nutcracker ?? self.nutcracker,
+            ofttimes: ofttimes ?? self.ofttimes,
+            phenocryst: phenocryst ?? self.phenocryst,
+            precoincident: precoincident ?? self.precoincident,
+            ramiferous: ramiferous ?? self.ramiferous,
+            stagmometer: stagmometer ?? self.stagmometer,
+            tetherball: tetherball ?? self.tetherball,
+            unshy: unshy ?? self.unshy
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum CimeliaElement: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case integerArray([Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(CimeliaElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CimeliaElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+// MARK: - CimeliaClass
+@objcMembers final class CimeliaClass: NSObject, Codable, Sendable {
+    let catharticalness: Double
+    let chirotherium: Int
+    let disdiapason: String
+    let homocerc: Bool
+    let nonbookish: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case homocerc = "homocerc"
+        case nonbookish = "nonbookish"
+    }
+
+    init(catharticalness: Double, chirotherium: Int, disdiapason: String, homocerc: Bool, nonbookish: JSONNull?) {
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.homocerc = homocerc
+        self.nonbookish = nonbookish
+    }
+}
+
+// MARK: CimeliaClass convenience initializers and mutators
+
+extension CimeliaClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(CimeliaClass.self, from: data)
+        self.init(catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, homocerc: me.homocerc, nonbookish: me.nonbookish)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        catharticalness: Double? = nil,
+        chirotherium: Int? = nil,
+        disdiapason: String? = nil,
+        homocerc: Bool? = nil,
+        nonbookish: JSONNull?? = nil
+    ) -> CimeliaClass {
+        return CimeliaClass(
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            homocerc: homocerc ?? self.homocerc,
+            nonbookish: nonbookish ?? self.nonbookish
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Clinodome: Codable, Sendable {
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Clinodome.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Clinodome"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum CoadjustElement: Codable, Sendable {
+    case coadjustClass(CoadjustClass)
+    case double(Double)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(CoadjustClass.self) {
+            self = .coadjustClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(CoadjustElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CoadjustElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .coadjustClass(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - CoadjustClass
+@objcMembers final class CoadjustClass: NSObject, Codable, Sendable {
+    let amidosulphonal: JSONNull?
+    let benny: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let ensnare: JSONNull?
+    let homocerc: Bool?
+    let hybridizer: JSONNull?
+    let leastwise: JSONNull?
+    let lof: JSONNull?
+    let monkhood: JSONNull?
+    let netherlandish: JSONNull?
+    let nonbookish: JSONNull?
+    let peonism: JSONNull?
+    let phonelescope: JSONNull?
+    let porphyrogeniture: JSONNull?
+    let preindemnify: JSONNull?
+    let rosal: JSONNull?
+    let scalenous: JSONNull?
+    let scopine: JSONNull?
+    let sedaceae: JSONNull?
+    let suberinize: JSONNull?
+    let symbiot: JSONNull?
+    let tablefellow: JSONNull?
+    let unchargeable: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amidosulphonal = "amidosulphonal"
+        case benny = "Benny"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case ensnare = "ensnare"
+        case homocerc = "homocerc"
+        case hybridizer = "hybridizer"
+        case leastwise = "leastwise"
+        case lof = "lof"
+        case monkhood = "monkhood"
+        case netherlandish = "Netherlandish"
+        case nonbookish = "nonbookish"
+        case peonism = "peonism"
+        case phonelescope = "Phonelescope"
+        case porphyrogeniture = "porphyrogeniture"
+        case preindemnify = "preindemnify"
+        case rosal = "rosal"
+        case scalenous = "scalenous"
+        case scopine = "scopine"
+        case sedaceae = "Sedaceae"
+        case suberinize = "suberinize"
+        case symbiot = "symbiot"
+        case tablefellow = "tablefellow"
+        case unchargeable = "unchargeable"
+    }
+
+    init(amidosulphonal: JSONNull?, benny: JSONNull?, catharticalness: Double?, chirotherium: Int?, disdiapason: String?, ensnare: JSONNull?, homocerc: Bool?, hybridizer: JSONNull?, leastwise: JSONNull?, lof: JSONNull?, monkhood: JSONNull?, netherlandish: JSONNull?, nonbookish: JSONNull?, peonism: JSONNull?, phonelescope: JSONNull?, porphyrogeniture: JSONNull?, preindemnify: JSONNull?, rosal: JSONNull?, scalenous: JSONNull?, scopine: JSONNull?, sedaceae: JSONNull?, suberinize: JSONNull?, symbiot: JSONNull?, tablefellow: JSONNull?, unchargeable: JSONNull?) {
+        self.amidosulphonal = amidosulphonal
+        self.benny = benny
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.ensnare = ensnare
+        self.homocerc = homocerc
+        self.hybridizer = hybridizer
+        self.leastwise = leastwise
+        self.lof = lof
+        self.monkhood = monkhood
+        self.netherlandish = netherlandish
+        self.nonbookish = nonbookish
+        self.peonism = peonism
+        self.phonelescope = phonelescope
+        self.porphyrogeniture = porphyrogeniture
+        self.preindemnify = preindemnify
+        self.rosal = rosal
+        self.scalenous = scalenous
+        self.scopine = scopine
+        self.sedaceae = sedaceae
+        self.suberinize = suberinize
+        self.symbiot = symbiot
+        self.tablefellow = tablefellow
+        self.unchargeable = unchargeable
+    }
+}
+
+// MARK: CoadjustClass convenience initializers and mutators
+
+extension CoadjustClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(CoadjustClass.self, from: data)
+        self.init(amidosulphonal: me.amidosulphonal, benny: me.benny, catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, ensnare: me.ensnare, homocerc: me.homocerc, hybridizer: me.hybridizer, leastwise: me.leastwise, lof: me.lof, monkhood: me.monkhood, netherlandish: me.netherlandish, nonbookish: me.nonbookish, peonism: me.peonism, phonelescope: me.phonelescope, porphyrogeniture: me.porphyrogeniture, preindemnify: me.preindemnify, rosal: me.rosal, scalenous: me.scalenous, scopine: me.scopine, sedaceae: me.sedaceae, suberinize: me.suberinize, symbiot: me.symbiot, tablefellow: me.tablefellow, unchargeable: me.unchargeable)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amidosulphonal: JSONNull?? = nil,
+        benny: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        ensnare: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        hybridizer: JSONNull?? = nil,
+        leastwise: JSONNull?? = nil,
+        lof: JSONNull?? = nil,
+        monkhood: JSONNull?? = nil,
+        netherlandish: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        peonism: JSONNull?? = nil,
+        phonelescope: JSONNull?? = nil,
+        porphyrogeniture: JSONNull?? = nil,
+        preindemnify: JSONNull?? = nil,
+        rosal: JSONNull?? = nil,
+        scalenous: JSONNull?? = nil,
+        scopine: JSONNull?? = nil,
+        sedaceae: JSONNull?? = nil,
+        suberinize: JSONNull?? = nil,
+        symbiot: JSONNull?? = nil,
+        tablefellow: JSONNull?? = nil,
+        unchargeable: JSONNull?? = nil
+    ) -> CoadjustClass {
+        return CoadjustClass(
+            amidosulphonal: amidosulphonal ?? self.amidosulphonal,
+            benny: benny ?? self.benny,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            ensnare: ensnare ?? self.ensnare,
+            homocerc: homocerc ?? self.homocerc,
+            hybridizer: hybridizer ?? self.hybridizer,
+            leastwise: leastwise ?? self.leastwise,
+            lof: lof ?? self.lof,
+            monkhood: monkhood ?? self.monkhood,
+            netherlandish: netherlandish ?? self.netherlandish,
+            nonbookish: nonbookish ?? self.nonbookish,
+            peonism: peonism ?? self.peonism,
+            phonelescope: phonelescope ?? self.phonelescope,
+            porphyrogeniture: porphyrogeniture ?? self.porphyrogeniture,
+            preindemnify: preindemnify ?? self.preindemnify,
+            rosal: rosal ?? self.rosal,
+            scalenous: scalenous ?? self.scalenous,
+            scopine: scopine ?? self.scopine,
+            sedaceae: sedaceae ?? self.sedaceae,
+            suberinize: suberinize ?? self.suberinize,
+            symbiot: symbiot ?? self.symbiot,
+            tablefellow: tablefellow ?? self.tablefellow,
+            unchargeable: unchargeable ?? self.unchargeable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Consilience: Codable, Sendable {
+    case double(Double)
+    case integerMap([String: Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Consilience.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Consilience"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Constructor: Codable, Sendable {
+    case bool(Bool)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Constructor.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Constructor"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Continuative: Codable, Sendable {
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Continuative.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Continuative"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum CredulityElement: Codable, Sendable {
+    case credulityClass(CredulityClass)
+    case integer(Int)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CredulityClass.self) {
+            self = .credulityClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(CredulityElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for CredulityElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .credulityClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - CredulityClass
+@objcMembers final class CredulityClass: NSObject, Codable, Sendable {
+    let ammonolytic: JSONNull?
+    let bushmaster: JSONNull?
+    let considering: JSONNull?
+    let consuetudinary: JSONNull?
+    let embarras: JSONNull?
+    let fineness: JSONNull?
+    let flaithship: JSONNull?
+    let flavia: JSONNull?
+    let gruffly: JSONNull?
+    let hedychium: JSONNull?
+    let leadwort: JSONNull?
+    let overseriously: JSONNull?
+    let parabola: JSONNull?
+    let pectinatodenticulate: JSONNull?
+    let popean: JSONNull?
+    let pornocrat: JSONNull?
+    let quadrisect: JSONNull?
+    let seriality: JSONNull?
+    let vamphorn: JSONNull?
+    let wharp: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case ammonolytic = "ammonolytic"
+        case bushmaster = "bushmaster"
+        case considering = "considering"
+        case consuetudinary = "consuetudinary"
+        case embarras = "embarras"
+        case fineness = "fineness"
+        case flaithship = "flaithship"
+        case flavia = "Flavia"
+        case gruffly = "gruffly"
+        case hedychium = "Hedychium"
+        case leadwort = "leadwort"
+        case overseriously = "overseriously"
+        case parabola = "parabola"
+        case pectinatodenticulate = "pectinatodenticulate"
+        case popean = "Popean"
+        case pornocrat = "pornocrat"
+        case quadrisect = "quadrisect"
+        case seriality = "seriality"
+        case vamphorn = "vamphorn"
+        case wharp = "wharp"
+    }
+
+    init(ammonolytic: JSONNull?, bushmaster: JSONNull?, considering: JSONNull?, consuetudinary: JSONNull?, embarras: JSONNull?, fineness: JSONNull?, flaithship: JSONNull?, flavia: JSONNull?, gruffly: JSONNull?, hedychium: JSONNull?, leadwort: JSONNull?, overseriously: JSONNull?, parabola: JSONNull?, pectinatodenticulate: JSONNull?, popean: JSONNull?, pornocrat: JSONNull?, quadrisect: JSONNull?, seriality: JSONNull?, vamphorn: JSONNull?, wharp: JSONNull?) {
+        self.ammonolytic = ammonolytic
+        self.bushmaster = bushmaster
+        self.considering = considering
+        self.consuetudinary = consuetudinary
+        self.embarras = embarras
+        self.fineness = fineness
+        self.flaithship = flaithship
+        self.flavia = flavia
+        self.gruffly = gruffly
+        self.hedychium = hedychium
+        self.leadwort = leadwort
+        self.overseriously = overseriously
+        self.parabola = parabola
+        self.pectinatodenticulate = pectinatodenticulate
+        self.popean = popean
+        self.pornocrat = pornocrat
+        self.quadrisect = quadrisect
+        self.seriality = seriality
+        self.vamphorn = vamphorn
+        self.wharp = wharp
+    }
+}
+
+// MARK: CredulityClass convenience initializers and mutators
+
+extension CredulityClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(CredulityClass.self, from: data)
+        self.init(ammonolytic: me.ammonolytic, bushmaster: me.bushmaster, considering: me.considering, consuetudinary: me.consuetudinary, embarras: me.embarras, fineness: me.fineness, flaithship: me.flaithship, flavia: me.flavia, gruffly: me.gruffly, hedychium: me.hedychium, leadwort: me.leadwort, overseriously: me.overseriously, parabola: me.parabola, pectinatodenticulate: me.pectinatodenticulate, popean: me.popean, pornocrat: me.pornocrat, quadrisect: me.quadrisect, seriality: me.seriality, vamphorn: me.vamphorn, wharp: me.wharp)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        ammonolytic: JSONNull?? = nil,
+        bushmaster: JSONNull?? = nil,
+        considering: JSONNull?? = nil,
+        consuetudinary: JSONNull?? = nil,
+        embarras: JSONNull?? = nil,
+        fineness: JSONNull?? = nil,
+        flaithship: JSONNull?? = nil,
+        flavia: JSONNull?? = nil,
+        gruffly: JSONNull?? = nil,
+        hedychium: JSONNull?? = nil,
+        leadwort: JSONNull?? = nil,
+        overseriously: JSONNull?? = nil,
+        parabola: JSONNull?? = nil,
+        pectinatodenticulate: JSONNull?? = nil,
+        popean: JSONNull?? = nil,
+        pornocrat: JSONNull?? = nil,
+        quadrisect: JSONNull?? = nil,
+        seriality: JSONNull?? = nil,
+        vamphorn: JSONNull?? = nil,
+        wharp: JSONNull?? = nil
+    ) -> CredulityClass {
+        return CredulityClass(
+            ammonolytic: ammonolytic ?? self.ammonolytic,
+            bushmaster: bushmaster ?? self.bushmaster,
+            considering: considering ?? self.considering,
+            consuetudinary: consuetudinary ?? self.consuetudinary,
+            embarras: embarras ?? self.embarras,
+            fineness: fineness ?? self.fineness,
+            flaithship: flaithship ?? self.flaithship,
+            flavia: flavia ?? self.flavia,
+            gruffly: gruffly ?? self.gruffly,
+            hedychium: hedychium ?? self.hedychium,
+            leadwort: leadwort ?? self.leadwort,
+            overseriously: overseriously ?? self.overseriously,
+            parabola: parabola ?? self.parabola,
+            pectinatodenticulate: pectinatodenticulate ?? self.pectinatodenticulate,
+            popean: popean ?? self.popean,
+            pornocrat: pornocrat ?? self.pornocrat,
+            quadrisect: quadrisect ?? self.quadrisect,
+            seriality: seriality ?? self.seriality,
+            vamphorn: vamphorn ?? self.vamphorn,
+            wharp: wharp ?? self.wharp
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Creviced: Codable, Sendable {
+    case bool(Bool)
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Creviced.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Creviced"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum DeruralizeElement: Codable, Sendable {
+    case bool(Bool)
+    case deruralizeClass(DeruralizeClass)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(DeruralizeClass.self) {
+            self = .deruralizeClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(DeruralizeElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for DeruralizeElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .deruralizeClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - DeruralizeClass
+@objcMembers final class DeruralizeClass: NSObject, Codable, Sendable {
+    let bockerel: JSONNull?
+    let boulder: JSONNull?
+    let churrus: JSONNull?
+    let counterdigged: JSONNull?
+    let dialogite: JSONNull?
+    let digenic: JSONNull?
+    let dunbird: JSONNull?
+    let ergatogyne: JSONNull?
+    let fiendful: JSONNull?
+    let jackrod: JSONNull?
+    let jehovistic: JSONNull?
+    let paninean: JSONNull?
+    let panther: JSONNull?
+    let placentigerous: JSONNull?
+    let romney: JSONNull?
+    let sparm: JSONNull?
+    let tocsin: JSONNull?
+    let unnicked: JSONNull?
+    let unstavable: JSONNull?
+    let windfirm: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case bockerel = "bockerel"
+        case boulder = "boulder"
+        case churrus = "churrus"
+        case counterdigged = "counterdigged"
+        case dialogite = "dialogite"
+        case digenic = "digenic"
+        case dunbird = "dunbird"
+        case ergatogyne = "ergatogyne"
+        case fiendful = "fiendful"
+        case jackrod = "jackrod"
+        case jehovistic = "Jehovistic"
+        case paninean = "Paninean"
+        case panther = "panther"
+        case placentigerous = "placentigerous"
+        case romney = "Romney"
+        case sparm = "sparm"
+        case tocsin = "tocsin"
+        case unnicked = "unnicked"
+        case unstavable = "unstavable"
+        case windfirm = "windfirm"
+    }
+
+    init(bockerel: JSONNull?, boulder: JSONNull?, churrus: JSONNull?, counterdigged: JSONNull?, dialogite: JSONNull?, digenic: JSONNull?, dunbird: JSONNull?, ergatogyne: JSONNull?, fiendful: JSONNull?, jackrod: JSONNull?, jehovistic: JSONNull?, paninean: JSONNull?, panther: JSONNull?, placentigerous: JSONNull?, romney: JSONNull?, sparm: JSONNull?, tocsin: JSONNull?, unnicked: JSONNull?, unstavable: JSONNull?, windfirm: JSONNull?) {
+        self.bockerel = bockerel
+        self.boulder = boulder
+        self.churrus = churrus
+        self.counterdigged = counterdigged
+        self.dialogite = dialogite
+        self.digenic = digenic
+        self.dunbird = dunbird
+        self.ergatogyne = ergatogyne
+        self.fiendful = fiendful
+        self.jackrod = jackrod
+        self.jehovistic = jehovistic
+        self.paninean = paninean
+        self.panther = panther
+        self.placentigerous = placentigerous
+        self.romney = romney
+        self.sparm = sparm
+        self.tocsin = tocsin
+        self.unnicked = unnicked
+        self.unstavable = unstavable
+        self.windfirm = windfirm
+    }
+}
+
+// MARK: DeruralizeClass convenience initializers and mutators
+
+extension DeruralizeClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(DeruralizeClass.self, from: data)
+        self.init(bockerel: me.bockerel, boulder: me.boulder, churrus: me.churrus, counterdigged: me.counterdigged, dialogite: me.dialogite, digenic: me.digenic, dunbird: me.dunbird, ergatogyne: me.ergatogyne, fiendful: me.fiendful, jackrod: me.jackrod, jehovistic: me.jehovistic, paninean: me.paninean, panther: me.panther, placentigerous: me.placentigerous, romney: me.romney, sparm: me.sparm, tocsin: me.tocsin, unnicked: me.unnicked, unstavable: me.unstavable, windfirm: me.windfirm)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        bockerel: JSONNull?? = nil,
+        boulder: JSONNull?? = nil,
+        churrus: JSONNull?? = nil,
+        counterdigged: JSONNull?? = nil,
+        dialogite: JSONNull?? = nil,
+        digenic: JSONNull?? = nil,
+        dunbird: JSONNull?? = nil,
+        ergatogyne: JSONNull?? = nil,
+        fiendful: JSONNull?? = nil,
+        jackrod: JSONNull?? = nil,
+        jehovistic: JSONNull?? = nil,
+        paninean: JSONNull?? = nil,
+        panther: JSONNull?? = nil,
+        placentigerous: JSONNull?? = nil,
+        romney: JSONNull?? = nil,
+        sparm: JSONNull?? = nil,
+        tocsin: JSONNull?? = nil,
+        unnicked: JSONNull?? = nil,
+        unstavable: JSONNull?? = nil,
+        windfirm: JSONNull?? = nil
+    ) -> DeruralizeClass {
+        return DeruralizeClass(
+            bockerel: bockerel ?? self.bockerel,
+            boulder: boulder ?? self.boulder,
+            churrus: churrus ?? self.churrus,
+            counterdigged: counterdigged ?? self.counterdigged,
+            dialogite: dialogite ?? self.dialogite,
+            digenic: digenic ?? self.digenic,
+            dunbird: dunbird ?? self.dunbird,
+            ergatogyne: ergatogyne ?? self.ergatogyne,
+            fiendful: fiendful ?? self.fiendful,
+            jackrod: jackrod ?? self.jackrod,
+            jehovistic: jehovistic ?? self.jehovistic,
+            paninean: paninean ?? self.paninean,
+            panther: panther ?? self.panther,
+            placentigerous: placentigerous ?? self.placentigerous,
+            romney: romney ?? self.romney,
+            sparm: sparm ?? self.sparm,
+            tocsin: tocsin ?? self.tocsin,
+            unnicked: unnicked ?? self.unnicked,
+            unstavable: unstavable ?? self.unstavable,
+            windfirm: windfirm ?? self.windfirm
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum DiaereseElement: Codable, Sendable {
+    case bool(Bool)
+    case diaereseClass(DiaereseClass)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(DiaereseClass.self) {
+            self = .diaereseClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(DiaereseElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for DiaereseElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .diaereseClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - DiaereseClass
+@objcMembers final class DiaereseClass: NSObject, Codable, Sendable {
+    let amoreuxia: JSONNull?
+    let ani: JSONNull?
+    let bernicle: JSONNull?
+    let blackwasher: JSONNull?
+    let blowhard: JSONNull?
+    let broma: JSONNull?
+    let closecross: JSONNull?
+    let congregationalism: JSONNull?
+    let grayly: JSONNull?
+    let historically: JSONNull?
+    let hoast: JSONNull?
+    let irretentive: JSONNull?
+    let parcener: JSONNull?
+    let pedder: JSONNull?
+    let pseudoanatomic: JSONNull?
+    let rhizocarpian: JSONNull?
+    let samel: JSONNull?
+    let silker: JSONNull?
+    let subdentated: JSONNull?
+    let subobscure: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case amoreuxia = "Amoreuxia"
+        case ani = "ani"
+        case bernicle = "bernicle"
+        case blackwasher = "blackwasher"
+        case blowhard = "blowhard"
+        case broma = "broma"
+        case closecross = "closecross"
+        case congregationalism = "congregationalism"
+        case grayly = "grayly"
+        case historically = "historically"
+        case hoast = "hoast"
+        case irretentive = "irretentive"
+        case parcener = "parcener"
+        case pedder = "pedder"
+        case pseudoanatomic = "pseudoanatomic"
+        case rhizocarpian = "rhizocarpian"
+        case samel = "samel"
+        case silker = "silker"
+        case subdentated = "subdentated"
+        case subobscure = "subobscure"
+    }
+
+    init(amoreuxia: JSONNull?, ani: JSONNull?, bernicle: JSONNull?, blackwasher: JSONNull?, blowhard: JSONNull?, broma: JSONNull?, closecross: JSONNull?, congregationalism: JSONNull?, grayly: JSONNull?, historically: JSONNull?, hoast: JSONNull?, irretentive: JSONNull?, parcener: JSONNull?, pedder: JSONNull?, pseudoanatomic: JSONNull?, rhizocarpian: JSONNull?, samel: JSONNull?, silker: JSONNull?, subdentated: JSONNull?, subobscure: JSONNull?) {
+        self.amoreuxia = amoreuxia
+        self.ani = ani
+        self.bernicle = bernicle
+        self.blackwasher = blackwasher
+        self.blowhard = blowhard
+        self.broma = broma
+        self.closecross = closecross
+        self.congregationalism = congregationalism
+        self.grayly = grayly
+        self.historically = historically
+        self.hoast = hoast
+        self.irretentive = irretentive
+        self.parcener = parcener
+        self.pedder = pedder
+        self.pseudoanatomic = pseudoanatomic
+        self.rhizocarpian = rhizocarpian
+        self.samel = samel
+        self.silker = silker
+        self.subdentated = subdentated
+        self.subobscure = subobscure
+    }
+}
+
+// MARK: DiaereseClass convenience initializers and mutators
+
+extension DiaereseClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(DiaereseClass.self, from: data)
+        self.init(amoreuxia: me.amoreuxia, ani: me.ani, bernicle: me.bernicle, blackwasher: me.blackwasher, blowhard: me.blowhard, broma: me.broma, closecross: me.closecross, congregationalism: me.congregationalism, grayly: me.grayly, historically: me.historically, hoast: me.hoast, irretentive: me.irretentive, parcener: me.parcener, pedder: me.pedder, pseudoanatomic: me.pseudoanatomic, rhizocarpian: me.rhizocarpian, samel: me.samel, silker: me.silker, subdentated: me.subdentated, subobscure: me.subobscure)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        amoreuxia: JSONNull?? = nil,
+        ani: JSONNull?? = nil,
+        bernicle: JSONNull?? = nil,
+        blackwasher: JSONNull?? = nil,
+        blowhard: JSONNull?? = nil,
+        broma: JSONNull?? = nil,
+        closecross: JSONNull?? = nil,
+        congregationalism: JSONNull?? = nil,
+        grayly: JSONNull?? = nil,
+        historically: JSONNull?? = nil,
+        hoast: JSONNull?? = nil,
+        irretentive: JSONNull?? = nil,
+        parcener: JSONNull?? = nil,
+        pedder: JSONNull?? = nil,
+        pseudoanatomic: JSONNull?? = nil,
+        rhizocarpian: JSONNull?? = nil,
+        samel: JSONNull?? = nil,
+        silker: JSONNull?? = nil,
+        subdentated: JSONNull?? = nil,
+        subobscure: JSONNull?? = nil
+    ) -> DiaereseClass {
+        return DiaereseClass(
+            amoreuxia: amoreuxia ?? self.amoreuxia,
+            ani: ani ?? self.ani,
+            bernicle: bernicle ?? self.bernicle,
+            blackwasher: blackwasher ?? self.blackwasher,
+            blowhard: blowhard ?? self.blowhard,
+            broma: broma ?? self.broma,
+            closecross: closecross ?? self.closecross,
+            congregationalism: congregationalism ?? self.congregationalism,
+            grayly: grayly ?? self.grayly,
+            historically: historically ?? self.historically,
+            hoast: hoast ?? self.hoast,
+            irretentive: irretentive ?? self.irretentive,
+            parcener: parcener ?? self.parcener,
+            pedder: pedder ?? self.pedder,
+            pseudoanatomic: pseudoanatomic ?? self.pseudoanatomic,
+            rhizocarpian: rhizocarpian ?? self.rhizocarpian,
+            samel: samel ?? self.samel,
+            silker: silker ?? self.silker,
+            subdentated: subdentated ?? self.subdentated,
+            subobscure: subobscure ?? self.subobscure
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Downstroke: Codable, Sendable {
+    case bool(Bool)
+    case nullArray([JSONNull?])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Downstroke.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Downstroke"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Eleutheromania: Codable, Sendable {
+    case double(Double)
+    case integerMap([String: Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Eleutheromania.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Eleutheromania"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Encrust
+@objcMembers final class Encrust: NSObject, Codable, Sendable {
+    let comradely: JSONNull?
+    let diacanthous: JSONNull?
+    let feminineness: JSONNull?
+    let gossamered: JSONNull?
+    let hibernia: JSONNull?
+    let hibiscus: JSONNull?
+    let lepidosauria: JSONNull?
+    let lollingly: JSONNull?
+    let manager: JSONNull?
+    let mechanic: JSONNull?
+    let overminuteness: JSONNull?
+    let papelonne: JSONNull?
+    let plebification: JSONNull?
+    let pugmiller: JSONNull?
+    let recoveror: JSONNull?
+    let spermatoblastic: JSONNull?
+    let syllidae: JSONNull?
+    let ungyved: JSONNull?
+    let whirlabout: JSONNull?
+    let woodenware: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case comradely = "comradely"
+        case diacanthous = "diacanthous"
+        case feminineness = "feminineness"
+        case gossamered = "gossamered"
+        case hibernia = "Hibernia"
+        case hibiscus = "Hibiscus"
+        case lepidosauria = "Lepidosauria"
+        case lollingly = "lollingly"
+        case manager = "manager"
+        case mechanic = "mechanic"
+        case overminuteness = "overminuteness"
+        case papelonne = "papelonne"
+        case plebification = "plebification"
+        case pugmiller = "pugmiller"
+        case recoveror = "recoveror"
+        case spermatoblastic = "spermatoblastic"
+        case syllidae = "Syllidae"
+        case ungyved = "ungyved"
+        case whirlabout = "whirlabout"
+        case woodenware = "woodenware"
+    }
+
+    init(comradely: JSONNull?, diacanthous: JSONNull?, feminineness: JSONNull?, gossamered: JSONNull?, hibernia: JSONNull?, hibiscus: JSONNull?, lepidosauria: JSONNull?, lollingly: JSONNull?, manager: JSONNull?, mechanic: JSONNull?, overminuteness: JSONNull?, papelonne: JSONNull?, plebification: JSONNull?, pugmiller: JSONNull?, recoveror: JSONNull?, spermatoblastic: JSONNull?, syllidae: JSONNull?, ungyved: JSONNull?, whirlabout: JSONNull?, woodenware: JSONNull?) {
+        self.comradely = comradely
+        self.diacanthous = diacanthous
+        self.feminineness = feminineness
+        self.gossamered = gossamered
+        self.hibernia = hibernia
+        self.hibiscus = hibiscus
+        self.lepidosauria = lepidosauria
+        self.lollingly = lollingly
+        self.manager = manager
+        self.mechanic = mechanic
+        self.overminuteness = overminuteness
+        self.papelonne = papelonne
+        self.plebification = plebification
+        self.pugmiller = pugmiller
+        self.recoveror = recoveror
+        self.spermatoblastic = spermatoblastic
+        self.syllidae = syllidae
+        self.ungyved = ungyved
+        self.whirlabout = whirlabout
+        self.woodenware = woodenware
+    }
+}
+
+// MARK: Encrust convenience initializers and mutators
+
+extension Encrust {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Encrust.self, from: data)
+        self.init(comradely: me.comradely, diacanthous: me.diacanthous, feminineness: me.feminineness, gossamered: me.gossamered, hibernia: me.hibernia, hibiscus: me.hibiscus, lepidosauria: me.lepidosauria, lollingly: me.lollingly, manager: me.manager, mechanic: me.mechanic, overminuteness: me.overminuteness, papelonne: me.papelonne, plebification: me.plebification, pugmiller: me.pugmiller, recoveror: me.recoveror, spermatoblastic: me.spermatoblastic, syllidae: me.syllidae, ungyved: me.ungyved, whirlabout: me.whirlabout, woodenware: me.woodenware)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        comradely: JSONNull?? = nil,
+        diacanthous: JSONNull?? = nil,
+        feminineness: JSONNull?? = nil,
+        gossamered: JSONNull?? = nil,
+        hibernia: JSONNull?? = nil,
+        hibiscus: JSONNull?? = nil,
+        lepidosauria: JSONNull?? = nil,
+        lollingly: JSONNull?? = nil,
+        manager: JSONNull?? = nil,
+        mechanic: JSONNull?? = nil,
+        overminuteness: JSONNull?? = nil,
+        papelonne: JSONNull?? = nil,
+        plebification: JSONNull?? = nil,
+        pugmiller: JSONNull?? = nil,
+        recoveror: JSONNull?? = nil,
+        spermatoblastic: JSONNull?? = nil,
+        syllidae: JSONNull?? = nil,
+        ungyved: JSONNull?? = nil,
+        whirlabout: JSONNull?? = nil,
+        woodenware: JSONNull?? = nil
+    ) -> Encrust {
+        return Encrust(
+            comradely: comradely ?? self.comradely,
+            diacanthous: diacanthous ?? self.diacanthous,
+            feminineness: feminineness ?? self.feminineness,
+            gossamered: gossamered ?? self.gossamered,
+            hibernia: hibernia ?? self.hibernia,
+            hibiscus: hibiscus ?? self.hibiscus,
+            lepidosauria: lepidosauria ?? self.lepidosauria,
+            lollingly: lollingly ?? self.lollingly,
+            manager: manager ?? self.manager,
+            mechanic: mechanic ?? self.mechanic,
+            overminuteness: overminuteness ?? self.overminuteness,
+            papelonne: papelonne ?? self.papelonne,
+            plebification: plebification ?? self.plebification,
+            pugmiller: pugmiller ?? self.pugmiller,
+            recoveror: recoveror ?? self.recoveror,
+            spermatoblastic: spermatoblastic ?? self.spermatoblastic,
+            syllidae: syllidae ?? self.syllidae,
+            ungyved: ungyved ?? self.ungyved,
+            whirlabout: whirlabout ?? self.whirlabout,
+            woodenware: woodenware ?? self.woodenware
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Entomoid: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case integer(Int)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Entomoid.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Entomoid"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Epipaleolithic: Codable, Sendable {
+    case double(Double)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Epipaleolithic.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Epipaleolithic"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Expropriable: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case double(Double)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Expropriable.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Expropriable"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum FagginglyElement: Codable, Sendable {
+    case double(Double)
+    case fagginglyClass(FagginglyClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(FagginglyClass.self) {
+            self = .fagginglyClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(FagginglyElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for FagginglyElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .double(let x):
+            try container.encode(x)
+        case .fagginglyClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - FagginglyClass
+@objcMembers final class FagginglyClass: NSObject, Codable, Sendable {
+    let abranchian: JSONNull?
+    let aculeiform: JSONNull?
+    let adiaphoristic: JSONNull?
+    let adoptionism: JSONNull?
+    let anglic: JSONNull?
+    let antrotomy: JSONNull?
+    let coerciveness: JSONNull?
+    let decorist: JSONNull?
+    let duckhood: JSONNull?
+    let heteromeri: JSONNull?
+    let hypochnose: JSONNull?
+    let lochage: JSONNull?
+    let melee: JSONNull?
+    let nonconformitant: JSONNull?
+    let poinsettia: JSONNull?
+    let putatively: JSONNull?
+    let semivolatile: JSONNull?
+    let soleas: JSONNull?
+    let unfastenable: JSONNull?
+    let unmillinered: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case abranchian = "abranchian"
+        case aculeiform = "aculeiform"
+        case adiaphoristic = "adiaphoristic"
+        case adoptionism = "adoptionism"
+        case anglic = "Anglic"
+        case antrotomy = "antrotomy"
+        case coerciveness = "coerciveness"
+        case decorist = "decorist"
+        case duckhood = "duckhood"
+        case heteromeri = "Heteromeri"
+        case hypochnose = "hypochnose"
+        case lochage = "lochage"
+        case melee = "melee"
+        case nonconformitant = "nonconformitant"
+        case poinsettia = "Poinsettia"
+        case putatively = "putatively"
+        case semivolatile = "semivolatile"
+        case soleas = "soleas"
+        case unfastenable = "unfastenable"
+        case unmillinered = "unmillinered"
+    }
+
+    init(abranchian: JSONNull?, aculeiform: JSONNull?, adiaphoristic: JSONNull?, adoptionism: JSONNull?, anglic: JSONNull?, antrotomy: JSONNull?, coerciveness: JSONNull?, decorist: JSONNull?, duckhood: JSONNull?, heteromeri: JSONNull?, hypochnose: JSONNull?, lochage: JSONNull?, melee: JSONNull?, nonconformitant: JSONNull?, poinsettia: JSONNull?, putatively: JSONNull?, semivolatile: JSONNull?, soleas: JSONNull?, unfastenable: JSONNull?, unmillinered: JSONNull?) {
+        self.abranchian = abranchian
+        self.aculeiform = aculeiform
+        self.adiaphoristic = adiaphoristic
+        self.adoptionism = adoptionism
+        self.anglic = anglic
+        self.antrotomy = antrotomy
+        self.coerciveness = coerciveness
+        self.decorist = decorist
+        self.duckhood = duckhood
+        self.heteromeri = heteromeri
+        self.hypochnose = hypochnose
+        self.lochage = lochage
+        self.melee = melee
+        self.nonconformitant = nonconformitant
+        self.poinsettia = poinsettia
+        self.putatively = putatively
+        self.semivolatile = semivolatile
+        self.soleas = soleas
+        self.unfastenable = unfastenable
+        self.unmillinered = unmillinered
+    }
+}
+
+// MARK: FagginglyClass convenience initializers and mutators
+
+extension FagginglyClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(FagginglyClass.self, from: data)
+        self.init(abranchian: me.abranchian, aculeiform: me.aculeiform, adiaphoristic: me.adiaphoristic, adoptionism: me.adoptionism, anglic: me.anglic, antrotomy: me.antrotomy, coerciveness: me.coerciveness, decorist: me.decorist, duckhood: me.duckhood, heteromeri: me.heteromeri, hypochnose: me.hypochnose, lochage: me.lochage, melee: me.melee, nonconformitant: me.nonconformitant, poinsettia: me.poinsettia, putatively: me.putatively, semivolatile: me.semivolatile, soleas: me.soleas, unfastenable: me.unfastenable, unmillinered: me.unmillinered)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        abranchian: JSONNull?? = nil,
+        aculeiform: JSONNull?? = nil,
+        adiaphoristic: JSONNull?? = nil,
+        adoptionism: JSONNull?? = nil,
+        anglic: JSONNull?? = nil,
+        antrotomy: JSONNull?? = nil,
+        coerciveness: JSONNull?? = nil,
+        decorist: JSONNull?? = nil,
+        duckhood: JSONNull?? = nil,
+        heteromeri: JSONNull?? = nil,
+        hypochnose: JSONNull?? = nil,
+        lochage: JSONNull?? = nil,
+        melee: JSONNull?? = nil,
+        nonconformitant: JSONNull?? = nil,
+        poinsettia: JSONNull?? = nil,
+        putatively: JSONNull?? = nil,
+        semivolatile: JSONNull?? = nil,
+        soleas: JSONNull?? = nil,
+        unfastenable: JSONNull?? = nil,
+        unmillinered: JSONNull?? = nil
+    ) -> FagginglyClass {
+        return FagginglyClass(
+            abranchian: abranchian ?? self.abranchian,
+            aculeiform: aculeiform ?? self.aculeiform,
+            adiaphoristic: adiaphoristic ?? self.adiaphoristic,
+            adoptionism: adoptionism ?? self.adoptionism,
+            anglic: anglic ?? self.anglic,
+            antrotomy: antrotomy ?? self.antrotomy,
+            coerciveness: coerciveness ?? self.coerciveness,
+            decorist: decorist ?? self.decorist,
+            duckhood: duckhood ?? self.duckhood,
+            heteromeri: heteromeri ?? self.heteromeri,
+            hypochnose: hypochnose ?? self.hypochnose,
+            lochage: lochage ?? self.lochage,
+            melee: melee ?? self.melee,
+            nonconformitant: nonconformitant ?? self.nonconformitant,
+            poinsettia: poinsettia ?? self.poinsettia,
+            putatively: putatively ?? self.putatively,
+            semivolatile: semivolatile ?? self.semivolatile,
+            soleas: soleas ?? self.soleas,
+            unfastenable: unfastenable ?? self.unfastenable,
+            unmillinered: unmillinered ?? self.unmillinered
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum FenkElement: Codable, Sendable {
+    case fenkClass(FenkClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(FenkClass.self) {
+            self = .fenkClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(FenkElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for FenkElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .fenkClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - FenkClass
+@objcMembers final class FenkClass: NSObject, Codable, Sendable {
+    let apoise: JSONNull?
+    let astronomize: JSONNull?
+    let cockhorse: JSONNull?
+    let copular: JSONNull?
+    let dagomba: JSONNull?
+    let draffy: JSONNull?
+    let foreigner: JSONNull?
+    let guyandot: JSONNull?
+    let neurogliosis: JSONNull?
+    let osmious: JSONNull?
+    let palpitate: JSONNull?
+    let rebukeable: JSONNull?
+    let reinwardtia: JSONNull?
+    let reservatory: JSONNull?
+    let scalt: JSONNull?
+    let scripturalize: JSONNull?
+    let tintometer: JSONNull?
+    let tritoness: JSONNull?
+    let undergrade: JSONNull?
+    let undermountain: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case apoise = "apoise"
+        case astronomize = "astronomize"
+        case cockhorse = "cockhorse"
+        case copular = "copular"
+        case dagomba = "Dagomba"
+        case draffy = "draffy"
+        case foreigner = "foreigner"
+        case guyandot = "Guyandot"
+        case neurogliosis = "neurogliosis"
+        case osmious = "osmious"
+        case palpitate = "palpitate"
+        case rebukeable = "rebukeable"
+        case reinwardtia = "Reinwardtia"
+        case reservatory = "reservatory"
+        case scalt = "scalt"
+        case scripturalize = "scripturalize"
+        case tintometer = "tintometer"
+        case tritoness = "Tritoness"
+        case undergrade = "undergrade"
+        case undermountain = "undermountain"
+    }
+
+    init(apoise: JSONNull?, astronomize: JSONNull?, cockhorse: JSONNull?, copular: JSONNull?, dagomba: JSONNull?, draffy: JSONNull?, foreigner: JSONNull?, guyandot: JSONNull?, neurogliosis: JSONNull?, osmious: JSONNull?, palpitate: JSONNull?, rebukeable: JSONNull?, reinwardtia: JSONNull?, reservatory: JSONNull?, scalt: JSONNull?, scripturalize: JSONNull?, tintometer: JSONNull?, tritoness: JSONNull?, undergrade: JSONNull?, undermountain: JSONNull?) {
+        self.apoise = apoise
+        self.astronomize = astronomize
+        self.cockhorse = cockhorse
+        self.copular = copular
+        self.dagomba = dagomba
+        self.draffy = draffy
+        self.foreigner = foreigner
+        self.guyandot = guyandot
+        self.neurogliosis = neurogliosis
+        self.osmious = osmious
+        self.palpitate = palpitate
+        self.rebukeable = rebukeable
+        self.reinwardtia = reinwardtia
+        self.reservatory = reservatory
+        self.scalt = scalt
+        self.scripturalize = scripturalize
+        self.tintometer = tintometer
+        self.tritoness = tritoness
+        self.undergrade = undergrade
+        self.undermountain = undermountain
+    }
+}
+
+// MARK: FenkClass convenience initializers and mutators
+
+extension FenkClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(FenkClass.self, from: data)
+        self.init(apoise: me.apoise, astronomize: me.astronomize, cockhorse: me.cockhorse, copular: me.copular, dagomba: me.dagomba, draffy: me.draffy, foreigner: me.foreigner, guyandot: me.guyandot, neurogliosis: me.neurogliosis, osmious: me.osmious, palpitate: me.palpitate, rebukeable: me.rebukeable, reinwardtia: me.reinwardtia, reservatory: me.reservatory, scalt: me.scalt, scripturalize: me.scripturalize, tintometer: me.tintometer, tritoness: me.tritoness, undergrade: me.undergrade, undermountain: me.undermountain)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        apoise: JSONNull?? = nil,
+        astronomize: JSONNull?? = nil,
+        cockhorse: JSONNull?? = nil,
+        copular: JSONNull?? = nil,
+        dagomba: JSONNull?? = nil,
+        draffy: JSONNull?? = nil,
+        foreigner: JSONNull?? = nil,
+        guyandot: JSONNull?? = nil,
+        neurogliosis: JSONNull?? = nil,
+        osmious: JSONNull?? = nil,
+        palpitate: JSONNull?? = nil,
+        rebukeable: JSONNull?? = nil,
+        reinwardtia: JSONNull?? = nil,
+        reservatory: JSONNull?? = nil,
+        scalt: JSONNull?? = nil,
+        scripturalize: JSONNull?? = nil,
+        tintometer: JSONNull?? = nil,
+        tritoness: JSONNull?? = nil,
+        undergrade: JSONNull?? = nil,
+        undermountain: JSONNull?? = nil
+    ) -> FenkClass {
+        return FenkClass(
+            apoise: apoise ?? self.apoise,
+            astronomize: astronomize ?? self.astronomize,
+            cockhorse: cockhorse ?? self.cockhorse,
+            copular: copular ?? self.copular,
+            dagomba: dagomba ?? self.dagomba,
+            draffy: draffy ?? self.draffy,
+            foreigner: foreigner ?? self.foreigner,
+            guyandot: guyandot ?? self.guyandot,
+            neurogliosis: neurogliosis ?? self.neurogliosis,
+            osmious: osmious ?? self.osmious,
+            palpitate: palpitate ?? self.palpitate,
+            rebukeable: rebukeable ?? self.rebukeable,
+            reinwardtia: reinwardtia ?? self.reinwardtia,
+            reservatory: reservatory ?? self.reservatory,
+            scalt: scalt ?? self.scalt,
+            scripturalize: scripturalize ?? self.scripturalize,
+            tintometer: tintometer ?? self.tintometer,
+            tritoness: tritoness ?? self.tritoness,
+            undergrade: undergrade ?? self.undergrade,
+            undermountain: undermountain ?? self.undermountain
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum FlagmakingElement: Codable, Sendable {
+    case bool(Bool)
+    case double(Double)
+    case flagmakingClass(FlagmakingClass)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(FlagmakingClass.self) {
+            self = .flagmakingClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(FlagmakingElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for FlagmakingElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .flagmakingClass(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - FlagmakingClass
+@objcMembers final class FlagmakingClass: NSObject, Codable, Sendable {
+    let albarco: JSONNull?
+    let bunodonta: JSONNull?
+    let hornify: JSONNull?
+    let hydrocorisae: JSONNull?
+    let hypoglossus: JSONNull?
+    let inexpiably: JSONNull?
+    let ingratitude: JSONNull?
+    let ladyfly: JSONNull?
+    let medicament: JSONNull?
+    let monogrammatic: JSONNull?
+    let nobbut: JSONNull?
+    let notacanthidae: JSONNull?
+    let polyplacophore: JSONNull?
+    let proexercise: JSONNull?
+    let protoplast: JSONNull?
+    let puzzling: JSONNull?
+    let splanchnoskeleton: JSONNull?
+    let unloveliness: JSONNull?
+    let unquarantined: JSONNull?
+    let unrenounceable: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case albarco = "albarco"
+        case bunodonta = "Bunodonta"
+        case hornify = "hornify"
+        case hydrocorisae = "Hydrocorisae"
+        case hypoglossus = "hypoglossus"
+        case inexpiably = "inexpiably"
+        case ingratitude = "ingratitude"
+        case ladyfly = "ladyfly"
+        case medicament = "medicament"
+        case monogrammatic = "monogrammatic"
+        case nobbut = "nobbut"
+        case notacanthidae = "Notacanthidae"
+        case polyplacophore = "polyplacophore"
+        case proexercise = "proexercise"
+        case protoplast = "protoplast"
+        case puzzling = "puzzling"
+        case splanchnoskeleton = "splanchnoskeleton"
+        case unloveliness = "unloveliness"
+        case unquarantined = "unquarantined"
+        case unrenounceable = "unrenounceable"
+    }
+
+    init(albarco: JSONNull?, bunodonta: JSONNull?, hornify: JSONNull?, hydrocorisae: JSONNull?, hypoglossus: JSONNull?, inexpiably: JSONNull?, ingratitude: JSONNull?, ladyfly: JSONNull?, medicament: JSONNull?, monogrammatic: JSONNull?, nobbut: JSONNull?, notacanthidae: JSONNull?, polyplacophore: JSONNull?, proexercise: JSONNull?, protoplast: JSONNull?, puzzling: JSONNull?, splanchnoskeleton: JSONNull?, unloveliness: JSONNull?, unquarantined: JSONNull?, unrenounceable: JSONNull?) {
+        self.albarco = albarco
+        self.bunodonta = bunodonta
+        self.hornify = hornify
+        self.hydrocorisae = hydrocorisae
+        self.hypoglossus = hypoglossus
+        self.inexpiably = inexpiably
+        self.ingratitude = ingratitude
+        self.ladyfly = ladyfly
+        self.medicament = medicament
+        self.monogrammatic = monogrammatic
+        self.nobbut = nobbut
+        self.notacanthidae = notacanthidae
+        self.polyplacophore = polyplacophore
+        self.proexercise = proexercise
+        self.protoplast = protoplast
+        self.puzzling = puzzling
+        self.splanchnoskeleton = splanchnoskeleton
+        self.unloveliness = unloveliness
+        self.unquarantined = unquarantined
+        self.unrenounceable = unrenounceable
+    }
+}
+
+// MARK: FlagmakingClass convenience initializers and mutators
+
+extension FlagmakingClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(FlagmakingClass.self, from: data)
+        self.init(albarco: me.albarco, bunodonta: me.bunodonta, hornify: me.hornify, hydrocorisae: me.hydrocorisae, hypoglossus: me.hypoglossus, inexpiably: me.inexpiably, ingratitude: me.ingratitude, ladyfly: me.ladyfly, medicament: me.medicament, monogrammatic: me.monogrammatic, nobbut: me.nobbut, notacanthidae: me.notacanthidae, polyplacophore: me.polyplacophore, proexercise: me.proexercise, protoplast: me.protoplast, puzzling: me.puzzling, splanchnoskeleton: me.splanchnoskeleton, unloveliness: me.unloveliness, unquarantined: me.unquarantined, unrenounceable: me.unrenounceable)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        albarco: JSONNull?? = nil,
+        bunodonta: JSONNull?? = nil,
+        hornify: JSONNull?? = nil,
+        hydrocorisae: JSONNull?? = nil,
+        hypoglossus: JSONNull?? = nil,
+        inexpiably: JSONNull?? = nil,
+        ingratitude: JSONNull?? = nil,
+        ladyfly: JSONNull?? = nil,
+        medicament: JSONNull?? = nil,
+        monogrammatic: JSONNull?? = nil,
+        nobbut: JSONNull?? = nil,
+        notacanthidae: JSONNull?? = nil,
+        polyplacophore: JSONNull?? = nil,
+        proexercise: JSONNull?? = nil,
+        protoplast: JSONNull?? = nil,
+        puzzling: JSONNull?? = nil,
+        splanchnoskeleton: JSONNull?? = nil,
+        unloveliness: JSONNull?? = nil,
+        unquarantined: JSONNull?? = nil,
+        unrenounceable: JSONNull?? = nil
+    ) -> FlagmakingClass {
+        return FlagmakingClass(
+            albarco: albarco ?? self.albarco,
+            bunodonta: bunodonta ?? self.bunodonta,
+            hornify: hornify ?? self.hornify,
+            hydrocorisae: hydrocorisae ?? self.hydrocorisae,
+            hypoglossus: hypoglossus ?? self.hypoglossus,
+            inexpiably: inexpiably ?? self.inexpiably,
+            ingratitude: ingratitude ?? self.ingratitude,
+            ladyfly: ladyfly ?? self.ladyfly,
+            medicament: medicament ?? self.medicament,
+            monogrammatic: monogrammatic ?? self.monogrammatic,
+            nobbut: nobbut ?? self.nobbut,
+            notacanthidae: notacanthidae ?? self.notacanthidae,
+            polyplacophore: polyplacophore ?? self.polyplacophore,
+            proexercise: proexercise ?? self.proexercise,
+            protoplast: protoplast ?? self.protoplast,
+            puzzling: puzzling ?? self.puzzling,
+            splanchnoskeleton: splanchnoskeleton ?? self.splanchnoskeleton,
+            unloveliness: unloveliness ?? self.unloveliness,
+            unquarantined: unquarantined ?? self.unquarantined,
+            unrenounceable: unrenounceable ?? self.unrenounceable
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Fluorometer: Codable, Sendable {
+    case integer(Int)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Fluorometer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Fluorometer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Fuzzy: Codable, Sendable {
+    case integer(Int)
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Fuzzy.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Fuzzy"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Gardenward: Codable, Sendable {
+    case bool(Bool)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Gardenward.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Gardenward"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Generalissimo: Codable, Sendable {
+    case bool(Bool)
+    case integerMap([String: Int])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode([String: Int].self) {
+            self = .integerMap(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Generalissimo.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Generalissimo"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .integerMap(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Hemicrystalline: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Hemicrystalline.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hemicrystalline"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum HemocoeleElement: Codable, Sendable {
+    case hemocoeleClass(HemocoeleClass)
+    case integerArray([Int])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(HemocoeleClass.self) {
+            self = .hemocoeleClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(HemocoeleElement.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for HemocoeleElement"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .hemocoeleClass(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - HemocoeleClass
+@objcMembers final class HemocoeleClass: NSObject, Codable, Sendable {
+    let acrogamy: JSONNull?
+    let amelification: JSONNull?
+    let autobiographic: JSONNull?
+    let berat: JSONNull?
+    let catharticalness: Double?
+    let chirotherium: Int?
+    let disdiapason: String?
+    let disproportionably: JSONNull?
+    let erythrite: JSONNull?
+    let graphic: JSONNull?
+    let hepatological: JSONNull?
+    let homocerc: Bool?
+    let incommensurably: JSONNull?
+    let misaffirm: JSONNull?
+    let nonbookish: JSONNull?
+    let pocketbook: JSONNull?
+    let sclerometric: JSONNull?
+    let stambouline: JSONNull?
+    let stickpin: JSONNull?
+    let tubulure: JSONNull?
+    let undelated: JSONNull?
+    let unsalt: JSONNull?
+    let untutelar: JSONNull?
+    let vagrant: JSONNull?
+    let walt: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case acrogamy = "acrogamy"
+        case amelification = "amelification"
+        case autobiographic = "autobiographic"
+        case berat = "berat"
+        case catharticalness = "catharticalness"
+        case chirotherium = "Chirotherium"
+        case disdiapason = "disdiapason"
+        case disproportionably = "disproportionably"
+        case erythrite = "erythrite"
+        case graphic = "graphic"
+        case hepatological = "hepatological"
+        case homocerc = "homocerc"
+        case incommensurably = "incommensurably"
+        case misaffirm = "misaffirm"
+        case nonbookish = "nonbookish"
+        case pocketbook = "pocketbook"
+        case sclerometric = "sclerometric"
+        case stambouline = "stambouline"
+        case stickpin = "stickpin"
+        case tubulure = "tubulure"
+        case undelated = "undelated"
+        case unsalt = "unsalt"
+        case untutelar = "untutelar"
+        case vagrant = "vagrant"
+        case walt = "Walt"
+    }
+
+    init(acrogamy: JSONNull?, amelification: JSONNull?, autobiographic: JSONNull?, berat: JSONNull?, catharticalness: Double?, chirotherium: Int?, disdiapason: String?, disproportionably: JSONNull?, erythrite: JSONNull?, graphic: JSONNull?, hepatological: JSONNull?, homocerc: Bool?, incommensurably: JSONNull?, misaffirm: JSONNull?, nonbookish: JSONNull?, pocketbook: JSONNull?, sclerometric: JSONNull?, stambouline: JSONNull?, stickpin: JSONNull?, tubulure: JSONNull?, undelated: JSONNull?, unsalt: JSONNull?, untutelar: JSONNull?, vagrant: JSONNull?, walt: JSONNull?) {
+        self.acrogamy = acrogamy
+        self.amelification = amelification
+        self.autobiographic = autobiographic
+        self.berat = berat
+        self.catharticalness = catharticalness
+        self.chirotherium = chirotherium
+        self.disdiapason = disdiapason
+        self.disproportionably = disproportionably
+        self.erythrite = erythrite
+        self.graphic = graphic
+        self.hepatological = hepatological
+        self.homocerc = homocerc
+        self.incommensurably = incommensurably
+        self.misaffirm = misaffirm
+        self.nonbookish = nonbookish
+        self.pocketbook = pocketbook
+        self.sclerometric = sclerometric
+        self.stambouline = stambouline
+        self.stickpin = stickpin
+        self.tubulure = tubulure
+        self.undelated = undelated
+        self.unsalt = unsalt
+        self.untutelar = untutelar
+        self.vagrant = vagrant
+        self.walt = walt
+    }
+}
+
+// MARK: HemocoeleClass convenience initializers and mutators
+
+extension HemocoeleClass {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(HemocoeleClass.self, from: data)
+        self.init(acrogamy: me.acrogamy, amelification: me.amelification, autobiographic: me.autobiographic, berat: me.berat, catharticalness: me.catharticalness, chirotherium: me.chirotherium, disdiapason: me.disdiapason, disproportionably: me.disproportionably, erythrite: me.erythrite, graphic: me.graphic, hepatological: me.hepatological, homocerc: me.homocerc, incommensurably: me.incommensurably, misaffirm: me.misaffirm, nonbookish: me.nonbookish, pocketbook: me.pocketbook, sclerometric: me.sclerometric, stambouline: me.stambouline, stickpin: me.stickpin, tubulure: me.tubulure, undelated: me.undelated, unsalt: me.unsalt, untutelar: me.untutelar, vagrant: me.vagrant, walt: me.walt)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        acrogamy: JSONNull?? = nil,
+        amelification: JSONNull?? = nil,
+        autobiographic: JSONNull?? = nil,
+        berat: JSONNull?? = nil,
+        catharticalness: Double?? = nil,
+        chirotherium: Int?? = nil,
+        disdiapason: String?? = nil,
+        disproportionably: JSONNull?? = nil,
+        erythrite: JSONNull?? = nil,
+        graphic: JSONNull?? = nil,
+        hepatological: JSONNull?? = nil,
+        homocerc: Bool?? = nil,
+        incommensurably: JSONNull?? = nil,
+        misaffirm: JSONNull?? = nil,
+        nonbookish: JSONNull?? = nil,
+        pocketbook: JSONNull?? = nil,
+        sclerometric: JSONNull?? = nil,
+        stambouline: JSONNull?? = nil,
+        stickpin: JSONNull?? = nil,
+        tubulure: JSONNull?? = nil,
+        undelated: JSONNull?? = nil,
+        unsalt: JSONNull?? = nil,
+        untutelar: JSONNull?? = nil,
+        vagrant: JSONNull?? = nil,
+        walt: JSONNull?? = nil
+    ) -> HemocoeleClass {
+        return HemocoeleClass(
+            acrogamy: acrogamy ?? self.acrogamy,
+            amelification: amelification ?? self.amelification,
+            autobiographic: autobiographic ?? self.autobiographic,
+            berat: berat ?? self.berat,
+            catharticalness: catharticalness ?? self.catharticalness,
+            chirotherium: chirotherium ?? self.chirotherium,
+            disdiapason: disdiapason ?? self.disdiapason,
+            disproportionably: disproportionably ?? self.disproportionably,
+            erythrite: erythrite ?? self.erythrite,
+            graphic: graphic ?? self.graphic,
+            hepatological: hepatological ?? self.hepatological,
+            homocerc: homocerc ?? self.homocerc,
+            incommensurably: incommensurably ?? self.incommensurably,
+            misaffirm: misaffirm ?? self.misaffirm,
+            nonbookish: nonbookish ?? self.nonbookish,
+            pocketbook: pocketbook ?? self.pocketbook,
+            sclerometric: sclerometric ?? self.sclerometric,
+            stambouline: stambouline ?? self.stambouline,
+            stickpin: stickpin ?? self.stickpin,
+            tubulure: tubulure ?? self.tubulure,
+            undelated: undelated ?? self.undelated,
+            unsalt: unsalt ?? self.unsalt,
+            untutelar: untutelar ?? self.untutelar,
+            vagrant: vagrant ?? self.vagrant,
+            walt: walt ?? self.walt
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Hoister: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Hoister.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hoister"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Hyperpiesi: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case nullArray([JSONNull?])
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Hyperpiesi.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hyperpiesi"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Hyppish: Codable, Sendable {
+    case bool(Bool)
+    case string(String)
+    case null
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Bool.self) {
+            self = .bool(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if container.decodeNil() {
+            self = .null
+            return
+        }
+        throw DecodingError.typeMismatch(Hyppish.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Hyppish"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .bool(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        case .null:
+            try container.encodeNil()
+        }
+    }
+}
+
+enum Idealizer: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case integer(Int)
+    case nullArray([JSONNull?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([JSONNull?].self) {
+            self = .nullArray(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Idealizer.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Idealizer"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .integer(let x):
+            try container.encode(x)
+        case .nullArray(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Incrustator: Codable, Sendable {
+    case integer(Int)
+    case integerArray([Int])
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Int.self) {
+            self = .integer(x)
+            return
+        }
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Incrustator.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Incrustator"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integer(let x):
+            try container.encode(x)
+        case .integerArray(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+enum Intentiveness: Codable, Sendable {
+    case cimeliaClass(CimeliaClass)
+    case double(Double)
+    case string(String)
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode(Double.self) {
+            self = .double(x)
+            return
+        }
+        if let x = try? container.decode(String.self) {
+            self = .string(x)
+            return
+        }
+        if let x = try? container.decode(CimeliaClass.self) {
+            self = .cimeliaClass(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Intentiveness.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Intentiveness"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .cimeliaClass(let x):
+            try container.encode(x)
+        case .double(let x):
+            try container.encode(x)
+        case .string(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Interacinar
+@objcMembers final class Interacinar: NSObject, Codable, Sendable {
+    let assapan: Double
+    let benefactorship: Bool
+    let triseriatim: String
+    let tubbing: Int
+    let untrimmed: JSONNull?
+
+    enum CodingKeys: String, CodingKey {
+        case assapan = "assapan"
+        case benefactorship = "benefactorship"
+        case triseriatim = "triseriatim"
+        case tubbing = "tubbing"
+        case untrimmed = "untrimmed"
+    }
+
+    init(assapan: Double, benefactorship: Bool, triseriatim: String, tubbing: Int, untrimmed: JSONNull?) {
+        self.assapan = assapan
+        self.benefactorship = benefactorship
+        self.triseriatim = triseriatim
+        self.tubbing = tubbing
+        self.untrimmed = untrimmed
+    }
+}
+
+// MARK: Interacinar convenience initializers and mutators
+
+extension Interacinar {
+    convenience init(data: Data) throws {
+        let me = try newJSONDecoder().decode(Interacinar.self, from: data)
+        self.init(assapan: me.assapan, benefactorship: me.benefactorship, triseriatim: me.triseriatim, tubbing: me.tubbing, untrimmed: me.untrimmed)
+    }
+
+    convenience init(_ json: String, using encoding: String.Encoding = .utf8) throws {
+        guard let data = json.data(using: encoding) else {
+            throw NSError(domain: "JSONDecoding", code: 0, userInfo: nil)
+        }
+        try self.init(data: data)
+    }
+
+    convenience init(fromURL url: URL) throws {
+        try self.init(data: try Data(contentsOf: url))
+    }
+
+    func with(
+        assapan: Double? = nil,
+        benefactorship: Bool? = nil,
+        triseriatim: String? = nil,
+        tubbing: Int? = nil,
+        untrimmed: JSONNull?? = nil
+    ) -> Interacinar {
+        return Interacinar(
+            assapan: assapan ?? self.assapan,
+            benefactorship: benefactorship ?? self.benefactorship,
+            triseriatim: triseriatim ?? self.triseriatim,
+            tubbing: tubbing ?? self.tubbing,
+            untrimmed: untrimmed ?? self.untrimmed
+        )
+    }
+
+    func jsonData() throws -> Data {
+        return try newJSONEncoder().encode(self)
+    }
+
+    func jsonString(encoding: String.Encoding = .utf8) throws -> String? {
+        return String(data: try self.jsonData(), encoding: encoding)
+    }
+}
+
+enum Jacutinga: Codable, Sendable {
+    case integerArray([Int])
+    case unionMap([String: Int?])
+
+    init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if let x = try? container.decode([Int].self) {
+            self = .integerArray(x)
+            return
+        }
+        if let x = try? container.decode([String: Int?].self) {
+            self = .unionMap(x)
+            return
+        }
+        throw DecodingError.typeMismatch(Jacutinga.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for Jacutinga"))
+    }
+
+    func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        switch self {
+        case .integerArray(let x):
+            try container.encode(x)
+        case .unionMap(let x):
+            try container.encode(x)
+        }
+    }
+}
+
+// MARK: - Helper functions for creating encoders and decoders
+
+func newJSONDecoder() -> JSONDecoder {
+    let decoder = JSONDecoder()
+    decoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
+        let container = try decoder.singleValueContainer()
+        let dateStr = try container.decode(String.self)
+
+        let formatter = DateFormatter()
+        formatter.calendar = Calendar(identifier: .iso8601)
+        formatter.locale = Locale(identifier: "en_US_POSIX")
+        formatter.timeZone = TimeZone(secondsFromGMT: 0)
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssXXXXX"
+        if let date = formatter.date(from: dateStr) {
+            return date
+        }
+        throw DecodingError.typeMismatch(Date.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Could not decode date"))
+    })
+    return decoder
+}
+
+func newJSONEncoder() -> JSONEncoder {
+    let encoder = JSONEncoder()
+    let formatter = DateFormatter()
+    formatter.calendar = Calendar(identifier: .iso8601)
+    formatter.locale = Locale(identifier: "en_US_POSIX")
+    formatter.timeZone = TimeZone(secondsFromGMT: 0)
+    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXXXX"
+    encoder.dateEncodingStrategy = .formatted(formatter)
+    return encoder
+}
+
+// MARK: - Encode/decode helpers
+
+@objcMembers final class JSONNull: NSObject, Codable, Sendable {
+
+    public static func == (lhs: JSONNull, rhs: JSONNull) -> Bool {
+        return true
+    }
+
+    override public init() {}
+
+    public required init(from decoder: Decoder) throws {
+        let container = try decoder.singleValueContainer()
+        if !container.decodeNil() {
+            throw DecodingError.typeMismatch(JSONNull.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for JSONNull"))
+        }
+    }
+
+    public func encode(to encoder: Encoder) throws {
+        var container = encoder.singleValueContainer()
+        try container.encodeNil()
+    }
+}
diff --git a/base/typescript/test/inputs/json/misc/00c36.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/00c36.json/default/TopLevel.ts
index 73b98bb..d1e0e64 100644
--- a/base/typescript/test/inputs/json/misc/00c36.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/00c36.json/default/TopLevel.ts
@@ -159,7 +159,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/00ec5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/00ec5.json/default/TopLevel.ts
index 074a87e..ca42104 100644
--- a/base/typescript/test/inputs/json/misc/00ec5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/00ec5.json/default/TopLevel.ts
@@ -201,7 +201,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/010b1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/010b1.json/default/TopLevel.ts
index 79fd9ae..2f98523 100644
--- a/base/typescript/test/inputs/json/misc/010b1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/010b1.json/default/TopLevel.ts
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/016af.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/016af.json/default/TopLevel.ts
index 7855aee..9e038ce 100644
--- a/base/typescript/test/inputs/json/misc/016af.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/016af.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/033b1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/033b1.json/default/TopLevel.ts
index b23934d..4708e9f 100644
--- a/base/typescript/test/inputs/json/misc/033b1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/033b1.json/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/050b0.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/050b0.json/default/TopLevel.ts
index c516128..b57b9e2 100644
--- a/base/typescript/test/inputs/json/misc/050b0.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/050b0.json/default/TopLevel.ts
@@ -175,7 +175,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/06bee.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/06bee.json/default/TopLevel.ts
index 2e799ab..6cbea0b 100644
--- a/base/typescript/test/inputs/json/misc/06bee.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/06bee.json/default/TopLevel.ts
@@ -170,7 +170,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/07540.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/07540.json/default/TopLevel.ts
index c2737c3..4f35857 100644
--- a/base/typescript/test/inputs/json/misc/07540.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/07540.json/default/TopLevel.ts
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/0779f.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/0779f.json/default/TopLevel.ts
index 9128987..f737aad 100644
--- a/base/typescript/test/inputs/json/misc/0779f.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/0779f.json/default/TopLevel.ts
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/07c75.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/07c75.json/default/TopLevel.ts
index 8140ea8..59e9a64 100644
--- a/base/typescript/test/inputs/json/misc/07c75.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/07c75.json/default/TopLevel.ts
@@ -160,7 +160,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/09f54.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/09f54.json/default/TopLevel.ts
index b1c5823..4324306 100644
--- a/base/typescript/test/inputs/json/misc/09f54.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/09f54.json/default/TopLevel.ts
@@ -148,7 +148,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/0a358.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/0a358.json/default/TopLevel.ts
index c0545c9..145129a 100644
--- a/base/typescript/test/inputs/json/misc/0a358.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/0a358.json/default/TopLevel.ts
@@ -150,7 +150,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/0a91a.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/0a91a.json/default/TopLevel.ts
index 6992073..0877eae 100644
--- a/base/typescript/test/inputs/json/misc/0a91a.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/0a91a.json/default/TopLevel.ts
@@ -350,7 +350,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/0b91a.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/0b91a.json/default/TopLevel.ts
index c4d4f8a..aeaf842 100644
--- a/base/typescript/test/inputs/json/misc/0b91a.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/0b91a.json/default/TopLevel.ts
@@ -176,7 +176,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/0cffa.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/0cffa.json/default/TopLevel.ts
index 2a08acf..a1c53a3 100644
--- a/base/typescript/test/inputs/json/misc/0cffa.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/0cffa.json/default/TopLevel.ts
@@ -243,7 +243,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/0e0c2.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/0e0c2.json/default/TopLevel.ts
index d265c20..846dd3e 100644
--- a/base/typescript/test/inputs/json/misc/0e0c2.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/0e0c2.json/default/TopLevel.ts
@@ -206,7 +206,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/0fecf.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/0fecf.json/default/TopLevel.ts
index 6e4e868..aa2dae4 100644
--- a/base/typescript/test/inputs/json/misc/0fecf.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/0fecf.json/default/TopLevel.ts
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/10be4.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/10be4.json/default/TopLevel.ts
index 48c8c9a..1631a6a 100644
--- a/base/typescript/test/inputs/json/misc/10be4.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/10be4.json/default/TopLevel.ts
@@ -175,7 +175,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/112b5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/112b5.json/default/TopLevel.ts
index b7f581f..f5cc84f 100644
--- a/base/typescript/test/inputs/json/misc/112b5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/112b5.json/default/TopLevel.ts
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/127a1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/127a1.json/default/TopLevel.ts
index 9669ccb..9a450eb 100644
--- a/base/typescript/test/inputs/json/misc/127a1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/127a1.json/default/TopLevel.ts
@@ -243,7 +243,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/13d8d.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/13d8d.json/default/TopLevel.ts
index 2bfdd84..c0763e8 100644
--- a/base/typescript/test/inputs/json/misc/13d8d.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/13d8d.json/default/TopLevel.ts
@@ -161,7 +161,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/14d38.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/14d38.json/default/TopLevel.ts
index 8ca9cd2..94bbc97 100644
--- a/base/typescript/test/inputs/json/misc/14d38.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/14d38.json/default/TopLevel.ts
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/167d6.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/167d6.json/default/TopLevel.ts
index b23934d..4708e9f 100644
--- a/base/typescript/test/inputs/json/misc/167d6.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/167d6.json/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/16bc5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/16bc5.json/default/TopLevel.ts
index 41607fd..cc89913 100644
--- a/base/typescript/test/inputs/json/misc/16bc5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/16bc5.json/default/TopLevel.ts
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/176f1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/176f1.json/default/TopLevel.ts
index 90055c0..f22a382 100644
--- a/base/typescript/test/inputs/json/misc/176f1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/176f1.json/default/TopLevel.ts
@@ -160,7 +160,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/1a7f5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/1a7f5.json/default/TopLevel.ts
index 79fd9ae..2f98523 100644
--- a/base/typescript/test/inputs/json/misc/1a7f5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/1a7f5.json/default/TopLevel.ts
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/1b28c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/1b28c.json/default/TopLevel.ts
index 7855aee..9e038ce 100644
--- a/base/typescript/test/inputs/json/misc/1b28c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/1b28c.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/1b409.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/1b409.json/default/TopLevel.ts
index e5c7872..bf751a6 100644
--- a/base/typescript/test/inputs/json/misc/1b409.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/1b409.json/default/TopLevel.ts
@@ -209,7 +209,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/2465e.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/2465e.json/default/TopLevel.ts
index 2d680db..bd06b10 100644
--- a/base/typescript/test/inputs/json/misc/2465e.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/2465e.json/default/TopLevel.ts
@@ -208,7 +208,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/24f52.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/24f52.json/default/TopLevel.ts
index 9128987..f737aad 100644
--- a/base/typescript/test/inputs/json/misc/24f52.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/24f52.json/default/TopLevel.ts
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/262f0.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/262f0.json/default/TopLevel.ts
index 372a12f..cb90b17 100644
--- a/base/typescript/test/inputs/json/misc/262f0.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/262f0.json/default/TopLevel.ts
@@ -235,7 +235,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/26b49.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/26b49.json/default/TopLevel.ts
index 9124a6f..d8b2c85 100644
--- a/base/typescript/test/inputs/json/misc/26b49.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/26b49.json/default/TopLevel.ts
@@ -242,7 +242,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/26c9c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/26c9c.json/default/TopLevel.ts
index c2f681e..9ea9110 100644
--- a/base/typescript/test/inputs/json/misc/26c9c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/26c9c.json/default/TopLevel.ts
@@ -322,7 +322,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/27332.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/27332.json/default/TopLevel.ts
index 78bf8a1..85ba81b 100644
--- a/base/typescript/test/inputs/json/misc/27332.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/27332.json/default/TopLevel.ts
@@ -274,7 +274,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/29f47.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/29f47.json/default/TopLevel.ts
index da6dbd1..e9fcd58 100644
--- a/base/typescript/test/inputs/json/misc/29f47.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/29f47.json/default/TopLevel.ts
@@ -261,7 +261,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/2d4e2.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/2d4e2.json/default/TopLevel.ts
index e0060c9..5c42ecf 100644
--- a/base/typescript/test/inputs/json/misc/2d4e2.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/2d4e2.json/default/TopLevel.ts
@@ -219,7 +219,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/2df80.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/2df80.json/default/TopLevel.ts
index ef56411..5f401af 100644
--- a/base/typescript/test/inputs/json/misc/2df80.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/2df80.json/default/TopLevel.ts
@@ -164,7 +164,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/31189.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/31189.json/default/TopLevel.ts
index 72c63bb..7d95ecd 100644
--- a/base/typescript/test/inputs/json/misc/31189.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/31189.json/default/TopLevel.ts
@@ -162,7 +162,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/32431.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/32431.json/default/TopLevel.ts
index 214edbc..9af4c36 100644
--- a/base/typescript/test/inputs/json/misc/32431.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/32431.json/default/TopLevel.ts
@@ -198,7 +198,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/32d5c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/32d5c.json/default/TopLevel.ts
index 6824501..3b1c144 100644
--- a/base/typescript/test/inputs/json/misc/32d5c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/32d5c.json/default/TopLevel.ts
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/337ed.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/337ed.json/default/TopLevel.ts
index cd7228a..5c6908b 100644
--- a/base/typescript/test/inputs/json/misc/337ed.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/337ed.json/default/TopLevel.ts
@@ -193,7 +193,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/33d2e.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/33d2e.json/default/TopLevel.ts
index dfcd3eb..9275000 100644
--- a/base/typescript/test/inputs/json/misc/33d2e.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/33d2e.json/default/TopLevel.ts
@@ -176,7 +176,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/34702.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/34702.json/default/TopLevel.ts
index a5ffed5..feed065 100644
--- a/base/typescript/test/inputs/json/misc/34702.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/34702.json/default/TopLevel.ts
@@ -190,7 +190,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/3536b.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/3536b.json/default/TopLevel.ts
index 0e85deb..6dfce13 100644
--- a/base/typescript/test/inputs/json/misc/3536b.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/3536b.json/default/TopLevel.ts
@@ -164,7 +164,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/3659d.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/3659d.json/default/TopLevel.ts
index 7855aee..9e038ce 100644
--- a/base/typescript/test/inputs/json/misc/3659d.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/3659d.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/36d5d.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/36d5d.json/default/TopLevel.ts
index 9128987..f737aad 100644
--- a/base/typescript/test/inputs/json/misc/36d5d.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/36d5d.json/default/TopLevel.ts
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/3a6b3.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/3a6b3.json/default/TopLevel.ts
index 9128987..f737aad 100644
--- a/base/typescript/test/inputs/json/misc/3a6b3.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/3a6b3.json/default/TopLevel.ts
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/3e9a3.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/3e9a3.json/default/TopLevel.ts
index 90055c0..f22a382 100644
--- a/base/typescript/test/inputs/json/misc/3e9a3.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/3e9a3.json/default/TopLevel.ts
@@ -160,7 +160,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/3f1ce.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/3f1ce.json/default/TopLevel.ts
index 31ba280..524cd8c 100644
--- a/base/typescript/test/inputs/json/misc/3f1ce.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/3f1ce.json/default/TopLevel.ts
@@ -235,7 +235,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/421d4.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/421d4.json/default/TopLevel.ts
index 98f2455..1a68719 100644
--- a/base/typescript/test/inputs/json/misc/421d4.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/421d4.json/default/TopLevel.ts
@@ -246,7 +246,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/437e7.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/437e7.json/default/TopLevel.ts
index 72f4754..87f0894 100644
--- a/base/typescript/test/inputs/json/misc/437e7.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/437e7.json/default/TopLevel.ts
@@ -239,7 +239,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/43970.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/43970.json/default/TopLevel.ts
index 3418e3c..0c1ccc3 100644
--- a/base/typescript/test/inputs/json/misc/43970.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/43970.json/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/43eaf.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/43eaf.json/default/TopLevel.ts
index b23934d..4708e9f 100644
--- a/base/typescript/test/inputs/json/misc/43eaf.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/43eaf.json/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/458db.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/458db.json/default/TopLevel.ts
index d32ec59..f8670db 100644
--- a/base/typescript/test/inputs/json/misc/458db.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/458db.json/default/TopLevel.ts
@@ -177,7 +177,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/4961a.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/4961a.json/default/TopLevel.ts
index 7855aee..9e038ce 100644
--- a/base/typescript/test/inputs/json/misc/4961a.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/4961a.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/4a0d7.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/4a0d7.json/default/TopLevel.ts
index 7855aee..9e038ce 100644
--- a/base/typescript/test/inputs/json/misc/4a0d7.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/4a0d7.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/4a455.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/4a455.json/default/TopLevel.ts
index 009ef29..2567151 100644
--- a/base/typescript/test/inputs/json/misc/4a455.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/4a455.json/default/TopLevel.ts
@@ -175,7 +175,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/4c547.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/4c547.json/default/TopLevel.ts
index 41607fd..cc89913 100644
--- a/base/typescript/test/inputs/json/misc/4c547.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/4c547.json/default/TopLevel.ts
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/4d6fb.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/4d6fb.json/default/TopLevel.ts
index 440fe6a..f5bb8ac 100644
--- a/base/typescript/test/inputs/json/misc/4d6fb.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/4d6fb.json/default/TopLevel.ts
@@ -273,7 +273,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/4e336.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/4e336.json/default/TopLevel.ts
index 7855aee..9e038ce 100644
--- a/base/typescript/test/inputs/json/misc/4e336.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/4e336.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/54147.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/54147.json/default/TopLevel.ts
index df4bd38..82d2fd7 100644
--- a/base/typescript/test/inputs/json/misc/54147.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/54147.json/default/TopLevel.ts
@@ -148,7 +148,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/54d32.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/54d32.json/default/TopLevel.ts
index fa60a51..270ed51 100644
--- a/base/typescript/test/inputs/json/misc/54d32.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/54d32.json/default/TopLevel.ts
@@ -152,7 +152,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/570ec.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/570ec.json/default/TopLevel.ts
index d9fd266..f585dd7 100644
--- a/base/typescript/test/inputs/json/misc/570ec.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/570ec.json/default/TopLevel.ts
@@ -167,7 +167,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/5dd0d.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/5dd0d.json/default/TopLevel.ts
index 9128987..f737aad 100644
--- a/base/typescript/test/inputs/json/misc/5dd0d.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/5dd0d.json/default/TopLevel.ts
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/5eae5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/5eae5.json/default/TopLevel.ts
index e0539f2..8907265 100644
--- a/base/typescript/test/inputs/json/misc/5eae5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/5eae5.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/5eb20.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/5eb20.json/default/TopLevel.ts
index 9128987..f737aad 100644
--- a/base/typescript/test/inputs/json/misc/5eb20.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/5eb20.json/default/TopLevel.ts
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/5f3a1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/5f3a1.json/default/TopLevel.ts
index b23934d..4708e9f 100644
--- a/base/typescript/test/inputs/json/misc/5f3a1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/5f3a1.json/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/5f7fe.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/5f7fe.json/default/TopLevel.ts
index 2ac1c15..1697b89 100644
--- a/base/typescript/test/inputs/json/misc/5f7fe.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/5f7fe.json/default/TopLevel.ts
@@ -320,7 +320,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/617e8.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/617e8.json/default/TopLevel.ts
index 9fe7008..183d008 100644
--- a/base/typescript/test/inputs/json/misc/617e8.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/617e8.json/default/TopLevel.ts
@@ -319,7 +319,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/61b66.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/61b66.json/default/TopLevel.ts
index 9128987..f737aad 100644
--- a/base/typescript/test/inputs/json/misc/61b66.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/61b66.json/default/TopLevel.ts
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/6260a.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/6260a.json/default/TopLevel.ts
index b23934d..4708e9f 100644
--- a/base/typescript/test/inputs/json/misc/6260a.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/6260a.json/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/65dec.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/65dec.json/default/TopLevel.ts
index dfcbff1..c8371ad 100644
--- a/base/typescript/test/inputs/json/misc/65dec.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/65dec.json/default/TopLevel.ts
@@ -198,7 +198,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/66121.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/66121.json/default/TopLevel.ts
index 5bd7841..dbe517c 100644
--- a/base/typescript/test/inputs/json/misc/66121.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/66121.json/default/TopLevel.ts
@@ -170,7 +170,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/6617c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/6617c.json/default/TopLevel.ts
index 1756d7f..d7402d4 100644
--- a/base/typescript/test/inputs/json/misc/6617c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/6617c.json/default/TopLevel.ts
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/67c03.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/67c03.json/default/TopLevel.ts
index 4be4ecd..c83132c 100644
--- a/base/typescript/test/inputs/json/misc/67c03.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/67c03.json/default/TopLevel.ts
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/68c30.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/68c30.json/default/TopLevel.ts
index 30d1937..131b9d1 100644
--- a/base/typescript/test/inputs/json/misc/68c30.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/68c30.json/default/TopLevel.ts
@@ -166,7 +166,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/6c155.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/6c155.json/default/TopLevel.ts
index f39c6c9..915e83c 100644
--- a/base/typescript/test/inputs/json/misc/6c155.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/6c155.json/default/TopLevel.ts
@@ -189,7 +189,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/6de06.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/6de06.json/default/TopLevel.ts
index ee7ee7a..3f2914a 100644
--- a/base/typescript/test/inputs/json/misc/6de06.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/6de06.json/default/TopLevel.ts
@@ -278,7 +278,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/6dec6.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/6dec6.json/default/TopLevel.ts
index 9ab10ee..0277336 100644
--- a/base/typescript/test/inputs/json/misc/6dec6.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/6dec6.json/default/TopLevel.ts
@@ -235,7 +235,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/6eb00.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/6eb00.json/default/TopLevel.ts
index 5650ebe..db06caa 100644
--- a/base/typescript/test/inputs/json/misc/6eb00.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/6eb00.json/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/70c77.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/70c77.json/default/TopLevel.ts
index b23934d..4708e9f 100644
--- a/base/typescript/test/inputs/json/misc/70c77.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/70c77.json/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/734ad.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/734ad.json/default/TopLevel.ts
index ca2f1aa..f93ca5c 100644
--- a/base/typescript/test/inputs/json/misc/734ad.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/734ad.json/default/TopLevel.ts
@@ -204,7 +204,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/75912.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/75912.json/default/TopLevel.ts
index b23934d..4708e9f 100644
--- a/base/typescript/test/inputs/json/misc/75912.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/75912.json/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/7681c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/7681c.json/default/TopLevel.ts
index 05bb9a3..ff9f1c7 100644
--- a/base/typescript/test/inputs/json/misc/7681c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/7681c.json/default/TopLevel.ts
@@ -243,7 +243,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/76ae1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/76ae1.json/default/TopLevel.ts
index d51af86..5162f83 100644
--- a/base/typescript/test/inputs/json/misc/76ae1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/76ae1.json/default/TopLevel.ts
@@ -316,7 +316,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/77392.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/77392.json/default/TopLevel.ts
index a9b9662..62d6c4a 100644
--- a/base/typescript/test/inputs/json/misc/77392.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/77392.json/default/TopLevel.ts
@@ -150,7 +150,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/7d397.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/7d397.json/default/TopLevel.ts
index 3cd089b..e2d58dc 100644
--- a/base/typescript/test/inputs/json/misc/7d397.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/7d397.json/default/TopLevel.ts
@@ -208,7 +208,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/7d722.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/7d722.json/default/TopLevel.ts
index 9128987..f737aad 100644
--- a/base/typescript/test/inputs/json/misc/7d722.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/7d722.json/default/TopLevel.ts
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/7df41.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/7df41.json/default/TopLevel.ts
index 685ba12..e0e13a8 100644
--- a/base/typescript/test/inputs/json/misc/7df41.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/7df41.json/default/TopLevel.ts
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/7dfa6.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/7dfa6.json/default/TopLevel.ts
index 7855aee..9e038ce 100644
--- a/base/typescript/test/inputs/json/misc/7dfa6.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/7dfa6.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/7eb30.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/7eb30.json/default/TopLevel.ts
index 7fdf4a7..6b2ea5c 100644
--- a/base/typescript/test/inputs/json/misc/7eb30.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/7eb30.json/default/TopLevel.ts
@@ -172,7 +172,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/7f568.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/7f568.json/default/TopLevel.ts
index 02e6961..129c46a 100644
--- a/base/typescript/test/inputs/json/misc/7f568.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/7f568.json/default/TopLevel.ts
@@ -164,7 +164,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/7fbfb.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/7fbfb.json/default/TopLevel.ts
index 9b02fe5..e6b26ea 100644
--- a/base/typescript/test/inputs/json/misc/7fbfb.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/7fbfb.json/default/TopLevel.ts
@@ -159,7 +159,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/80aff.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/80aff.json/default/TopLevel.ts
index 99c8d41..507c998 100644
--- a/base/typescript/test/inputs/json/misc/80aff.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/80aff.json/default/TopLevel.ts
@@ -151,7 +151,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/82509.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/82509.json/default/TopLevel.ts
index 4405c98..764c024 100644
--- a/base/typescript/test/inputs/json/misc/82509.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/82509.json/default/TopLevel.ts
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/8592b.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/8592b.json/default/TopLevel.ts
index a86c84d..365aaf4 100644
--- a/base/typescript/test/inputs/json/misc/8592b.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/8592b.json/default/TopLevel.ts
@@ -247,7 +247,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/88130.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/88130.json/default/TopLevel.ts
index 41607fd..cc89913 100644
--- a/base/typescript/test/inputs/json/misc/88130.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/88130.json/default/TopLevel.ts
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/8a62c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/8a62c.json/default/TopLevel.ts
index 7855aee..9e038ce 100644
--- a/base/typescript/test/inputs/json/misc/8a62c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/8a62c.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/908db.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/908db.json/default/TopLevel.ts
index 643e71d..0678028 100644
--- a/base/typescript/test/inputs/json/misc/908db.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/908db.json/default/TopLevel.ts
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/9617f.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/9617f.json/default/TopLevel.ts
index b23934d..4708e9f 100644
--- a/base/typescript/test/inputs/json/misc/9617f.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/9617f.json/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/96f7c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/96f7c.json/default/TopLevel.ts
index fcd9f84..e22ad05 100644
--- a/base/typescript/test/inputs/json/misc/96f7c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/96f7c.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/9847b.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/9847b.json/default/TopLevel.ts
index ab37fbc..4075396 100644
--- a/base/typescript/test/inputs/json/misc/9847b.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/9847b.json/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/9929c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/9929c.json/default/TopLevel.ts
index 41607fd..cc89913 100644
--- a/base/typescript/test/inputs/json/misc/9929c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/9929c.json/default/TopLevel.ts
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/996bd.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/996bd.json/default/TopLevel.ts
index bd4c7b5..258cc59 100644
--- a/base/typescript/test/inputs/json/misc/996bd.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/996bd.json/default/TopLevel.ts
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/9a503.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/9a503.json/default/TopLevel.ts
index 0ce5132..bd955f0 100644
--- a/base/typescript/test/inputs/json/misc/9a503.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/9a503.json/default/TopLevel.ts
@@ -162,7 +162,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/9ac3b.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/9ac3b.json/default/TopLevel.ts
index de26006..85ac3ca 100644
--- a/base/typescript/test/inputs/json/misc/9ac3b.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/9ac3b.json/default/TopLevel.ts
@@ -159,7 +159,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/9eed5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/9eed5.json/default/TopLevel.ts
index 888f5ab..172e97c 100644
--- a/base/typescript/test/inputs/json/misc/9eed5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/9eed5.json/default/TopLevel.ts
@@ -162,7 +162,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/a0496.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/a0496.json/default/TopLevel.ts
index 7ffc54f..f86a624 100644
--- a/base/typescript/test/inputs/json/misc/a0496.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/a0496.json/default/TopLevel.ts
@@ -153,7 +153,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/a1eca.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/a1eca.json/default/TopLevel.ts
index 41607fd..cc89913 100644
--- a/base/typescript/test/inputs/json/misc/a1eca.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/a1eca.json/default/TopLevel.ts
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/a3d8c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/a3d8c.json/default/TopLevel.ts
index 6856c0f..bca72bd 100644
--- a/base/typescript/test/inputs/json/misc/a3d8c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/a3d8c.json/default/TopLevel.ts
@@ -245,7 +245,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/a45b0.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/a45b0.json/default/TopLevel.ts
index 79fd9ae..2f98523 100644
--- a/base/typescript/test/inputs/json/misc/a45b0.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/a45b0.json/default/TopLevel.ts
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/a71df.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/a71df.json/default/TopLevel.ts
index 9128987..f737aad 100644
--- a/base/typescript/test/inputs/json/misc/a71df.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/a71df.json/default/TopLevel.ts
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/a9691.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/a9691.json/default/TopLevel.ts
index b23934d..4708e9f 100644
--- a/base/typescript/test/inputs/json/misc/a9691.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/a9691.json/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/ab0d1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/ab0d1.json/default/TopLevel.ts
index 79fd9ae..2f98523 100644
--- a/base/typescript/test/inputs/json/misc/ab0d1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/ab0d1.json/default/TopLevel.ts
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/abb4b.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/abb4b.json/default/TopLevel.ts
index 7855aee..9e038ce 100644
--- a/base/typescript/test/inputs/json/misc/abb4b.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/abb4b.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/ac944.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/ac944.json/default/TopLevel.ts
index b23934d..4708e9f 100644
--- a/base/typescript/test/inputs/json/misc/ac944.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/ac944.json/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/ad8be.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/ad8be.json/default/TopLevel.ts
index 48c8c9a..1631a6a 100644
--- a/base/typescript/test/inputs/json/misc/ad8be.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/ad8be.json/default/TopLevel.ts
@@ -175,7 +175,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/ae7f0.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/ae7f0.json/default/TopLevel.ts
index 22417cd..20a4fdc 100644
--- a/base/typescript/test/inputs/json/misc/ae7f0.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/ae7f0.json/default/TopLevel.ts
@@ -223,7 +223,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/ae9ca.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/ae9ca.json/default/TopLevel.ts
index 0544499..3e0709e 100644
--- a/base/typescript/test/inputs/json/misc/ae9ca.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/ae9ca.json/default/TopLevel.ts
@@ -171,7 +171,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/af2d1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/af2d1.json/default/TopLevel.ts
index 71dde19..7d5234c 100644
--- a/base/typescript/test/inputs/json/misc/af2d1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/af2d1.json/default/TopLevel.ts
@@ -221,7 +221,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/b4865.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/b4865.json/default/TopLevel.ts
index 8338dc5..e3aa916 100644
--- a/base/typescript/test/inputs/json/misc/b4865.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/b4865.json/default/TopLevel.ts
@@ -159,7 +159,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/b6f2c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/b6f2c.json/default/TopLevel.ts
index 7855aee..9e038ce 100644
--- a/base/typescript/test/inputs/json/misc/b6f2c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/b6f2c.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/b6fe5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/b6fe5.json/default/TopLevel.ts
index acae7d7..b3d9d2a 100644
--- a/base/typescript/test/inputs/json/misc/b6fe5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/b6fe5.json/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/b9f64.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/b9f64.json/default/TopLevel.ts
index f5ee9df..4c629c2 100644
--- a/base/typescript/test/inputs/json/misc/b9f64.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/b9f64.json/default/TopLevel.ts
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/bb1ec.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/bb1ec.json/default/TopLevel.ts
index 7855aee..9e038ce 100644
--- a/base/typescript/test/inputs/json/misc/bb1ec.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/bb1ec.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/be234.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/be234.json/default/TopLevel.ts
index 2e62e5b..eec4e00 100644
--- a/base/typescript/test/inputs/json/misc/be234.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/be234.json/default/TopLevel.ts
@@ -284,7 +284,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/c0356.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/c0356.json/default/TopLevel.ts
index 1001995..739d830 100644
--- a/base/typescript/test/inputs/json/misc/c0356.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/c0356.json/default/TopLevel.ts
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/c0a3a.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/c0a3a.json/default/TopLevel.ts
index 9128987..f737aad 100644
--- a/base/typescript/test/inputs/json/misc/c0a3a.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/c0a3a.json/default/TopLevel.ts
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/c3303.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/c3303.json/default/TopLevel.ts
index 2e7fec8..8569404 100644
--- a/base/typescript/test/inputs/json/misc/c3303.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/c3303.json/default/TopLevel.ts
@@ -242,7 +242,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/c6cfd.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/c6cfd.json/default/TopLevel.ts
index 4d0865c..6a92ef6 100644
--- a/base/typescript/test/inputs/json/misc/c6cfd.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/c6cfd.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/c8c7e.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/c8c7e.json/default/TopLevel.ts
index 08a8eef..7731042 100644
--- a/base/typescript/test/inputs/json/misc/c8c7e.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/c8c7e.json/default/TopLevel.ts
@@ -159,7 +159,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/cb0cc.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/cb0cc.json/default/TopLevel.ts
index 2b858ab..d0d04b5 100644
--- a/base/typescript/test/inputs/json/misc/cb0cc.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/cb0cc.json/default/TopLevel.ts
@@ -152,7 +152,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/cb81e.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/cb81e.json/default/TopLevel.ts
index a621341..2f17ea8 100644
--- a/base/typescript/test/inputs/json/misc/cb81e.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/cb81e.json/default/TopLevel.ts
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/ccd18.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/ccd18.json/default/TopLevel.ts
index 9128987..f737aad 100644
--- a/base/typescript/test/inputs/json/misc/ccd18.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/ccd18.json/default/TopLevel.ts
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/cd238.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/cd238.json/default/TopLevel.ts
index 9128987..f737aad 100644
--- a/base/typescript/test/inputs/json/misc/cd238.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/cd238.json/default/TopLevel.ts
@@ -168,7 +168,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/cd463.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/cd463.json/default/TopLevel.ts
index b23934d..4708e9f 100644
--- a/base/typescript/test/inputs/json/misc/cd463.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/cd463.json/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/cda6c.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/cda6c.json/default/TopLevel.ts
index fa35a36..f66090b 100644
--- a/base/typescript/test/inputs/json/misc/cda6c.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/cda6c.json/default/TopLevel.ts
@@ -159,7 +159,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/cf0d8.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/cf0d8.json/default/TopLevel.ts
index 41607fd..cc89913 100644
--- a/base/typescript/test/inputs/json/misc/cf0d8.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/cf0d8.json/default/TopLevel.ts
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/cfbce.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/cfbce.json/default/TopLevel.ts
index b23934d..4708e9f 100644
--- a/base/typescript/test/inputs/json/misc/cfbce.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/cfbce.json/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/d0908.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/d0908.json/default/TopLevel.ts
index 7855aee..9e038ce 100644
--- a/base/typescript/test/inputs/json/misc/d0908.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/d0908.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/d23d5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/d23d5.json/default/TopLevel.ts
index 6510c29..85b9e49 100644
--- a/base/typescript/test/inputs/json/misc/d23d5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/d23d5.json/default/TopLevel.ts
@@ -150,7 +150,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/dbfb3.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/dbfb3.json/default/TopLevel.ts
index d558381..3acd0aa 100644
--- a/base/typescript/test/inputs/json/misc/dbfb3.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/dbfb3.json/default/TopLevel.ts
@@ -235,7 +235,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/dc44f.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/dc44f.json/default/TopLevel.ts
index 3ac6e02..e95885c 100644
--- a/base/typescript/test/inputs/json/misc/dc44f.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/dc44f.json/default/TopLevel.ts
@@ -203,7 +203,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/dd1ce.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/dd1ce.json/default/TopLevel.ts
index 3ac6e02..e95885c 100644
--- a/base/typescript/test/inputs/json/misc/dd1ce.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/dd1ce.json/default/TopLevel.ts
@@ -203,7 +203,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/dec3a.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/dec3a.json/default/TopLevel.ts
index fb5cea8..4fe9fad 100644
--- a/base/typescript/test/inputs/json/misc/dec3a.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/dec3a.json/default/TopLevel.ts
@@ -197,7 +197,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/df957.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/df957.json/default/TopLevel.ts
index 41607fd..cc89913 100644
--- a/base/typescript/test/inputs/json/misc/df957.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/df957.json/default/TopLevel.ts
@@ -233,7 +233,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/e0ac7.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/e0ac7.json/default/TopLevel.ts
index 023bf5d..ce9a4ae 100644
--- a/base/typescript/test/inputs/json/misc/e0ac7.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/e0ac7.json/default/TopLevel.ts
@@ -241,7 +241,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/e2915.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/e2915.json/default/TopLevel.ts
index bd65b7a..d6fbaa8 100644
--- a/base/typescript/test/inputs/json/misc/e2915.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/e2915.json/default/TopLevel.ts
@@ -235,7 +235,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/e2a58.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/e2a58.json/default/TopLevel.ts
index affca81..b93a73d 100644
--- a/base/typescript/test/inputs/json/misc/e2a58.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/e2a58.json/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/e324e.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/e324e.json/default/TopLevel.ts
index 93a59a1..201b1e6 100644
--- a/base/typescript/test/inputs/json/misc/e324e.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/e324e.json/default/TopLevel.ts
@@ -206,7 +206,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/e53b5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/e53b5.json/default/TopLevel.ts
index 73c880f..6062428 100644
--- a/base/typescript/test/inputs/json/misc/e53b5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/e53b5.json/default/TopLevel.ts
@@ -159,7 +159,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/e64a0.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/e64a0.json/default/TopLevel.ts
index b7f581f..f5cc84f 100644
--- a/base/typescript/test/inputs/json/misc/e64a0.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/e64a0.json/default/TopLevel.ts
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/e8a0b.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/e8a0b.json/default/TopLevel.ts
index 79fd9ae..2f98523 100644
--- a/base/typescript/test/inputs/json/misc/e8a0b.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/e8a0b.json/default/TopLevel.ts
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/e8b04.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/e8b04.json/default/TopLevel.ts
index dc2c1c7..af49489 100644
--- a/base/typescript/test/inputs/json/misc/e8b04.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/e8b04.json/default/TopLevel.ts
@@ -366,7 +366,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/ed095.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/ed095.json/default/TopLevel.ts
index d94fc9b..1e4f07e 100644
--- a/base/typescript/test/inputs/json/misc/ed095.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/ed095.json/default/TopLevel.ts
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/f22f5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/f22f5.json/default/TopLevel.ts
index 893055b..81aaa64 100644
--- a/base/typescript/test/inputs/json/misc/f22f5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/f22f5.json/default/TopLevel.ts
@@ -221,7 +221,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/f3139.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/f3139.json/default/TopLevel.ts
index ab37fbc..4075396 100644
--- a/base/typescript/test/inputs/json/misc/f3139.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/f3139.json/default/TopLevel.ts
@@ -138,7 +138,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/f3edf.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/f3edf.json/default/TopLevel.ts
index 79fd9ae..2f98523 100644
--- a/base/typescript/test/inputs/json/misc/f3edf.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/f3edf.json/default/TopLevel.ts
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/f466a.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/f466a.json/default/TopLevel.ts
index 79fd9ae..2f98523 100644
--- a/base/typescript/test/inputs/json/misc/f466a.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/f466a.json/default/TopLevel.ts
@@ -144,7 +144,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/f6a65.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/f6a65.json/default/TopLevel.ts
index 6e2a750..2968cf1 100644
--- a/base/typescript/test/inputs/json/misc/f6a65.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/f6a65.json/default/TopLevel.ts
@@ -243,7 +243,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/f74d5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/f74d5.json/default/TopLevel.ts
index 9e78e93..7e0898b 100644
--- a/base/typescript/test/inputs/json/misc/f74d5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/f74d5.json/default/TopLevel.ts
@@ -245,7 +245,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/f82d9.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/f82d9.json/default/TopLevel.ts
index ba1b044..6e58d43 100644
--- a/base/typescript/test/inputs/json/misc/f82d9.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/f82d9.json/default/TopLevel.ts
@@ -219,7 +219,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/f974d.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/f974d.json/default/TopLevel.ts
index e3c3c16..c1f1880 100644
--- a/base/typescript/test/inputs/json/misc/f974d.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/f974d.json/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/faff5.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/faff5.json/default/TopLevel.ts
index 4f3f849..f177cf0 100644
--- a/base/typescript/test/inputs/json/misc/faff5.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/faff5.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/fcca3.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/fcca3.json/default/TopLevel.ts
index fbd36fb..a785f7b 100644
--- a/base/typescript/test/inputs/json/misc/fcca3.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/fcca3.json/default/TopLevel.ts
@@ -345,7 +345,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/misc/fd329.json/default/TopLevel.ts b/head/typescript/test/inputs/json/misc/fd329.json/default/TopLevel.ts
index b1c5823..4324306 100644
--- a/base/typescript/test/inputs/json/misc/fd329.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/misc/fd329.json/default/TopLevel.ts
@@ -148,7 +148,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/blns-object.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/blns-object.json/default/TopLevel.ts
index 6dd4fac..e59e4b1 100644
--- a/base/typescript/test/inputs/json/priority/blns-object.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/blns-object.json/default/TopLevel.ts
@@ -730,7 +730,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/bug2037.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug2037.json/default/TopLevel.ts
index 0c1d869..1147b68 100644
--- a/base/typescript/test/inputs/json/priority/bug2037.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug2037.json/default/TopLevel.ts
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/bug2521.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug2521.json/default/TopLevel.ts
index 7f67039..5e2761b 100644
--- a/base/typescript/test/inputs/json/priority/bug2521.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug2521.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/bug2590.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug2590.json/default/TopLevel.ts
index 180c087..654a539 100644
--- a/base/typescript/test/inputs/json/priority/bug2590.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug2590.json/default/TopLevel.ts
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/bug2663.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug2663.json/default/TopLevel.ts
index 9f43a0d..4a7d7cc 100644
--- a/base/typescript/test/inputs/json/priority/bug2663.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug2663.json/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/bug2793.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug2793.json/default/TopLevel.ts
index 2c6496f..342d03d 100644
--- a/base/typescript/test/inputs/json/priority/bug2793.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug2793.json/default/TopLevel.ts
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/bug427.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug427.json/default/TopLevel.ts
index 8f6a5a5..b6fa1ff 100644
--- a/base/typescript/test/inputs/json/priority/bug427.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug427.json/default/TopLevel.ts
@@ -692,7 +692,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/bug790.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug790.json/default/TopLevel.ts
index 1b8cc69..492f180 100644
--- a/base/typescript/test/inputs/json/priority/bug790.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug790.json/default/TopLevel.ts
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/bug855-short.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug855-short.json/default/TopLevel.ts
index b39e69e..422ce87 100644
--- a/base/typescript/test/inputs/json/priority/bug855-short.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug855-short.json/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/bug863.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/bug863.json/default/TopLevel.ts
index 239a30e..85a4c25 100644
--- a/base/typescript/test/inputs/json/priority/bug863.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/bug863.json/default/TopLevel.ts
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/coin-pairs.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/coin-pairs.json/default/TopLevel.ts
index f8a2f45..139e863 100644
--- a/base/typescript/test/inputs/json/priority/coin-pairs.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/coin-pairs.json/default/TopLevel.ts
@@ -147,7 +147,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
index d56cf48..263c9c7 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
@@ -527,7 +527,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/converters-all-objects--3a443babd1cb/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/converters-all-objects--3a443babd1cb/TopLevel.ts
index 2904a51..6262326 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/converters-all-objects--3a443babd1cb/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/converters-all-objects--3a443babd1cb/TopLevel.ts
@@ -631,7 +631,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/default/TopLevel.ts
index d56cf48..263c9c7 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/default/TopLevel.ts
@@ -527,7 +527,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
index ae33627..ce1c585 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
@@ -527,7 +527,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/typescript/test/inputs/json/priority/combinations1.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
new file mode 100644
index 0000000..263c9c7
--- /dev/null
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
@@ -0,0 +1,909 @@
+// To parse this data:
+//
+//   import { Convert, TopLevel } from "./TopLevel";
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export interface TopLevel {
+    centrodesmose:      string;
+    cerograph:          CerographElement[];
+    chemotherapeutics:  ChemotherapeuticElement[];
+    cimelia:            CimeliaElement[];
+    citrated:           number;
+    clinodome:          Clinodome[];
+    coadjust:           CoadjustElement[];
+    consilience:        Consilience[];
+    constructor:        Constructor[];
+    continuative:       Continuative[];
+    credulity:          CredulityElement[];
+    creviced:           Creviced[];
+    cubiculum:          Array<(number | null)[]>;
+    deruralize:         DeruralizeElement[];
+    diaereses:          DiaereseElement[];
+    dissolution:        (null[] | null)[];
+    downstroke:         Downstroke[];
+    electrotautomerism: (number | null)[];
+    eleutheromania:     Eleutheromania[];
+    encrust:            Encrust;
+    entomoid:           Entomoid[];
+    epipaleolithic:     Epipaleolithic[];
+    expropriable:       Expropriable[];
+    faggingly:          FagginglyElement[];
+    fenks:              FenkElement[];
+    flagmaking:         FlagmakingElement[];
+    fluorometer:        Fluorometer[];
+    fulsome:            (number | null)[];
+    fuzzy:              Fuzzy[];
+    gardenwards:        Gardenward[];
+    generalissimo:      Generalissimo[];
+    habeas:             ({ [key: string]: number } | null)[];
+    hemicrystalline:    Hemicrystalline[];
+    hemocoele:          HemocoeleElement[];
+    hoister:            Hoister[];
+    hyperpiesis:        Hyperpiesi[];
+    hyppish:            Hyppish[];
+    idealizer:          Idealizer[];
+    incrustator:        Incrustator[];
+    intentiveness:      Intentiveness[];
+    interacinar:        Interacinar;
+    intercorrelation:   (number[] | null)[];
+    jacutinga:          Jacutinga[];
+}
+
+export type CerographElement = CerographClass | null | string;
+
+export interface CerographClass {
+    Tolowa:             null;
+    apotropaion:        null;
+    casuary:            null;
+    creaker:            null;
+    disqualification:   null;
+    imperatorious:      null;
+    impermeabilize:     null;
+    metastoma:          null;
+    noctidiurnal:       null;
+    nonreserve:         null;
+    ophthalmotonometry: null;
+    pailful:            null;
+    pigfish:            null;
+    pongee:             null;
+    prosodical:         null;
+    scrofuloderm:       null;
+    storekeeping:       null;
+    therologist:        null;
+    tradeful:           null;
+    unriveting:         null;
+}
+
+export type ChemotherapeuticElement = ChemotherapeuticClass | number;
+
+export interface ChemotherapeuticClass {
+    Chirotherium?:      number;
+    Maureen?:           null;
+    angioneurotic?:     null;
+    availment?:         null;
+    bladelet?:          null;
+    catharticalness?:   number;
+    caulis?:            null;
+    chalcus?:           null;
+    disdiapason?:       string;
+    enteradenological?: null;
+    homocerc?:          boolean;
+    imporosity?:        null;
+    insistently?:       null;
+    intraparietal?:     null;
+    ivied?:             null;
+    nonbookish?:        null;
+    nostochine?:        null;
+    nutcracker?:        null;
+    ofttimes?:          null;
+    phenocryst?:        null;
+    precoincident?:     null;
+    ramiferous?:        null;
+    stagmometer?:       null;
+    tetherball?:        null;
+    unshy?:             null;
+}
+
+export type CimeliaElement = number[] | CimeliaClass | null;
+
+export interface CimeliaClass {
+    Chirotherium:    number;
+    catharticalness: number;
+    disdiapason:     string;
+    homocerc:        boolean;
+    nonbookish:      null;
+}
+
+export type Clinodome = number | string;
+
+export type CoadjustElement = CoadjustClass | number;
+
+export interface CoadjustClass {
+    Benny?:            null;
+    Chirotherium?:     number;
+    Netherlandish?:    null;
+    Phonelescope?:     null;
+    Sedaceae?:         null;
+    amidosulphonal?:   null;
+    catharticalness?:  number;
+    disdiapason?:      string;
+    ensnare?:          null;
+    homocerc?:         boolean;
+    hybridizer?:       null;
+    leastwise?:        null;
+    lof?:              null;
+    monkhood?:         null;
+    nonbookish?:       null;
+    peonism?:          null;
+    porphyrogeniture?: null;
+    preindemnify?:     null;
+    rosal?:            null;
+    scalenous?:        null;
+    scopine?:          null;
+    suberinize?:       null;
+    symbiot?:          null;
+    tablefellow?:      null;
+    unchargeable?:     null;
+}
+
+export type Consilience = number | { [key: string]: number };
+
+export type Constructor = boolean | { [key: string]: number | null };
+
+export type Continuative = { [key: string]: number } | string;
+
+export type CredulityElement = CredulityClass | number | string;
+
+export interface CredulityClass {
+    Flavia:               null;
+    Hedychium:            null;
+    Popean:               null;
+    ammonolytic:          null;
+    bushmaster:           null;
+    considering:          null;
+    consuetudinary:       null;
+    embarras:             null;
+    fineness:             null;
+    flaithship:           null;
+    gruffly:              null;
+    leadwort:             null;
+    overseriously:        null;
+    parabola:             null;
+    pectinatodenticulate: null;
+    pornocrat:            null;
+    quadrisect:           null;
+    seriality:            null;
+    vamphorn:             null;
+    wharp:                null;
+}
+
+export type Creviced = boolean | { [key: string]: number } | string;
+
+export type DeruralizeElement = null[] | boolean | DeruralizeClass;
+
+export interface DeruralizeClass {
+    Jehovistic:     null;
+    Paninean:       null;
+    Romney:         null;
+    bockerel:       null;
+    boulder:        null;
+    churrus:        null;
+    counterdigged:  null;
+    dialogite:      null;
+    digenic:        null;
+    dunbird:        null;
+    ergatogyne:     null;
+    fiendful:       null;
+    jackrod:        null;
+    panther:        null;
+    placentigerous: null;
+    sparm:          null;
+    tocsin:         null;
+    unnicked:       null;
+    unstavable:     null;
+    windfirm:       null;
+}
+
+export type DiaereseElement = number[] | boolean | DiaereseClass;
+
+export interface DiaereseClass {
+    Amoreuxia:         null;
+    ani:               null;
+    bernicle:          null;
+    blackwasher:       null;
+    blowhard:          null;
+    broma:             null;
+    closecross:        null;
+    congregationalism: null;
+    grayly:            null;
+    historically:      null;
+    hoast:             null;
+    irretentive:       null;
+    parcener:          null;
+    pedder:            null;
+    pseudoanatomic:    null;
+    rhizocarpian:      null;
+    samel:             null;
+    silker:            null;
+    subdentated:       null;
+    subobscure:        null;
+}
+
+export type Downstroke = null[] | boolean | string;
+
+export type Eleutheromania = number | { [key: string]: number } | string;
+
+export interface Encrust {
+    Hibernia:        null;
+    Hibiscus:        null;
+    Lepidosauria:    null;
+    Syllidae:        null;
+    comradely:       null;
+    diacanthous:     null;
+    feminineness:    null;
+    gossamered:      null;
+    lollingly:       null;
+    manager:         null;
+    mechanic:        null;
+    overminuteness:  null;
+    papelonne:       null;
+    plebification:   null;
+    pugmiller:       null;
+    recoveror:       null;
+    spermatoblastic: null;
+    ungyved:         null;
+    whirlabout:      null;
+    woodenware:      null;
+}
+
+export type Entomoid = CimeliaClass | number;
+
+export type Epipaleolithic = number[] | number;
+
+export type Expropriable = null[] | CimeliaClass | number;
+
+export type FagginglyElement = FagginglyClass | number;
+
+export interface FagginglyClass {
+    Anglic:          null;
+    Heteromeri:      null;
+    Poinsettia:      null;
+    abranchian:      null;
+    aculeiform:      null;
+    adiaphoristic:   null;
+    adoptionism:     null;
+    antrotomy:       null;
+    coerciveness:    null;
+    decorist:        null;
+    duckhood:        null;
+    hypochnose:      null;
+    lochage:         null;
+    melee:           null;
+    nonconformitant: null;
+    putatively:      null;
+    semivolatile:    null;
+    soleas:          null;
+    unfastenable:    null;
+    unmillinered:    null;
+}
+
+export type FenkElement = FenkClass | string;
+
+export interface FenkClass {
+    Dagomba:       null;
+    Guyandot:      null;
+    Reinwardtia:   null;
+    Tritoness:     null;
+    apoise:        null;
+    astronomize:   null;
+    cockhorse:     null;
+    copular:       null;
+    draffy:        null;
+    foreigner:     null;
+    neurogliosis:  null;
+    osmious:       null;
+    palpitate:     null;
+    rebukeable:    null;
+    reservatory:   null;
+    scalt:         null;
+    scripturalize: null;
+    tintometer:    null;
+    undergrade:    null;
+    undermountain: null;
+}
+
+export type FlagmakingElement = boolean | FlagmakingClass | number;
+
+export interface FlagmakingClass {
+    Bunodonta:         null;
+    Hydrocorisae:      null;
+    Notacanthidae:     null;
+    albarco:           null;
+    hornify:           null;
+    hypoglossus:       null;
+    inexpiably:        null;
+    ingratitude:       null;
+    ladyfly:           null;
+    medicament:        null;
+    monogrammatic:     null;
+    nobbut:            null;
+    polyplacophore:    null;
+    proexercise:       null;
+    protoplast:        null;
+    puzzling:          null;
+    splanchnoskeleton: null;
+    unloveliness:      null;
+    unquarantined:     null;
+    unrenounceable:    null;
+}
+
+export type Fluorometer = number | null | string;
+
+export type Fuzzy = number | { [key: string]: number | null };
+
+export type Gardenward = number[] | boolean | string;
+
+export type Generalissimo = boolean | { [key: string]: number } | null;
+
+export type Hemicrystalline = CimeliaClass | string;
+
+export type HemocoeleElement = number[] | HemocoeleClass;
+
+export interface HemocoeleClass {
+    Chirotherium?:      number;
+    Walt?:              null;
+    acrogamy?:          null;
+    amelification?:     null;
+    autobiographic?:    null;
+    berat?:             null;
+    catharticalness?:   number;
+    disdiapason?:       string;
+    disproportionably?: null;
+    erythrite?:         null;
+    graphic?:           null;
+    hepatological?:     null;
+    homocerc?:          boolean;
+    incommensurably?:   null;
+    misaffirm?:         null;
+    nonbookish?:        null;
+    pocketbook?:        null;
+    sclerometric?:      null;
+    stambouline?:       null;
+    stickpin?:          null;
+    tubulure?:          null;
+    undelated?:         null;
+    unsalt?:            null;
+    untutelar?:         null;
+    vagrant?:           null;
+}
+
+export type Hoister = CimeliaClass | null | string;
+
+export type Hyperpiesi = null[] | CimeliaClass | null;
+
+export type Hyppish = boolean | null | string;
+
+export type Idealizer = null[] | CimeliaClass | number;
+
+export type Incrustator = number[] | number | string;
+
+export type Intentiveness = CimeliaClass | number | string;
+
+export interface Interacinar {
+    assapan:        number;
+    benefactorship: boolean;
+    triseriatim:    string;
+    tubbing:        number;
+    untrimmed:      null;
+}
+
+export type Jacutinga = number[] | { [key: string]: number | null };
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+export class Convert {
+    public static toTopLevel(json: string): TopLevel {
+        return cast(JSON.parse(json), r("TopLevel"));
+    }
+
+    public static topLevelToJson(value: TopLevel): string {
+        return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+    }
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = ''): never {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "centrodesmose", js: "centrodesmose", typ: "" },
+        { json: "cerograph", js: "cerograph", typ: a(u(r("CerographClass"), null, "")) },
+        { json: "chemotherapeutics", js: "chemotherapeutics", typ: a(u(r("ChemotherapeuticClass"), i(0))) },
+        { json: "cimelia", js: "cimelia", typ: a(u(a(i(0)), r("CimeliaClass"), null)) },
+        { json: "citrated", js: "citrated", typ: i(0) },
+        { json: "clinodome", js: "clinodome", typ: a(u(3.14, "")) },
+        { json: "coadjust", js: "coadjust", typ: a(u(r("CoadjustClass"), 3.14)) },
+        { json: "consilience", js: "consilience", typ: a(u(3.14, m(i(0)))) },
+        { json: "constructor", js: "constructor", typ: a(u(true, m(u(i(0), null)))) },
+        { json: "continuative", js: "continuative", typ: a(u(m(i(0)), "")) },
+        { json: "credulity", js: "credulity", typ: a(u(r("CredulityClass"), i(0), "")) },
+        { json: "creviced", js: "creviced", typ: a(u(true, m(i(0)), "")) },
+        { json: "cubiculum", js: "cubiculum", typ: a(a(u(i(0), null))) },
+        { json: "deruralize", js: "deruralize", typ: a(u(a(null), true, r("DeruralizeClass"))) },
+        { json: "diaereses", js: "diaereses", typ: a(u(a(i(0)), true, r("DiaereseClass"))) },
+        { json: "dissolution", js: "dissolution", typ: a(u(a(null), null)) },
+        { json: "downstroke", js: "downstroke", typ: a(u(a(null), true, "")) },
+        { json: "electrotautomerism", js: "electrotautomerism", typ: a(u(3.14, null)) },
+        { json: "eleutheromania", js: "eleutheromania", typ: a(u(3.14, m(i(0)), "")) },
+        { json: "encrust", js: "encrust", typ: r("Encrust") },
+        { json: "entomoid", js: "entomoid", typ: a(u(r("CimeliaClass"), i(0))) },
+        { json: "epipaleolithic", js: "epipaleolithic", typ: a(u(a(i(0)), 3.14)) },
+        { json: "expropriable", js: "expropriable", typ: a(u(a(null), r("CimeliaClass"), 3.14)) },
+        { json: "faggingly", js: "faggingly", typ: a(u(r("FagginglyClass"), 3.14)) },
+        { json: "fenks", js: "fenks", typ: a(u(r("FenkClass"), "")) },
+        { json: "flagmaking", js: "flagmaking", typ: a(u(true, r("FlagmakingClass"), 3.14)) },
+        { json: "fluorometer", js: "fluorometer", typ: a(u(i(0), null, "")) },
+        { json: "fulsome", js: "fulsome", typ: a(u(i(0), null)) },
+        { json: "fuzzy", js: "fuzzy", typ: a(u(i(0), m(u(i(0), null)))) },
+        { json: "gardenwards", js: "gardenwards", typ: a(u(a(i(0)), true, "")) },
+        { json: "generalissimo", js: "generalissimo", typ: a(u(true, m(i(0)), null)) },
+        { json: "habeas", js: "habeas", typ: a(u(m(i(0)), null)) },
+        { json: "hemicrystalline", js: "hemicrystalline", typ: a(u(r("CimeliaClass"), "")) },
+        { json: "hemocoele", js: "hemocoele", typ: a(u(a(i(0)), r("HemocoeleClass"))) },
+        { json: "hoister", js: "hoister", typ: a(u(r("CimeliaClass"), null, "")) },
+        { json: "hyperpiesis", js: "hyperpiesis", typ: a(u(a(null), r("CimeliaClass"), null)) },
+        { json: "hyppish", js: "hyppish", typ: a(u(true, null, "")) },
+        { json: "idealizer", js: "idealizer", typ: a(u(a(null), r("CimeliaClass"), i(0))) },
+        { json: "incrustator", js: "incrustator", typ: a(u(a(i(0)), i(0), "")) },
+        { json: "intentiveness", js: "intentiveness", typ: a(u(r("CimeliaClass"), 3.14, "")) },
+        { json: "interacinar", js: "interacinar", typ: r("Interacinar") },
+        { json: "intercorrelation", js: "intercorrelation", typ: a(u(a(i(0)), null)) },
+        { json: "jacutinga", js: "jacutinga", typ: a(u(a(i(0)), m(u(i(0), null)))) },
+    ], false),
+    "CerographClass": o([
+        { json: "Tolowa", js: "Tolowa", typ: null },
+        { json: "apotropaion", js: "apotropaion", typ: null },
+        { json: "casuary", js: "casuary", typ: null },
+        { json: "creaker", js: "creaker", typ: null },
+        { json: "disqualification", js: "disqualification", typ: null },
+        { json: "imperatorious", js: "imperatorious", typ: null },
+        { json: "impermeabilize", js: "impermeabilize", typ: null },
+        { json: "metastoma", js: "metastoma", typ: null },
+        { json: "noctidiurnal", js: "noctidiurnal", typ: null },
+        { json: "nonreserve", js: "nonreserve", typ: null },
+        { json: "ophthalmotonometry", js: "ophthalmotonometry", typ: null },
+        { json: "pailful", js: "pailful", typ: null },
+        { json: "pigfish", js: "pigfish", typ: null },
+        { json: "pongee", js: "pongee", typ: null },
+        { json: "prosodical", js: "prosodical", typ: null },
+        { json: "scrofuloderm", js: "scrofuloderm", typ: null },
+        { json: "storekeeping", js: "storekeeping", typ: null },
+        { json: "therologist", js: "therologist", typ: null },
+        { json: "tradeful", js: "tradeful", typ: null },
+        { json: "unriveting", js: "unriveting", typ: null },
+    ], false),
+    "ChemotherapeuticClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Maureen", js: "Maureen", typ: u(undefined, null) },
+        { json: "angioneurotic", js: "angioneurotic", typ: u(undefined, null) },
+        { json: "availment", js: "availment", typ: u(undefined, null) },
+        { json: "bladelet", js: "bladelet", typ: u(undefined, null) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "caulis", js: "caulis", typ: u(undefined, null) },
+        { json: "chalcus", js: "chalcus", typ: u(undefined, null) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "enteradenological", js: "enteradenological", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "imporosity", js: "imporosity", typ: u(undefined, null) },
+        { json: "insistently", js: "insistently", typ: u(undefined, null) },
+        { json: "intraparietal", js: "intraparietal", typ: u(undefined, null) },
+        { json: "ivied", js: "ivied", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "nostochine", js: "nostochine", typ: u(undefined, null) },
+        { json: "nutcracker", js: "nutcracker", typ: u(undefined, null) },
+        { json: "ofttimes", js: "ofttimes", typ: u(undefined, null) },
+        { json: "phenocryst", js: "phenocryst", typ: u(undefined, null) },
+        { json: "precoincident", js: "precoincident", typ: u(undefined, null) },
+        { json: "ramiferous", js: "ramiferous", typ: u(undefined, null) },
+        { json: "stagmometer", js: "stagmometer", typ: u(undefined, null) },
+        { json: "tetherball", js: "tetherball", typ: u(undefined, null) },
+        { json: "unshy", js: "unshy", typ: u(undefined, null) },
+    ], false),
+    "CimeliaClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: i(0) },
+        { json: "catharticalness", js: "catharticalness", typ: 3.14 },
+        { json: "disdiapason", js: "disdiapason", typ: "" },
+        { json: "homocerc", js: "homocerc", typ: true },
+        { json: "nonbookish", js: "nonbookish", typ: null },
+    ], false),
+    "CoadjustClass": o([
+        { json: "Benny", js: "Benny", typ: u(undefined, null) },
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Netherlandish", js: "Netherlandish", typ: u(undefined, null) },
+        { json: "Phonelescope", js: "Phonelescope", typ: u(undefined, null) },
+        { json: "Sedaceae", js: "Sedaceae", typ: u(undefined, null) },
+        { json: "amidosulphonal", js: "amidosulphonal", typ: u(undefined, null) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "ensnare", js: "ensnare", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "hybridizer", js: "hybridizer", typ: u(undefined, null) },
+        { json: "leastwise", js: "leastwise", typ: u(undefined, null) },
+        { json: "lof", js: "lof", typ: u(undefined, null) },
+        { json: "monkhood", js: "monkhood", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "peonism", js: "peonism", typ: u(undefined, null) },
+        { json: "porphyrogeniture", js: "porphyrogeniture", typ: u(undefined, null) },
+        { json: "preindemnify", js: "preindemnify", typ: u(undefined, null) },
+        { json: "rosal", js: "rosal", typ: u(undefined, null) },
+        { json: "scalenous", js: "scalenous", typ: u(undefined, null) },
+        { json: "scopine", js: "scopine", typ: u(undefined, null) },
+        { json: "suberinize", js: "suberinize", typ: u(undefined, null) },
+        { json: "symbiot", js: "symbiot", typ: u(undefined, null) },
+        { json: "tablefellow", js: "tablefellow", typ: u(undefined, null) },
+        { json: "unchargeable", js: "unchargeable", typ: u(undefined, null) },
+    ], false),
+    "CredulityClass": o([
+        { json: "Flavia", js: "Flavia", typ: null },
+        { json: "Hedychium", js: "Hedychium", typ: null },
+        { json: "Popean", js: "Popean", typ: null },
+        { json: "ammonolytic", js: "ammonolytic", typ: null },
+        { json: "bushmaster", js: "bushmaster", typ: null },
+        { json: "considering", js: "considering", typ: null },
+        { json: "consuetudinary", js: "consuetudinary", typ: null },
+        { json: "embarras", js: "embarras", typ: null },
+        { json: "fineness", js: "fineness", typ: null },
+        { json: "flaithship", js: "flaithship", typ: null },
+        { json: "gruffly", js: "gruffly", typ: null },
+        { json: "leadwort", js: "leadwort", typ: null },
+        { json: "overseriously", js: "overseriously", typ: null },
+        { json: "parabola", js: "parabola", typ: null },
+        { json: "pectinatodenticulate", js: "pectinatodenticulate", typ: null },
+        { json: "pornocrat", js: "pornocrat", typ: null },
+        { json: "quadrisect", js: "quadrisect", typ: null },
+        { json: "seriality", js: "seriality", typ: null },
+        { json: "vamphorn", js: "vamphorn", typ: null },
+        { json: "wharp", js: "wharp", typ: null },
+    ], false),
+    "DeruralizeClass": o([
+        { json: "Jehovistic", js: "Jehovistic", typ: null },
+        { json: "Paninean", js: "Paninean", typ: null },
+        { json: "Romney", js: "Romney", typ: null },
+        { json: "bockerel", js: "bockerel", typ: null },
+        { json: "boulder", js: "boulder", typ: null },
+        { json: "churrus", js: "churrus", typ: null },
+        { json: "counterdigged", js: "counterdigged", typ: null },
+        { json: "dialogite", js: "dialogite", typ: null },
+        { json: "digenic", js: "digenic", typ: null },
+        { json: "dunbird", js: "dunbird", typ: null },
+        { json: "ergatogyne", js: "ergatogyne", typ: null },
+        { json: "fiendful", js: "fiendful", typ: null },
+        { json: "jackrod", js: "jackrod", typ: null },
+        { json: "panther", js: "panther", typ: null },
+        { json: "placentigerous", js: "placentigerous", typ: null },
+        { json: "sparm", js: "sparm", typ: null },
+        { json: "tocsin", js: "tocsin", typ: null },
+        { json: "unnicked", js: "unnicked", typ: null },
+        { json: "unstavable", js: "unstavable", typ: null },
+        { json: "windfirm", js: "windfirm", typ: null },
+    ], false),
+    "DiaereseClass": o([
+        { json: "Amoreuxia", js: "Amoreuxia", typ: null },
+        { json: "ani", js: "ani", typ: null },
+        { json: "bernicle", js: "bernicle", typ: null },
+        { json: "blackwasher", js: "blackwasher", typ: null },
+        { json: "blowhard", js: "blowhard", typ: null },
+        { json: "broma", js: "broma", typ: null },
+        { json: "closecross", js: "closecross", typ: null },
+        { json: "congregationalism", js: "congregationalism", typ: null },
+        { json: "grayly", js: "grayly", typ: null },
+        { json: "historically", js: "historically", typ: null },
+        { json: "hoast", js: "hoast", typ: null },
+        { json: "irretentive", js: "irretentive", typ: null },
+        { json: "parcener", js: "parcener", typ: null },
+        { json: "pedder", js: "pedder", typ: null },
+        { json: "pseudoanatomic", js: "pseudoanatomic", typ: null },
+        { json: "rhizocarpian", js: "rhizocarpian", typ: null },
+        { json: "samel", js: "samel", typ: null },
+        { json: "silker", js: "silker", typ: null },
+        { json: "subdentated", js: "subdentated", typ: null },
+        { json: "subobscure", js: "subobscure", typ: null },
+    ], false),
+    "Encrust": o([
+        { json: "Hibernia", js: "Hibernia", typ: null },
+        { json: "Hibiscus", js: "Hibiscus", typ: null },
+        { json: "Lepidosauria", js: "Lepidosauria", typ: null },
+        { json: "Syllidae", js: "Syllidae", typ: null },
+        { json: "comradely", js: "comradely", typ: null },
+        { json: "diacanthous", js: "diacanthous", typ: null },
+        { json: "feminineness", js: "feminineness", typ: null },
+        { json: "gossamered", js: "gossamered", typ: null },
+        { json: "lollingly", js: "lollingly", typ: null },
+        { json: "manager", js: "manager", typ: null },
+        { json: "mechanic", js: "mechanic", typ: null },
+        { json: "overminuteness", js: "overminuteness", typ: null },
+        { json: "papelonne", js: "papelonne", typ: null },
+        { json: "plebification", js: "plebification", typ: null },
+        { json: "pugmiller", js: "pugmiller", typ: null },
+        { json: "recoveror", js: "recoveror", typ: null },
+        { json: "spermatoblastic", js: "spermatoblastic", typ: null },
+        { json: "ungyved", js: "ungyved", typ: null },
+        { json: "whirlabout", js: "whirlabout", typ: null },
+        { json: "woodenware", js: "woodenware", typ: null },
+    ], false),
+    "FagginglyClass": o([
+        { json: "Anglic", js: "Anglic", typ: null },
+        { json: "Heteromeri", js: "Heteromeri", typ: null },
+        { json: "Poinsettia", js: "Poinsettia", typ: null },
+        { json: "abranchian", js: "abranchian", typ: null },
+        { json: "aculeiform", js: "aculeiform", typ: null },
+        { json: "adiaphoristic", js: "adiaphoristic", typ: null },
+        { json: "adoptionism", js: "adoptionism", typ: null },
+        { json: "antrotomy", js: "antrotomy", typ: null },
+        { json: "coerciveness", js: "coerciveness", typ: null },
+        { json: "decorist", js: "decorist", typ: null },
+        { json: "duckhood", js: "duckhood", typ: null },
+        { json: "hypochnose", js: "hypochnose", typ: null },
+        { json: "lochage", js: "lochage", typ: null },
+        { json: "melee", js: "melee", typ: null },
+        { json: "nonconformitant", js: "nonconformitant", typ: null },
+        { json: "putatively", js: "putatively", typ: null },
+        { json: "semivolatile", js: "semivolatile", typ: null },
+        { json: "soleas", js: "soleas", typ: null },
+        { json: "unfastenable", js: "unfastenable", typ: null },
+        { json: "unmillinered", js: "unmillinered", typ: null },
+    ], false),
+    "FenkClass": o([
+        { json: "Dagomba", js: "Dagomba", typ: null },
+        { json: "Guyandot", js: "Guyandot", typ: null },
+        { json: "Reinwardtia", js: "Reinwardtia", typ: null },
+        { json: "Tritoness", js: "Tritoness", typ: null },
+        { json: "apoise", js: "apoise", typ: null },
+        { json: "astronomize", js: "astronomize", typ: null },
+        { json: "cockhorse", js: "cockhorse", typ: null },
+        { json: "copular", js: "copular", typ: null },
+        { json: "draffy", js: "draffy", typ: null },
+        { json: "foreigner", js: "foreigner", typ: null },
+        { json: "neurogliosis", js: "neurogliosis", typ: null },
+        { json: "osmious", js: "osmious", typ: null },
+        { json: "palpitate", js: "palpitate", typ: null },
+        { json: "rebukeable", js: "rebukeable", typ: null },
+        { json: "reservatory", js: "reservatory", typ: null },
+        { json: "scalt", js: "scalt", typ: null },
+        { json: "scripturalize", js: "scripturalize", typ: null },
+        { json: "tintometer", js: "tintometer", typ: null },
+        { json: "undergrade", js: "undergrade", typ: null },
+        { json: "undermountain", js: "undermountain", typ: null },
+    ], false),
+    "FlagmakingClass": o([
+        { json: "Bunodonta", js: "Bunodonta", typ: null },
+        { json: "Hydrocorisae", js: "Hydrocorisae", typ: null },
+        { json: "Notacanthidae", js: "Notacanthidae", typ: null },
+        { json: "albarco", js: "albarco", typ: null },
+        { json: "hornify", js: "hornify", typ: null },
+        { json: "hypoglossus", js: "hypoglossus", typ: null },
+        { json: "inexpiably", js: "inexpiably", typ: null },
+        { json: "ingratitude", js: "ingratitude", typ: null },
+        { json: "ladyfly", js: "ladyfly", typ: null },
+        { json: "medicament", js: "medicament", typ: null },
+        { json: "monogrammatic", js: "monogrammatic", typ: null },
+        { json: "nobbut", js: "nobbut", typ: null },
+        { json: "polyplacophore", js: "polyplacophore", typ: null },
+        { json: "proexercise", js: "proexercise", typ: null },
+        { json: "protoplast", js: "protoplast", typ: null },
+        { json: "puzzling", js: "puzzling", typ: null },
+        { json: "splanchnoskeleton", js: "splanchnoskeleton", typ: null },
+        { json: "unloveliness", js: "unloveliness", typ: null },
+        { json: "unquarantined", js: "unquarantined", typ: null },
+        { json: "unrenounceable", js: "unrenounceable", typ: null },
+    ], false),
+    "HemocoeleClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Walt", js: "Walt", typ: u(undefined, null) },
+        { json: "acrogamy", js: "acrogamy", typ: u(undefined, null) },
+        { json: "amelification", js: "amelification", typ: u(undefined, null) },
+        { json: "autobiographic", js: "autobiographic", typ: u(undefined, null) },
+        { json: "berat", js: "berat", typ: u(undefined, null) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "disproportionably", js: "disproportionably", typ: u(undefined, null) },
+        { json: "erythrite", js: "erythrite", typ: u(undefined, null) },
+        { json: "graphic", js: "graphic", typ: u(undefined, null) },
+        { json: "hepatological", js: "hepatological", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "incommensurably", js: "incommensurably", typ: u(undefined, null) },
+        { json: "misaffirm", js: "misaffirm", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "pocketbook", js: "pocketbook", typ: u(undefined, null) },
+        { json: "sclerometric", js: "sclerometric", typ: u(undefined, null) },
+        { json: "stambouline", js: "stambouline", typ: u(undefined, null) },
+        { json: "stickpin", js: "stickpin", typ: u(undefined, null) },
+        { json: "tubulure", js: "tubulure", typ: u(undefined, null) },
+        { json: "undelated", js: "undelated", typ: u(undefined, null) },
+        { json: "unsalt", js: "unsalt", typ: u(undefined, null) },
+        { json: "untutelar", js: "untutelar", typ: u(undefined, null) },
+        { json: "vagrant", js: "vagrant", typ: u(undefined, null) },
+    ], false),
+    "Interacinar": o([
+        { json: "assapan", js: "assapan", typ: 3.14 },
+        { json: "benefactorship", js: "benefactorship", typ: true },
+        { json: "triseriatim", js: "triseriatim", typ: "" },
+        { json: "tubbing", js: "tubbing", typ: i(0) },
+        { json: "untrimmed", js: "untrimmed", typ: null },
+    ], false),
+};
diff --git a/head/typescript/test/inputs/json/priority/combinations1.json/prefer-types-true--df33e18681f9/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/prefer-types-true--df33e18681f9/TopLevel.ts
new file mode 100644
index 0000000..31d70cf
--- /dev/null
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/prefer-types-true--df33e18681f9/TopLevel.ts
@@ -0,0 +1,909 @@
+// To parse this data:
+//
+//   import { Convert, TopLevel } from "./TopLevel";
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export type TopLevel = {
+    centrodesmose:      string;
+    cerograph:          CerographElement[];
+    chemotherapeutics:  ChemotherapeuticElement[];
+    cimelia:            CimeliaElement[];
+    citrated:           number;
+    clinodome:          Clinodome[];
+    coadjust:           CoadjustElement[];
+    consilience:        Consilience[];
+    constructor:        Constructor[];
+    continuative:       Continuative[];
+    credulity:          CredulityElement[];
+    creviced:           Creviced[];
+    cubiculum:          Array<(number | null)[]>;
+    deruralize:         DeruralizeElement[];
+    diaereses:          DiaereseElement[];
+    dissolution:        (null[] | null)[];
+    downstroke:         Downstroke[];
+    electrotautomerism: (number | null)[];
+    eleutheromania:     Eleutheromania[];
+    encrust:            Encrust;
+    entomoid:           Entomoid[];
+    epipaleolithic:     Epipaleolithic[];
+    expropriable:       Expropriable[];
+    faggingly:          FagginglyElement[];
+    fenks:              FenkElement[];
+    flagmaking:         FlagmakingElement[];
+    fluorometer:        Fluorometer[];
+    fulsome:            (number | null)[];
+    fuzzy:              Fuzzy[];
+    gardenwards:        Gardenward[];
+    generalissimo:      Generalissimo[];
+    habeas:             ({ [key: string]: number } | null)[];
+    hemicrystalline:    Hemicrystalline[];
+    hemocoele:          HemocoeleElement[];
+    hoister:            Hoister[];
+    hyperpiesis:        Hyperpiesi[];
+    hyppish:            Hyppish[];
+    idealizer:          Idealizer[];
+    incrustator:        Incrustator[];
+    intentiveness:      Intentiveness[];
+    interacinar:        Interacinar;
+    intercorrelation:   (number[] | null)[];
+    jacutinga:          Jacutinga[];
+}
+
+export type CerographElement = CerographClass | null | string;
+
+export type CerographClass = {
+    Tolowa:             null;
+    apotropaion:        null;
+    casuary:            null;
+    creaker:            null;
+    disqualification:   null;
+    imperatorious:      null;
+    impermeabilize:     null;
+    metastoma:          null;
+    noctidiurnal:       null;
+    nonreserve:         null;
+    ophthalmotonometry: null;
+    pailful:            null;
+    pigfish:            null;
+    pongee:             null;
+    prosodical:         null;
+    scrofuloderm:       null;
+    storekeeping:       null;
+    therologist:        null;
+    tradeful:           null;
+    unriveting:         null;
+}
+
+export type ChemotherapeuticElement = ChemotherapeuticClass | number;
+
+export type ChemotherapeuticClass = {
+    Chirotherium?:      number;
+    Maureen?:           null;
+    angioneurotic?:     null;
+    availment?:         null;
+    bladelet?:          null;
+    catharticalness?:   number;
+    caulis?:            null;
+    chalcus?:           null;
+    disdiapason?:       string;
+    enteradenological?: null;
+    homocerc?:          boolean;
+    imporosity?:        null;
+    insistently?:       null;
+    intraparietal?:     null;
+    ivied?:             null;
+    nonbookish?:        null;
+    nostochine?:        null;
+    nutcracker?:        null;
+    ofttimes?:          null;
+    phenocryst?:        null;
+    precoincident?:     null;
+    ramiferous?:        null;
+    stagmometer?:       null;
+    tetherball?:        null;
+    unshy?:             null;
+}
+
+export type CimeliaElement = number[] | CimeliaClass | null;
+
+export type CimeliaClass = {
+    Chirotherium:    number;
+    catharticalness: number;
+    disdiapason:     string;
+    homocerc:        boolean;
+    nonbookish:      null;
+}
+
+export type Clinodome = number | string;
+
+export type CoadjustElement = CoadjustClass | number;
+
+export type CoadjustClass = {
+    Benny?:            null;
+    Chirotherium?:     number;
+    Netherlandish?:    null;
+    Phonelescope?:     null;
+    Sedaceae?:         null;
+    amidosulphonal?:   null;
+    catharticalness?:  number;
+    disdiapason?:      string;
+    ensnare?:          null;
+    homocerc?:         boolean;
+    hybridizer?:       null;
+    leastwise?:        null;
+    lof?:              null;
+    monkhood?:         null;
+    nonbookish?:       null;
+    peonism?:          null;
+    porphyrogeniture?: null;
+    preindemnify?:     null;
+    rosal?:            null;
+    scalenous?:        null;
+    scopine?:          null;
+    suberinize?:       null;
+    symbiot?:          null;
+    tablefellow?:      null;
+    unchargeable?:     null;
+}
+
+export type Consilience = number | { [key: string]: number };
+
+export type Constructor = boolean | { [key: string]: number | null };
+
+export type Continuative = { [key: string]: number } | string;
+
+export type CredulityElement = CredulityClass | number | string;
+
+export type CredulityClass = {
+    Flavia:               null;
+    Hedychium:            null;
+    Popean:               null;
+    ammonolytic:          null;
+    bushmaster:           null;
+    considering:          null;
+    consuetudinary:       null;
+    embarras:             null;
+    fineness:             null;
+    flaithship:           null;
+    gruffly:              null;
+    leadwort:             null;
+    overseriously:        null;
+    parabola:             null;
+    pectinatodenticulate: null;
+    pornocrat:            null;
+    quadrisect:           null;
+    seriality:            null;
+    vamphorn:             null;
+    wharp:                null;
+}
+
+export type Creviced = boolean | { [key: string]: number } | string;
+
+export type DeruralizeElement = null[] | boolean | DeruralizeClass;
+
+export type DeruralizeClass = {
+    Jehovistic:     null;
+    Paninean:       null;
+    Romney:         null;
+    bockerel:       null;
+    boulder:        null;
+    churrus:        null;
+    counterdigged:  null;
+    dialogite:      null;
+    digenic:        null;
+    dunbird:        null;
+    ergatogyne:     null;
+    fiendful:       null;
+    jackrod:        null;
+    panther:        null;
+    placentigerous: null;
+    sparm:          null;
+    tocsin:         null;
+    unnicked:       null;
+    unstavable:     null;
+    windfirm:       null;
+}
+
+export type DiaereseElement = number[] | boolean | DiaereseClass;
+
+export type DiaereseClass = {
+    Amoreuxia:         null;
+    ani:               null;
+    bernicle:          null;
+    blackwasher:       null;
+    blowhard:          null;
+    broma:             null;
+    closecross:        null;
+    congregationalism: null;
+    grayly:            null;
+    historically:      null;
+    hoast:             null;
+    irretentive:       null;
+    parcener:          null;
+    pedder:            null;
+    pseudoanatomic:    null;
+    rhizocarpian:      null;
+    samel:             null;
+    silker:            null;
+    subdentated:       null;
+    subobscure:        null;
+}
+
+export type Downstroke = null[] | boolean | string;
+
+export type Eleutheromania = number | { [key: string]: number } | string;
+
+export type Encrust = {
+    Hibernia:        null;
+    Hibiscus:        null;
+    Lepidosauria:    null;
+    Syllidae:        null;
+    comradely:       null;
+    diacanthous:     null;
+    feminineness:    null;
+    gossamered:      null;
+    lollingly:       null;
+    manager:         null;
+    mechanic:        null;
+    overminuteness:  null;
+    papelonne:       null;
+    plebification:   null;
+    pugmiller:       null;
+    recoveror:       null;
+    spermatoblastic: null;
+    ungyved:         null;
+    whirlabout:      null;
+    woodenware:      null;
+}
+
+export type Entomoid = CimeliaClass | number;
+
+export type Epipaleolithic = number[] | number;
+
+export type Expropriable = null[] | CimeliaClass | number;
+
+export type FagginglyElement = FagginglyClass | number;
+
+export type FagginglyClass = {
+    Anglic:          null;
+    Heteromeri:      null;
+    Poinsettia:      null;
+    abranchian:      null;
+    aculeiform:      null;
+    adiaphoristic:   null;
+    adoptionism:     null;
+    antrotomy:       null;
+    coerciveness:    null;
+    decorist:        null;
+    duckhood:        null;
+    hypochnose:      null;
+    lochage:         null;
+    melee:           null;
+    nonconformitant: null;
+    putatively:      null;
+    semivolatile:    null;
+    soleas:          null;
+    unfastenable:    null;
+    unmillinered:    null;
+}
+
+export type FenkElement = FenkClass | string;
+
+export type FenkClass = {
+    Dagomba:       null;
+    Guyandot:      null;
+    Reinwardtia:   null;
+    Tritoness:     null;
+    apoise:        null;
+    astronomize:   null;
+    cockhorse:     null;
+    copular:       null;
+    draffy:        null;
+    foreigner:     null;
+    neurogliosis:  null;
+    osmious:       null;
+    palpitate:     null;
+    rebukeable:    null;
+    reservatory:   null;
+    scalt:         null;
+    scripturalize: null;
+    tintometer:    null;
+    undergrade:    null;
+    undermountain: null;
+}
+
+export type FlagmakingElement = boolean | FlagmakingClass | number;
+
+export type FlagmakingClass = {
+    Bunodonta:         null;
+    Hydrocorisae:      null;
+    Notacanthidae:     null;
+    albarco:           null;
+    hornify:           null;
+    hypoglossus:       null;
+    inexpiably:        null;
+    ingratitude:       null;
+    ladyfly:           null;
+    medicament:        null;
+    monogrammatic:     null;
+    nobbut:            null;
+    polyplacophore:    null;
+    proexercise:       null;
+    protoplast:        null;
+    puzzling:          null;
+    splanchnoskeleton: null;
+    unloveliness:      null;
+    unquarantined:     null;
+    unrenounceable:    null;
+}
+
+export type Fluorometer = number | null | string;
+
+export type Fuzzy = number | { [key: string]: number | null };
+
+export type Gardenward = number[] | boolean | string;
+
+export type Generalissimo = boolean | { [key: string]: number } | null;
+
+export type Hemicrystalline = CimeliaClass | string;
+
+export type HemocoeleElement = number[] | HemocoeleClass;
+
+export type HemocoeleClass = {
+    Chirotherium?:      number;
+    Walt?:              null;
+    acrogamy?:          null;
+    amelification?:     null;
+    autobiographic?:    null;
+    berat?:             null;
+    catharticalness?:   number;
+    disdiapason?:       string;
+    disproportionably?: null;
+    erythrite?:         null;
+    graphic?:           null;
+    hepatological?:     null;
+    homocerc?:          boolean;
+    incommensurably?:   null;
+    misaffirm?:         null;
+    nonbookish?:        null;
+    pocketbook?:        null;
+    sclerometric?:      null;
+    stambouline?:       null;
+    stickpin?:          null;
+    tubulure?:          null;
+    undelated?:         null;
+    unsalt?:            null;
+    untutelar?:         null;
+    vagrant?:           null;
+}
+
+export type Hoister = CimeliaClass | null | string;
+
+export type Hyperpiesi = null[] | CimeliaClass | null;
+
+export type Hyppish = boolean | null | string;
+
+export type Idealizer = null[] | CimeliaClass | number;
+
+export type Incrustator = number[] | number | string;
+
+export type Intentiveness = CimeliaClass | number | string;
+
+export type Interacinar = {
+    assapan:        number;
+    benefactorship: boolean;
+    triseriatim:    string;
+    tubbing:        number;
+    untrimmed:      null;
+}
+
+export type Jacutinga = number[] | { [key: string]: number | null };
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+export class Convert {
+    public static toTopLevel(json: string): TopLevel {
+        return cast(JSON.parse(json), r("TopLevel"));
+    }
+
+    public static topLevelToJson(value: TopLevel): string {
+        return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+    }
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = ''): never {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "centrodesmose", js: "centrodesmose", typ: "" },
+        { json: "cerograph", js: "cerograph", typ: a(u(r("CerographClass"), null, "")) },
+        { json: "chemotherapeutics", js: "chemotherapeutics", typ: a(u(r("ChemotherapeuticClass"), i(0))) },
+        { json: "cimelia", js: "cimelia", typ: a(u(a(i(0)), r("CimeliaClass"), null)) },
+        { json: "citrated", js: "citrated", typ: i(0) },
+        { json: "clinodome", js: "clinodome", typ: a(u(3.14, "")) },
+        { json: "coadjust", js: "coadjust", typ: a(u(r("CoadjustClass"), 3.14)) },
+        { json: "consilience", js: "consilience", typ: a(u(3.14, m(i(0)))) },
+        { json: "constructor", js: "constructor", typ: a(u(true, m(u(i(0), null)))) },
+        { json: "continuative", js: "continuative", typ: a(u(m(i(0)), "")) },
+        { json: "credulity", js: "credulity", typ: a(u(r("CredulityClass"), i(0), "")) },
+        { json: "creviced", js: "creviced", typ: a(u(true, m(i(0)), "")) },
+        { json: "cubiculum", js: "cubiculum", typ: a(a(u(i(0), null))) },
+        { json: "deruralize", js: "deruralize", typ: a(u(a(null), true, r("DeruralizeClass"))) },
+        { json: "diaereses", js: "diaereses", typ: a(u(a(i(0)), true, r("DiaereseClass"))) },
+        { json: "dissolution", js: "dissolution", typ: a(u(a(null), null)) },
+        { json: "downstroke", js: "downstroke", typ: a(u(a(null), true, "")) },
+        { json: "electrotautomerism", js: "electrotautomerism", typ: a(u(3.14, null)) },
+        { json: "eleutheromania", js: "eleutheromania", typ: a(u(3.14, m(i(0)), "")) },
+        { json: "encrust", js: "encrust", typ: r("Encrust") },
+        { json: "entomoid", js: "entomoid", typ: a(u(r("CimeliaClass"), i(0))) },
+        { json: "epipaleolithic", js: "epipaleolithic", typ: a(u(a(i(0)), 3.14)) },
+        { json: "expropriable", js: "expropriable", typ: a(u(a(null), r("CimeliaClass"), 3.14)) },
+        { json: "faggingly", js: "faggingly", typ: a(u(r("FagginglyClass"), 3.14)) },
+        { json: "fenks", js: "fenks", typ: a(u(r("FenkClass"), "")) },
+        { json: "flagmaking", js: "flagmaking", typ: a(u(true, r("FlagmakingClass"), 3.14)) },
+        { json: "fluorometer", js: "fluorometer", typ: a(u(i(0), null, "")) },
+        { json: "fulsome", js: "fulsome", typ: a(u(i(0), null)) },
+        { json: "fuzzy", js: "fuzzy", typ: a(u(i(0), m(u(i(0), null)))) },
+        { json: "gardenwards", js: "gardenwards", typ: a(u(a(i(0)), true, "")) },
+        { json: "generalissimo", js: "generalissimo", typ: a(u(true, m(i(0)), null)) },
+        { json: "habeas", js: "habeas", typ: a(u(m(i(0)), null)) },
+        { json: "hemicrystalline", js: "hemicrystalline", typ: a(u(r("CimeliaClass"), "")) },
+        { json: "hemocoele", js: "hemocoele", typ: a(u(a(i(0)), r("HemocoeleClass"))) },
+        { json: "hoister", js: "hoister", typ: a(u(r("CimeliaClass"), null, "")) },
+        { json: "hyperpiesis", js: "hyperpiesis", typ: a(u(a(null), r("CimeliaClass"), null)) },
+        { json: "hyppish", js: "hyppish", typ: a(u(true, null, "")) },
+        { json: "idealizer", js: "idealizer", typ: a(u(a(null), r("CimeliaClass"), i(0))) },
+        { json: "incrustator", js: "incrustator", typ: a(u(a(i(0)), i(0), "")) },
+        { json: "intentiveness", js: "intentiveness", typ: a(u(r("CimeliaClass"), 3.14, "")) },
+        { json: "interacinar", js: "interacinar", typ: r("Interacinar") },
+        { json: "intercorrelation", js: "intercorrelation", typ: a(u(a(i(0)), null)) },
+        { json: "jacutinga", js: "jacutinga", typ: a(u(a(i(0)), m(u(i(0), null)))) },
+    ], false),
+    "CerographClass": o([
+        { json: "Tolowa", js: "Tolowa", typ: null },
+        { json: "apotropaion", js: "apotropaion", typ: null },
+        { json: "casuary", js: "casuary", typ: null },
+        { json: "creaker", js: "creaker", typ: null },
+        { json: "disqualification", js: "disqualification", typ: null },
+        { json: "imperatorious", js: "imperatorious", typ: null },
+        { json: "impermeabilize", js: "impermeabilize", typ: null },
+        { json: "metastoma", js: "metastoma", typ: null },
+        { json: "noctidiurnal", js: "noctidiurnal", typ: null },
+        { json: "nonreserve", js: "nonreserve", typ: null },
+        { json: "ophthalmotonometry", js: "ophthalmotonometry", typ: null },
+        { json: "pailful", js: "pailful", typ: null },
+        { json: "pigfish", js: "pigfish", typ: null },
+        { json: "pongee", js: "pongee", typ: null },
+        { json: "prosodical", js: "prosodical", typ: null },
+        { json: "scrofuloderm", js: "scrofuloderm", typ: null },
+        { json: "storekeeping", js: "storekeeping", typ: null },
+        { json: "therologist", js: "therologist", typ: null },
+        { json: "tradeful", js: "tradeful", typ: null },
+        { json: "unriveting", js: "unriveting", typ: null },
+    ], false),
+    "ChemotherapeuticClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Maureen", js: "Maureen", typ: u(undefined, null) },
+        { json: "angioneurotic", js: "angioneurotic", typ: u(undefined, null) },
+        { json: "availment", js: "availment", typ: u(undefined, null) },
+        { json: "bladelet", js: "bladelet", typ: u(undefined, null) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "caulis", js: "caulis", typ: u(undefined, null) },
+        { json: "chalcus", js: "chalcus", typ: u(undefined, null) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "enteradenological", js: "enteradenological", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "imporosity", js: "imporosity", typ: u(undefined, null) },
+        { json: "insistently", js: "insistently", typ: u(undefined, null) },
+        { json: "intraparietal", js: "intraparietal", typ: u(undefined, null) },
+        { json: "ivied", js: "ivied", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "nostochine", js: "nostochine", typ: u(undefined, null) },
+        { json: "nutcracker", js: "nutcracker", typ: u(undefined, null) },
+        { json: "ofttimes", js: "ofttimes", typ: u(undefined, null) },
+        { json: "phenocryst", js: "phenocryst", typ: u(undefined, null) },
+        { json: "precoincident", js: "precoincident", typ: u(undefined, null) },
+        { json: "ramiferous", js: "ramiferous", typ: u(undefined, null) },
+        { json: "stagmometer", js: "stagmometer", typ: u(undefined, null) },
+        { json: "tetherball", js: "tetherball", typ: u(undefined, null) },
+        { json: "unshy", js: "unshy", typ: u(undefined, null) },
+    ], false),
+    "CimeliaClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: i(0) },
+        { json: "catharticalness", js: "catharticalness", typ: 3.14 },
+        { json: "disdiapason", js: "disdiapason", typ: "" },
+        { json: "homocerc", js: "homocerc", typ: true },
+        { json: "nonbookish", js: "nonbookish", typ: null },
+    ], false),
+    "CoadjustClass": o([
+        { json: "Benny", js: "Benny", typ: u(undefined, null) },
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Netherlandish", js: "Netherlandish", typ: u(undefined, null) },
+        { json: "Phonelescope", js: "Phonelescope", typ: u(undefined, null) },
+        { json: "Sedaceae", js: "Sedaceae", typ: u(undefined, null) },
+        { json: "amidosulphonal", js: "amidosulphonal", typ: u(undefined, null) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "ensnare", js: "ensnare", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "hybridizer", js: "hybridizer", typ: u(undefined, null) },
+        { json: "leastwise", js: "leastwise", typ: u(undefined, null) },
+        { json: "lof", js: "lof", typ: u(undefined, null) },
+        { json: "monkhood", js: "monkhood", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "peonism", js: "peonism", typ: u(undefined, null) },
+        { json: "porphyrogeniture", js: "porphyrogeniture", typ: u(undefined, null) },
+        { json: "preindemnify", js: "preindemnify", typ: u(undefined, null) },
+        { json: "rosal", js: "rosal", typ: u(undefined, null) },
+        { json: "scalenous", js: "scalenous", typ: u(undefined, null) },
+        { json: "scopine", js: "scopine", typ: u(undefined, null) },
+        { json: "suberinize", js: "suberinize", typ: u(undefined, null) },
+        { json: "symbiot", js: "symbiot", typ: u(undefined, null) },
+        { json: "tablefellow", js: "tablefellow", typ: u(undefined, null) },
+        { json: "unchargeable", js: "unchargeable", typ: u(undefined, null) },
+    ], false),
+    "CredulityClass": o([
+        { json: "Flavia", js: "Flavia", typ: null },
+        { json: "Hedychium", js: "Hedychium", typ: null },
+        { json: "Popean", js: "Popean", typ: null },
+        { json: "ammonolytic", js: "ammonolytic", typ: null },
+        { json: "bushmaster", js: "bushmaster", typ: null },
+        { json: "considering", js: "considering", typ: null },
+        { json: "consuetudinary", js: "consuetudinary", typ: null },
+        { json: "embarras", js: "embarras", typ: null },
+        { json: "fineness", js: "fineness", typ: null },
+        { json: "flaithship", js: "flaithship", typ: null },
+        { json: "gruffly", js: "gruffly", typ: null },
+        { json: "leadwort", js: "leadwort", typ: null },
+        { json: "overseriously", js: "overseriously", typ: null },
+        { json: "parabola", js: "parabola", typ: null },
+        { json: "pectinatodenticulate", js: "pectinatodenticulate", typ: null },
+        { json: "pornocrat", js: "pornocrat", typ: null },
+        { json: "quadrisect", js: "quadrisect", typ: null },
+        { json: "seriality", js: "seriality", typ: null },
+        { json: "vamphorn", js: "vamphorn", typ: null },
+        { json: "wharp", js: "wharp", typ: null },
+    ], false),
+    "DeruralizeClass": o([
+        { json: "Jehovistic", js: "Jehovistic", typ: null },
+        { json: "Paninean", js: "Paninean", typ: null },
+        { json: "Romney", js: "Romney", typ: null },
+        { json: "bockerel", js: "bockerel", typ: null },
+        { json: "boulder", js: "boulder", typ: null },
+        { json: "churrus", js: "churrus", typ: null },
+        { json: "counterdigged", js: "counterdigged", typ: null },
+        { json: "dialogite", js: "dialogite", typ: null },
+        { json: "digenic", js: "digenic", typ: null },
+        { json: "dunbird", js: "dunbird", typ: null },
+        { json: "ergatogyne", js: "ergatogyne", typ: null },
+        { json: "fiendful", js: "fiendful", typ: null },
+        { json: "jackrod", js: "jackrod", typ: null },
+        { json: "panther", js: "panther", typ: null },
+        { json: "placentigerous", js: "placentigerous", typ: null },
+        { json: "sparm", js: "sparm", typ: null },
+        { json: "tocsin", js: "tocsin", typ: null },
+        { json: "unnicked", js: "unnicked", typ: null },
+        { json: "unstavable", js: "unstavable", typ: null },
+        { json: "windfirm", js: "windfirm", typ: null },
+    ], false),
+    "DiaereseClass": o([
+        { json: "Amoreuxia", js: "Amoreuxia", typ: null },
+        { json: "ani", js: "ani", typ: null },
+        { json: "bernicle", js: "bernicle", typ: null },
+        { json: "blackwasher", js: "blackwasher", typ: null },
+        { json: "blowhard", js: "blowhard", typ: null },
+        { json: "broma", js: "broma", typ: null },
+        { json: "closecross", js: "closecross", typ: null },
+        { json: "congregationalism", js: "congregationalism", typ: null },
+        { json: "grayly", js: "grayly", typ: null },
+        { json: "historically", js: "historically", typ: null },
+        { json: "hoast", js: "hoast", typ: null },
+        { json: "irretentive", js: "irretentive", typ: null },
+        { json: "parcener", js: "parcener", typ: null },
+        { json: "pedder", js: "pedder", typ: null },
+        { json: "pseudoanatomic", js: "pseudoanatomic", typ: null },
+        { json: "rhizocarpian", js: "rhizocarpian", typ: null },
+        { json: "samel", js: "samel", typ: null },
+        { json: "silker", js: "silker", typ: null },
+        { json: "subdentated", js: "subdentated", typ: null },
+        { json: "subobscure", js: "subobscure", typ: null },
+    ], false),
+    "Encrust": o([
+        { json: "Hibernia", js: "Hibernia", typ: null },
+        { json: "Hibiscus", js: "Hibiscus", typ: null },
+        { json: "Lepidosauria", js: "Lepidosauria", typ: null },
+        { json: "Syllidae", js: "Syllidae", typ: null },
+        { json: "comradely", js: "comradely", typ: null },
+        { json: "diacanthous", js: "diacanthous", typ: null },
+        { json: "feminineness", js: "feminineness", typ: null },
+        { json: "gossamered", js: "gossamered", typ: null },
+        { json: "lollingly", js: "lollingly", typ: null },
+        { json: "manager", js: "manager", typ: null },
+        { json: "mechanic", js: "mechanic", typ: null },
+        { json: "overminuteness", js: "overminuteness", typ: null },
+        { json: "papelonne", js: "papelonne", typ: null },
+        { json: "plebification", js: "plebification", typ: null },
+        { json: "pugmiller", js: "pugmiller", typ: null },
+        { json: "recoveror", js: "recoveror", typ: null },
+        { json: "spermatoblastic", js: "spermatoblastic", typ: null },
+        { json: "ungyved", js: "ungyved", typ: null },
+        { json: "whirlabout", js: "whirlabout", typ: null },
+        { json: "woodenware", js: "woodenware", typ: null },
+    ], false),
+    "FagginglyClass": o([
+        { json: "Anglic", js: "Anglic", typ: null },
+        { json: "Heteromeri", js: "Heteromeri", typ: null },
+        { json: "Poinsettia", js: "Poinsettia", typ: null },
+        { json: "abranchian", js: "abranchian", typ: null },
+        { json: "aculeiform", js: "aculeiform", typ: null },
+        { json: "adiaphoristic", js: "adiaphoristic", typ: null },
+        { json: "adoptionism", js: "adoptionism", typ: null },
+        { json: "antrotomy", js: "antrotomy", typ: null },
+        { json: "coerciveness", js: "coerciveness", typ: null },
+        { json: "decorist", js: "decorist", typ: null },
+        { json: "duckhood", js: "duckhood", typ: null },
+        { json: "hypochnose", js: "hypochnose", typ: null },
+        { json: "lochage", js: "lochage", typ: null },
+        { json: "melee", js: "melee", typ: null },
+        { json: "nonconformitant", js: "nonconformitant", typ: null },
+        { json: "putatively", js: "putatively", typ: null },
+        { json: "semivolatile", js: "semivolatile", typ: null },
+        { json: "soleas", js: "soleas", typ: null },
+        { json: "unfastenable", js: "unfastenable", typ: null },
+        { json: "unmillinered", js: "unmillinered", typ: null },
+    ], false),
+    "FenkClass": o([
+        { json: "Dagomba", js: "Dagomba", typ: null },
+        { json: "Guyandot", js: "Guyandot", typ: null },
+        { json: "Reinwardtia", js: "Reinwardtia", typ: null },
+        { json: "Tritoness", js: "Tritoness", typ: null },
+        { json: "apoise", js: "apoise", typ: null },
+        { json: "astronomize", js: "astronomize", typ: null },
+        { json: "cockhorse", js: "cockhorse", typ: null },
+        { json: "copular", js: "copular", typ: null },
+        { json: "draffy", js: "draffy", typ: null },
+        { json: "foreigner", js: "foreigner", typ: null },
+        { json: "neurogliosis", js: "neurogliosis", typ: null },
+        { json: "osmious", js: "osmious", typ: null },
+        { json: "palpitate", js: "palpitate", typ: null },
+        { json: "rebukeable", js: "rebukeable", typ: null },
+        { json: "reservatory", js: "reservatory", typ: null },
+        { json: "scalt", js: "scalt", typ: null },
+        { json: "scripturalize", js: "scripturalize", typ: null },
+        { json: "tintometer", js: "tintometer", typ: null },
+        { json: "undergrade", js: "undergrade", typ: null },
+        { json: "undermountain", js: "undermountain", typ: null },
+    ], false),
+    "FlagmakingClass": o([
+        { json: "Bunodonta", js: "Bunodonta", typ: null },
+        { json: "Hydrocorisae", js: "Hydrocorisae", typ: null },
+        { json: "Notacanthidae", js: "Notacanthidae", typ: null },
+        { json: "albarco", js: "albarco", typ: null },
+        { json: "hornify", js: "hornify", typ: null },
+        { json: "hypoglossus", js: "hypoglossus", typ: null },
+        { json: "inexpiably", js: "inexpiably", typ: null },
+        { json: "ingratitude", js: "ingratitude", typ: null },
+        { json: "ladyfly", js: "ladyfly", typ: null },
+        { json: "medicament", js: "medicament", typ: null },
+        { json: "monogrammatic", js: "monogrammatic", typ: null },
+        { json: "nobbut", js: "nobbut", typ: null },
+        { json: "polyplacophore", js: "polyplacophore", typ: null },
+        { json: "proexercise", js: "proexercise", typ: null },
+        { json: "protoplast", js: "protoplast", typ: null },
+        { json: "puzzling", js: "puzzling", typ: null },
+        { json: "splanchnoskeleton", js: "splanchnoskeleton", typ: null },
+        { json: "unloveliness", js: "unloveliness", typ: null },
+        { json: "unquarantined", js: "unquarantined", typ: null },
+        { json: "unrenounceable", js: "unrenounceable", typ: null },
+    ], false),
+    "HemocoeleClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Walt", js: "Walt", typ: u(undefined, null) },
+        { json: "acrogamy", js: "acrogamy", typ: u(undefined, null) },
+        { json: "amelification", js: "amelification", typ: u(undefined, null) },
+        { json: "autobiographic", js: "autobiographic", typ: u(undefined, null) },
+        { json: "berat", js: "berat", typ: u(undefined, null) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "disproportionably", js: "disproportionably", typ: u(undefined, null) },
+        { json: "erythrite", js: "erythrite", typ: u(undefined, null) },
+        { json: "graphic", js: "graphic", typ: u(undefined, null) },
+        { json: "hepatological", js: "hepatological", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "incommensurably", js: "incommensurably", typ: u(undefined, null) },
+        { json: "misaffirm", js: "misaffirm", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "pocketbook", js: "pocketbook", typ: u(undefined, null) },
+        { json: "sclerometric", js: "sclerometric", typ: u(undefined, null) },
+        { json: "stambouline", js: "stambouline", typ: u(undefined, null) },
+        { json: "stickpin", js: "stickpin", typ: u(undefined, null) },
+        { json: "tubulure", js: "tubulure", typ: u(undefined, null) },
+        { json: "undelated", js: "undelated", typ: u(undefined, null) },
+        { json: "unsalt", js: "unsalt", typ: u(undefined, null) },
+        { json: "untutelar", js: "untutelar", typ: u(undefined, null) },
+        { json: "vagrant", js: "vagrant", typ: u(undefined, null) },
+    ], false),
+    "Interacinar": o([
+        { json: "assapan", js: "assapan", typ: 3.14 },
+        { json: "benefactorship", js: "benefactorship", typ: true },
+        { json: "triseriatim", js: "triseriatim", typ: "" },
+        { json: "tubbing", js: "tubbing", typ: i(0) },
+        { json: "untrimmed", js: "untrimmed", typ: null },
+    ], false),
+};
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/prefer-unions-false--a5053c0a486d/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
index d56cf48..263c9c7 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
@@ -527,7 +527,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
index d56cf48..263c9c7 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
@@ -527,7 +527,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/readonly-true--24da4fc107df/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/readonly-true--24da4fc107df/TopLevel.ts
index 9a7d870..3d18ca0 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/readonly-true--24da4fc107df/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/readonly-true--24da4fc107df/TopLevel.ts
@@ -527,7 +527,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
index 8993253..02e7a57 100644
--- a/base/typescript/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations1.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
@@ -527,7 +527,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
index fd1800c..1672405 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
@@ -479,7 +479,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/converters-all-objects--3a443babd1cb/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/converters-all-objects--3a443babd1cb/TopLevel.ts
index 7f22084..34f35e5 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/converters-all-objects--3a443babd1cb/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/converters-all-objects--3a443babd1cb/TopLevel.ts
@@ -559,7 +559,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/default/TopLevel.ts
index fd1800c..1672405 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/default/TopLevel.ts
@@ -479,7 +479,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
index d12ba7e..f3cf2db 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
@@ -479,7 +479,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/typescript/test/inputs/json/priority/combinations2.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
new file mode 100644
index 0000000..1672405
--- /dev/null
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
@@ -0,0 +1,812 @@
+// To parse this data:
+//
+//   import { Convert, TopLevel } from "./TopLevel";
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export interface TopLevel {
+    Abranchiata:      Abranchiata[];
+    Andriana:         (null | string)[];
+    Ansarie:          AnsarieElement[];
+    Chytridiaceae:    ChytridiaceaeElement[];
+    Discordia:        DiscordiaElement[];
+    Endomyces:        Endomyce[];
+    Epinephelidae:    Epinephelidae[];
+    Eupatorium:       Eupatorium[];
+    Gryphosaurus:     GryphosaurusElement[];
+    Koryak:           Koryak[];
+    Lavinia:          LaviniaElement[];
+    Oskar:            OskarElement[];
+    Rebecca:          RebeccaElement[];
+    Rhomboganoidei:   Rhomboganoidei[];
+    Rigsmal:          boolean;
+    Ruellia:          Ruellia[];
+    School:           School[];
+    Shakespearolater: Shakespearolater[];
+    Svan:             number[];
+    Wayao:            { [key: string]: number };
+    academe:          Academe[];
+    acquirable:       Acquirable[];
+    aerometry:        Aerometry[];
+    alexin:           Alexin[];
+    alleviate:        AlleviateElement[];
+    amaas:            Amaa[];
+    ambassage:        Ambassage[];
+    amphithyron:      (Amphithyron | null)[];
+    ankee:            AnkeeElement[];
+    annihilator:      ({ [key: string]: number | null } | null)[];
+    annulose:         null;
+    aphasia:          Aphasia[];
+    asprawl:          Asprawl[];
+    attractive:       (boolean | null)[];
+    barksome:         { [key: string]: number };
+    bedesman:         Bedesman[];
+    belard:           Belard[];
+    bocking:          Bocking[];
+    brawlingly:       Brawlingly[];
+    brookie:          Brookie[];
+    bumboatman:       Bumboatman[];
+    bystreet:         null[];
+    calaverite:       Calaverite[];
+    catallactic:      Catallactic[];
+    cemental:         Cemental[];
+}
+
+export type Abranchiata = number[] | number | null;
+
+export type AnsarieElement = number[] | AnsarieClass | null;
+
+export interface AnsarieClass {
+    Alida:          null;
+    Ictonyx:        null;
+    Ramist:         null;
+    accension:      null;
+    asteria:        null;
+    beriberic:      null;
+    edgebone:       null;
+    gastrodialysis: null;
+    geographic:     null;
+    metrocele:      null;
+    misgraft:       null;
+    monteith:       null;
+    notcher:        null;
+    prorestriction: null;
+    throatlet:      null;
+    unfair:         null;
+    unsynonymous:   null;
+    water:          null;
+    zestfully:      null;
+    zincic:         null;
+}
+
+export type ChytridiaceaeElement = boolean | ChytridiaceaeClass | null;
+
+export interface ChytridiaceaeClass {
+    Batidaceae:     null;
+    Brechites:      null;
+    Emery:          null;
+    Narraganset:    null;
+    codespairer:    null;
+    enervative:     null;
+    excriminate:    null;
+    goshenite:      null;
+    grime:          null;
+    gritten:        null;
+    hectorly:       null;
+    intermediation: null;
+    meeterly:       null;
+    onymatic:       null;
+    paddlecock:     null;
+    thana:          null;
+    thornily:       null;
+    uckia:          null;
+    unmettle:       null;
+    vorticellid:    null;
+}
+
+export type DiscordiaElement = number[] | DiscordiaClass;
+
+export interface DiscordiaClass {
+    Altaic?:           number;
+    Chirotherium?:     number;
+    Patarin?:          number;
+    amoristic?:        number;
+    blennophthalmia?:  number;
+    catharticalness?:  number;
+    disciplinability?: number;
+    disdiapason?:      string;
+    goofer?:           number;
+    homocerc?:         boolean;
+    laryngograph?:     number;
+    leucitis?:         number;
+    lymphocyst?:       number;
+    microcosmology?:   number;
+    nauseation?:       number;
+    nonbookish?:       null;
+    preliberal?:       number;
+    prettifier?:       number;
+    rangework?:        number;
+    redient?:          number;
+    subfusiform?:      number;
+    suicidical?:       number;
+    swow?:             number;
+    wastrel?:          number;
+    wingle?:           number;
+}
+
+export type Endomyce = number | string;
+
+export type Epinephelidae = boolean | number | string;
+
+export type Eupatorium = null[] | { [key: string]: number };
+
+export type GryphosaurusElement = number[] | GryphosaurusClass | string;
+
+export interface GryphosaurusClass {
+    Burushaski:      null;
+    Tahami:          null;
+    amissibility:    null;
+    citronin:        null;
+    coplaintiff:     null;
+    disquisitionary: null;
+    enoplan:         null;
+    faintness:       null;
+    hebetomy:        null;
+    islandry:        null;
+    lameduck:        null;
+    overbattle:      null;
+    overinterested:  null;
+    phrenologic:     null;
+    rainband:        null;
+    shiningly:       null;
+    stamineous:      null;
+    subscapularis:   null;
+    undaubed:        null;
+    underntime:      null;
+}
+
+export type Koryak = { [key: string]: number | null } | string;
+
+export type LaviniaElement = LaviniaClass | string;
+
+export interface LaviniaClass {
+    Chirotherium?:      number;
+    Tacana?:            number;
+    agitable?:          number;
+    asininity?:         number;
+    benefiter?:         number;
+    bronzelike?:        number;
+    catharticalness?:   number;
+    cholesteatomatous?: number;
+    deprivement?:       number;
+    disdiapason?:       string;
+    flippantness?:      number;
+    fogproof?:          number;
+    homocerc?:          boolean;
+    merrymeeting?:      number;
+    nonbookish?:        null;
+    overcareful?:       number;
+    panaris?:           number;
+    preacceptance?:     number;
+    quinoxaline?:       number;
+    sig?:               number;
+    superconfusion?:    number;
+    tillotter?:         number;
+    tranquillize?:      number;
+    unquestionable?:    number;
+    uproute?:           number;
+}
+
+export type OskarElement = number[] | OskarClass;
+
+export interface OskarClass {
+    Acrobates:        null;
+    Cayuga:           null;
+    Netherlandish:    null;
+    beanshooter:      null;
+    bearhound:        null;
+    guarneri:         null;
+    hypochondriacism: null;
+    indication:       null;
+    jaculative:       null;
+    nagana:           null;
+    noctivagous:      null;
+    nonphysiological: null;
+    praxis:           null;
+    provision:        null;
+    subterhuman:      null;
+    sunlit:           null;
+    syncraniate:      null;
+    teachment:        null;
+    unmutinous:       null;
+    unstoppable:      null;
+}
+
+export type RebeccaElement = Rebecca | number | string;
+
+export interface Rebecca {
+    Chirotherium:    number;
+    catharticalness: number;
+    disdiapason:     string;
+    homocerc:        boolean;
+    nonbookish:      null;
+}
+
+export type Rhomboganoidei = number[] | Rebecca | string;
+
+export type Ruellia = boolean | Rebecca | string;
+
+export type School = number | { [key: string]: number } | null;
+
+export type Shakespearolater = number[] | number | string;
+
+export type Academe = number[] | number | { [key: string]: number };
+
+export type Acquirable = (number | null)[] | { [key: string]: number };
+
+export type Aerometry = boolean | number;
+
+export type Alexin = number[] | boolean;
+
+export type AlleviateElement = (number | null)[] | AlleviateClass;
+
+export interface AlleviateClass {
+    Hulsean:         null;
+    apriori:         null;
+    beggarer:        null;
+    brokenheartedly: null;
+    debilitation:    null;
+    frike:           null;
+    gastrolith:      null;
+    orthocentric:    null;
+    petaly:          null;
+    probudgeting:    null;
+    reacquire:       null;
+    scow:            null;
+    shutoff:         null;
+    subcontiguous:   null;
+    suffumigate:     null;
+    transformable:   null;
+    uncoroneted:     null;
+    unparking:       null;
+    unvarnishedness: null;
+    wherewithal:     null;
+}
+
+export type Amaa = boolean | Rebecca | number;
+
+export type Ambassage = null[] | string;
+
+export interface Amphithyron {
+    Chirotherium?:    number;
+    Juniperus?:       number;
+    Nazirite?:        number;
+    Those?:           number;
+    akroasis?:        number;
+    antiphonical?:    number;
+    basebred?:        number;
+    catharticalness?: number;
+    conductometric?:  number;
+    disdiapason?:     string;
+    ensilation?:      number;
+    eyebolt?:         number;
+    fistulated?:      number;
+    heteropod?:       number;
+    homocerc?:        boolean;
+    labyrinthically?: number;
+    martyrization?:   number;
+    mispolicy?:       number;
+    multipara?:       number;
+    nonbookish?:      null;
+    possessorial?:    number;
+    shamed?:          number;
+    shelfworn?:       number;
+    stagnum?:         number;
+    undecimal?:       number;
+}
+
+export type AnkeeElement = number[] | AnkeeClass | number;
+
+export interface AnkeeClass {
+    Anomoean:        null;
+    Naja:            null;
+    barleyhood:      null;
+    befriender:      null;
+    brutishness:     null;
+    cephalalgy:      null;
+    cirurgian:       null;
+    conventionally:  null;
+    jackshay:        null;
+    milammeter:      null;
+    ombrological:    null;
+    phonasthenia:    null;
+    retrievableness: null;
+    snakily:         null;
+    swot:            null;
+    tartlet:         null;
+    thiofuran:       null;
+    tracheophone:    null;
+    tuglike:         null;
+    unscratchingly:  null;
+}
+
+export type Aphasia = number[] | number;
+
+export type Asprawl = number | string;
+
+export type Bedesman = boolean | number | string;
+
+export type Belard = number[] | Rebecca | number;
+
+export type Bocking = number[] | boolean | { [key: string]: number };
+
+export type Brawlingly = null[] | { [key: string]: number | null };
+
+export type Brookie = number[] | Rebecca;
+
+export type Bumboatman = null[] | null | string;
+
+export type Calaverite = number[] | string;
+
+export type Catallactic = null[] | boolean | { [key: string]: number };
+
+export type Cemental = number[] | number | { [key: string]: number };
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+export class Convert {
+    public static toTopLevel(json: string): TopLevel {
+        return cast(JSON.parse(json), r("TopLevel"));
+    }
+
+    public static topLevelToJson(value: TopLevel): string {
+        return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+    }
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = ''): never {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "Abranchiata", js: "Abranchiata", typ: a(u(a(i(0)), i(0), null)) },
+        { json: "Andriana", js: "Andriana", typ: a(u(null, "")) },
+        { json: "Ansarie", js: "Ansarie", typ: a(u(a(i(0)), r("AnsarieClass"), null)) },
+        { json: "Chytridiaceae", js: "Chytridiaceae", typ: a(u(true, r("ChytridiaceaeClass"), null)) },
+        { json: "Discordia", js: "Discordia", typ: a(u(a(i(0)), r("DiscordiaClass"))) },
+        { json: "Endomyces", js: "Endomyces", typ: a(u(i(0), "")) },
+        { json: "Epinephelidae", js: "Epinephelidae", typ: a(u(true, i(0), "")) },
+        { json: "Eupatorium", js: "Eupatorium", typ: a(u(a(null), m(i(0)))) },
+        { json: "Gryphosaurus", js: "Gryphosaurus", typ: a(u(a(i(0)), r("GryphosaurusClass"), "")) },
+        { json: "Koryak", js: "Koryak", typ: a(u(m(u(i(0), null)), "")) },
+        { json: "Lavinia", js: "Lavinia", typ: a(u(r("LaviniaClass"), "")) },
+        { json: "Oskar", js: "Oskar", typ: a(u(a(i(0)), r("OskarClass"))) },
+        { json: "Rebecca", js: "Rebecca", typ: a(u(r("Rebecca"), i(0), "")) },
+        { json: "Rhomboganoidei", js: "Rhomboganoidei", typ: a(u(a(i(0)), r("Rebecca"), "")) },
+        { json: "Rigsmal", js: "Rigsmal", typ: true },
+        { json: "Ruellia", js: "Ruellia", typ: a(u(true, r("Rebecca"), "")) },
+        { json: "School", js: "School", typ: a(u(i(0), m(i(0)), null)) },
+        { json: "Shakespearolater", js: "Shakespearolater", typ: a(u(a(i(0)), 3.14, "")) },
+        { json: "Svan", js: "Svan", typ: a(3.14) },
+        { json: "Wayao", js: "Wayao", typ: m(3.14) },
+        { json: "academe", js: "academe", typ: a(u(a(i(0)), i(0), m(i(0)))) },
+        { json: "acquirable", js: "acquirable", typ: a(u(a(u(i(0), null)), m(i(0)))) },
+        { json: "aerometry", js: "aerometry", typ: a(u(true, 3.14)) },
+        { json: "alexin", js: "alexin", typ: a(u(a(i(0)), true)) },
+        { json: "alleviate", js: "alleviate", typ: a(u(a(u(i(0), null)), r("AlleviateClass"))) },
+        { json: "amaas", js: "amaas", typ: a(u(true, r("Rebecca"), i(0))) },
+        { json: "ambassage", js: "ambassage", typ: a(u(a(null), "")) },
+        { json: "amphithyron", js: "amphithyron", typ: a(u(r("Amphithyron"), null)) },
+        { json: "ankee", js: "ankee", typ: a(u(a(i(0)), r("AnkeeClass"), i(0))) },
+        { json: "annihilator", js: "annihilator", typ: a(u(m(u(i(0), null)), null)) },
+        { json: "annulose", js: "annulose", typ: null },
+        { json: "aphasia", js: "aphasia", typ: a(u(a(i(0)), i(0))) },
+        { json: "asprawl", js: "asprawl", typ: a(u(3.14, "")) },
+        { json: "attractive", js: "attractive", typ: a(u(true, null)) },
+        { json: "barksome", js: "barksome", typ: m(i(0)) },
+        { json: "bedesman", js: "bedesman", typ: a(u(true, 3.14, "")) },
+        { json: "belard", js: "belard", typ: a(u(a(i(0)), r("Rebecca"), 3.14)) },
+        { json: "bocking", js: "bocking", typ: a(u(a(i(0)), true, m(i(0)))) },
+        { json: "brawlingly", js: "brawlingly", typ: a(u(a(null), m(u(i(0), null)))) },
+        { json: "brookie", js: "brookie", typ: a(u(a(i(0)), r("Rebecca"))) },
+        { json: "bumboatman", js: "bumboatman", typ: a(u(a(null), null, "")) },
+        { json: "bystreet", js: "bystreet", typ: a(null) },
+        { json: "calaverite", js: "calaverite", typ: a(u(a(i(0)), "")) },
+        { json: "catallactic", js: "catallactic", typ: a(u(a(null), true, m(i(0)))) },
+        { json: "cemental", js: "cemental", typ: a(u(a(i(0)), 3.14, m(i(0)))) },
+    ], false),
+    "AnsarieClass": o([
+        { json: "Alida", js: "Alida", typ: null },
+        { json: "Ictonyx", js: "Ictonyx", typ: null },
+        { json: "Ramist", js: "Ramist", typ: null },
+        { json: "accension", js: "accension", typ: null },
+        { json: "asteria", js: "asteria", typ: null },
+        { json: "beriberic", js: "beriberic", typ: null },
+        { json: "edgebone", js: "edgebone", typ: null },
+        { json: "gastrodialysis", js: "gastrodialysis", typ: null },
+        { json: "geographic", js: "geographic", typ: null },
+        { json: "metrocele", js: "metrocele", typ: null },
+        { json: "misgraft", js: "misgraft", typ: null },
+        { json: "monteith", js: "monteith", typ: null },
+        { json: "notcher", js: "notcher", typ: null },
+        { json: "prorestriction", js: "prorestriction", typ: null },
+        { json: "throatlet", js: "throatlet", typ: null },
+        { json: "unfair", js: "unfair", typ: null },
+        { json: "unsynonymous", js: "unsynonymous", typ: null },
+        { json: "water", js: "water", typ: null },
+        { json: "zestfully", js: "zestfully", typ: null },
+        { json: "zincic", js: "zincic", typ: null },
+    ], false),
+    "ChytridiaceaeClass": o([
+        { json: "Batidaceae", js: "Batidaceae", typ: null },
+        { json: "Brechites", js: "Brechites", typ: null },
+        { json: "Emery", js: "Emery", typ: null },
+        { json: "Narraganset", js: "Narraganset", typ: null },
+        { json: "codespairer", js: "codespairer", typ: null },
+        { json: "enervative", js: "enervative", typ: null },
+        { json: "excriminate", js: "excriminate", typ: null },
+        { json: "goshenite", js: "goshenite", typ: null },
+        { json: "grime", js: "grime", typ: null },
+        { json: "gritten", js: "gritten", typ: null },
+        { json: "hectorly", js: "hectorly", typ: null },
+        { json: "intermediation", js: "intermediation", typ: null },
+        { json: "meeterly", js: "meeterly", typ: null },
+        { json: "onymatic", js: "onymatic", typ: null },
+        { json: "paddlecock", js: "paddlecock", typ: null },
+        { json: "thana", js: "thana", typ: null },
+        { json: "thornily", js: "thornily", typ: null },
+        { json: "uckia", js: "uckia", typ: null },
+        { json: "unmettle", js: "unmettle", typ: null },
+        { json: "vorticellid", js: "vorticellid", typ: null },
+    ], false),
+    "DiscordiaClass": o([
+        { json: "Altaic", js: "Altaic", typ: u(undefined, i(0)) },
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Patarin", js: "Patarin", typ: u(undefined, i(0)) },
+        { json: "amoristic", js: "amoristic", typ: u(undefined, i(0)) },
+        { json: "blennophthalmia", js: "blennophthalmia", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "disciplinability", js: "disciplinability", typ: u(undefined, i(0)) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "goofer", js: "goofer", typ: u(undefined, i(0)) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "laryngograph", js: "laryngograph", typ: u(undefined, i(0)) },
+        { json: "leucitis", js: "leucitis", typ: u(undefined, i(0)) },
+        { json: "lymphocyst", js: "lymphocyst", typ: u(undefined, i(0)) },
+        { json: "microcosmology", js: "microcosmology", typ: u(undefined, i(0)) },
+        { json: "nauseation", js: "nauseation", typ: u(undefined, i(0)) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "preliberal", js: "preliberal", typ: u(undefined, i(0)) },
+        { json: "prettifier", js: "prettifier", typ: u(undefined, i(0)) },
+        { json: "rangework", js: "rangework", typ: u(undefined, i(0)) },
+        { json: "redient", js: "redient", typ: u(undefined, i(0)) },
+        { json: "subfusiform", js: "subfusiform", typ: u(undefined, i(0)) },
+        { json: "suicidical", js: "suicidical", typ: u(undefined, i(0)) },
+        { json: "swow", js: "swow", typ: u(undefined, i(0)) },
+        { json: "wastrel", js: "wastrel", typ: u(undefined, i(0)) },
+        { json: "wingle", js: "wingle", typ: u(undefined, i(0)) },
+    ], false),
+    "GryphosaurusClass": o([
+        { json: "Burushaski", js: "Burushaski", typ: null },
+        { json: "Tahami", js: "Tahami", typ: null },
+        { json: "amissibility", js: "amissibility", typ: null },
+        { json: "citronin", js: "citronin", typ: null },
+        { json: "coplaintiff", js: "coplaintiff", typ: null },
+        { json: "disquisitionary", js: "disquisitionary", typ: null },
+        { json: "enoplan", js: "enoplan", typ: null },
+        { json: "faintness", js: "faintness", typ: null },
+        { json: "hebetomy", js: "hebetomy", typ: null },
+        { json: "islandry", js: "islandry", typ: null },
+        { json: "lameduck", js: "lameduck", typ: null },
+        { json: "overbattle", js: "overbattle", typ: null },
+        { json: "overinterested", js: "overinterested", typ: null },
+        { json: "phrenologic", js: "phrenologic", typ: null },
+        { json: "rainband", js: "rainband", typ: null },
+        { json: "shiningly", js: "shiningly", typ: null },
+        { json: "stamineous", js: "stamineous", typ: null },
+        { json: "subscapularis", js: "subscapularis", typ: null },
+        { json: "undaubed", js: "undaubed", typ: null },
+        { json: "underntime", js: "underntime", typ: null },
+    ], false),
+    "LaviniaClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Tacana", js: "Tacana", typ: u(undefined, i(0)) },
+        { json: "agitable", js: "agitable", typ: u(undefined, i(0)) },
+        { json: "asininity", js: "asininity", typ: u(undefined, i(0)) },
+        { json: "benefiter", js: "benefiter", typ: u(undefined, i(0)) },
+        { json: "bronzelike", js: "bronzelike", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "cholesteatomatous", js: "cholesteatomatous", typ: u(undefined, i(0)) },
+        { json: "deprivement", js: "deprivement", typ: u(undefined, i(0)) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "flippantness", js: "flippantness", typ: u(undefined, i(0)) },
+        { json: "fogproof", js: "fogproof", typ: u(undefined, i(0)) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "merrymeeting", js: "merrymeeting", typ: u(undefined, i(0)) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "overcareful", js: "overcareful", typ: u(undefined, i(0)) },
+        { json: "panaris", js: "panaris", typ: u(undefined, i(0)) },
+        { json: "preacceptance", js: "preacceptance", typ: u(undefined, i(0)) },
+        { json: "quinoxaline", js: "quinoxaline", typ: u(undefined, i(0)) },
+        { json: "sig", js: "sig", typ: u(undefined, i(0)) },
+        { json: "superconfusion", js: "superconfusion", typ: u(undefined, i(0)) },
+        { json: "tillotter", js: "tillotter", typ: u(undefined, i(0)) },
+        { json: "tranquillize", js: "tranquillize", typ: u(undefined, i(0)) },
+        { json: "unquestionable", js: "unquestionable", typ: u(undefined, i(0)) },
+        { json: "uproute", js: "uproute", typ: u(undefined, i(0)) },
+    ], false),
+    "OskarClass": o([
+        { json: "Acrobates", js: "Acrobates", typ: null },
+        { json: "Cayuga", js: "Cayuga", typ: null },
+        { json: "Netherlandish", js: "Netherlandish", typ: null },
+        { json: "beanshooter", js: "beanshooter", typ: null },
+        { json: "bearhound", js: "bearhound", typ: null },
+        { json: "guarneri", js: "guarneri", typ: null },
+        { json: "hypochondriacism", js: "hypochondriacism", typ: null },
+        { json: "indication", js: "indication", typ: null },
+        { json: "jaculative", js: "jaculative", typ: null },
+        { json: "nagana", js: "nagana", typ: null },
+        { json: "noctivagous", js: "noctivagous", typ: null },
+        { json: "nonphysiological", js: "nonphysiological", typ: null },
+        { json: "praxis", js: "praxis", typ: null },
+        { json: "provision", js: "provision", typ: null },
+        { json: "subterhuman", js: "subterhuman", typ: null },
+        { json: "sunlit", js: "sunlit", typ: null },
+        { json: "syncraniate", js: "syncraniate", typ: null },
+        { json: "teachment", js: "teachment", typ: null },
+        { json: "unmutinous", js: "unmutinous", typ: null },
+        { json: "unstoppable", js: "unstoppable", typ: null },
+    ], false),
+    "Rebecca": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: i(0) },
+        { json: "catharticalness", js: "catharticalness", typ: 3.14 },
+        { json: "disdiapason", js: "disdiapason", typ: "" },
+        { json: "homocerc", js: "homocerc", typ: true },
+        { json: "nonbookish", js: "nonbookish", typ: null },
+    ], false),
+    "AlleviateClass": o([
+        { json: "Hulsean", js: "Hulsean", typ: null },
+        { json: "apriori", js: "apriori", typ: null },
+        { json: "beggarer", js: "beggarer", typ: null },
+        { json: "brokenheartedly", js: "brokenheartedly", typ: null },
+        { json: "debilitation", js: "debilitation", typ: null },
+        { json: "frike", js: "frike", typ: null },
+        { json: "gastrolith", js: "gastrolith", typ: null },
+        { json: "orthocentric", js: "orthocentric", typ: null },
+        { json: "petaly", js: "petaly", typ: null },
+        { json: "probudgeting", js: "probudgeting", typ: null },
+        { json: "reacquire", js: "reacquire", typ: null },
+        { json: "scow", js: "scow", typ: null },
+        { json: "shutoff", js: "shutoff", typ: null },
+        { json: "subcontiguous", js: "subcontiguous", typ: null },
+        { json: "suffumigate", js: "suffumigate", typ: null },
+        { json: "transformable", js: "transformable", typ: null },
+        { json: "uncoroneted", js: "uncoroneted", typ: null },
+        { json: "unparking", js: "unparking", typ: null },
+        { json: "unvarnishedness", js: "unvarnishedness", typ: null },
+        { json: "wherewithal", js: "wherewithal", typ: null },
+    ], false),
+    "Amphithyron": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Juniperus", js: "Juniperus", typ: u(undefined, i(0)) },
+        { json: "Nazirite", js: "Nazirite", typ: u(undefined, i(0)) },
+        { json: "Those", js: "Those", typ: u(undefined, i(0)) },
+        { json: "akroasis", js: "akroasis", typ: u(undefined, i(0)) },
+        { json: "antiphonical", js: "antiphonical", typ: u(undefined, i(0)) },
+        { json: "basebred", js: "basebred", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "conductometric", js: "conductometric", typ: u(undefined, i(0)) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "ensilation", js: "ensilation", typ: u(undefined, i(0)) },
+        { json: "eyebolt", js: "eyebolt", typ: u(undefined, i(0)) },
+        { json: "fistulated", js: "fistulated", typ: u(undefined, i(0)) },
+        { json: "heteropod", js: "heteropod", typ: u(undefined, i(0)) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "labyrinthically", js: "labyrinthically", typ: u(undefined, i(0)) },
+        { json: "martyrization", js: "martyrization", typ: u(undefined, i(0)) },
+        { json: "mispolicy", js: "mispolicy", typ: u(undefined, i(0)) },
+        { json: "multipara", js: "multipara", typ: u(undefined, i(0)) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "possessorial", js: "possessorial", typ: u(undefined, i(0)) },
+        { json: "shamed", js: "shamed", typ: u(undefined, i(0)) },
+        { json: "shelfworn", js: "shelfworn", typ: u(undefined, i(0)) },
+        { json: "stagnum", js: "stagnum", typ: u(undefined, i(0)) },
+        { json: "undecimal", js: "undecimal", typ: u(undefined, i(0)) },
+    ], false),
+    "AnkeeClass": o([
+        { json: "Anomoean", js: "Anomoean", typ: null },
+        { json: "Naja", js: "Naja", typ: null },
+        { json: "barleyhood", js: "barleyhood", typ: null },
+        { json: "befriender", js: "befriender", typ: null },
+        { json: "brutishness", js: "brutishness", typ: null },
+        { json: "cephalalgy", js: "cephalalgy", typ: null },
+        { json: "cirurgian", js: "cirurgian", typ: null },
+        { json: "conventionally", js: "conventionally", typ: null },
+        { json: "jackshay", js: "jackshay", typ: null },
+        { json: "milammeter", js: "milammeter", typ: null },
+        { json: "ombrological", js: "ombrological", typ: null },
+        { json: "phonasthenia", js: "phonasthenia", typ: null },
+        { json: "retrievableness", js: "retrievableness", typ: null },
+        { json: "snakily", js: "snakily", typ: null },
+        { json: "swot", js: "swot", typ: null },
+        { json: "tartlet", js: "tartlet", typ: null },
+        { json: "thiofuran", js: "thiofuran", typ: null },
+        { json: "tracheophone", js: "tracheophone", typ: null },
+        { json: "tuglike", js: "tuglike", typ: null },
+        { json: "unscratchingly", js: "unscratchingly", typ: null },
+    ], false),
+};
diff --git a/head/typescript/test/inputs/json/priority/combinations2.json/prefer-types-true--df33e18681f9/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/prefer-types-true--df33e18681f9/TopLevel.ts
new file mode 100644
index 0000000..cdd0ff3
--- /dev/null
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/prefer-types-true--df33e18681f9/TopLevel.ts
@@ -0,0 +1,812 @@
+// To parse this data:
+//
+//   import { Convert, TopLevel } from "./TopLevel";
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export type TopLevel = {
+    Abranchiata:      Abranchiata[];
+    Andriana:         (null | string)[];
+    Ansarie:          AnsarieElement[];
+    Chytridiaceae:    ChytridiaceaeElement[];
+    Discordia:        DiscordiaElement[];
+    Endomyces:        Endomyce[];
+    Epinephelidae:    Epinephelidae[];
+    Eupatorium:       Eupatorium[];
+    Gryphosaurus:     GryphosaurusElement[];
+    Koryak:           Koryak[];
+    Lavinia:          LaviniaElement[];
+    Oskar:            OskarElement[];
+    Rebecca:          RebeccaElement[];
+    Rhomboganoidei:   Rhomboganoidei[];
+    Rigsmal:          boolean;
+    Ruellia:          Ruellia[];
+    School:           School[];
+    Shakespearolater: Shakespearolater[];
+    Svan:             number[];
+    Wayao:            { [key: string]: number };
+    academe:          Academe[];
+    acquirable:       Acquirable[];
+    aerometry:        Aerometry[];
+    alexin:           Alexin[];
+    alleviate:        AlleviateElement[];
+    amaas:            Amaa[];
+    ambassage:        Ambassage[];
+    amphithyron:      (Amphithyron | null)[];
+    ankee:            AnkeeElement[];
+    annihilator:      ({ [key: string]: number | null } | null)[];
+    annulose:         null;
+    aphasia:          Aphasia[];
+    asprawl:          Asprawl[];
+    attractive:       (boolean | null)[];
+    barksome:         { [key: string]: number };
+    bedesman:         Bedesman[];
+    belard:           Belard[];
+    bocking:          Bocking[];
+    brawlingly:       Brawlingly[];
+    brookie:          Brookie[];
+    bumboatman:       Bumboatman[];
+    bystreet:         null[];
+    calaverite:       Calaverite[];
+    catallactic:      Catallactic[];
+    cemental:         Cemental[];
+}
+
+export type Abranchiata = number[] | number | null;
+
+export type AnsarieElement = number[] | AnsarieClass | null;
+
+export type AnsarieClass = {
+    Alida:          null;
+    Ictonyx:        null;
+    Ramist:         null;
+    accension:      null;
+    asteria:        null;
+    beriberic:      null;
+    edgebone:       null;
+    gastrodialysis: null;
+    geographic:     null;
+    metrocele:      null;
+    misgraft:       null;
+    monteith:       null;
+    notcher:        null;
+    prorestriction: null;
+    throatlet:      null;
+    unfair:         null;
+    unsynonymous:   null;
+    water:          null;
+    zestfully:      null;
+    zincic:         null;
+}
+
+export type ChytridiaceaeElement = boolean | ChytridiaceaeClass | null;
+
+export type ChytridiaceaeClass = {
+    Batidaceae:     null;
+    Brechites:      null;
+    Emery:          null;
+    Narraganset:    null;
+    codespairer:    null;
+    enervative:     null;
+    excriminate:    null;
+    goshenite:      null;
+    grime:          null;
+    gritten:        null;
+    hectorly:       null;
+    intermediation: null;
+    meeterly:       null;
+    onymatic:       null;
+    paddlecock:     null;
+    thana:          null;
+    thornily:       null;
+    uckia:          null;
+    unmettle:       null;
+    vorticellid:    null;
+}
+
+export type DiscordiaElement = number[] | DiscordiaClass;
+
+export type DiscordiaClass = {
+    Altaic?:           number;
+    Chirotherium?:     number;
+    Patarin?:          number;
+    amoristic?:        number;
+    blennophthalmia?:  number;
+    catharticalness?:  number;
+    disciplinability?: number;
+    disdiapason?:      string;
+    goofer?:           number;
+    homocerc?:         boolean;
+    laryngograph?:     number;
+    leucitis?:         number;
+    lymphocyst?:       number;
+    microcosmology?:   number;
+    nauseation?:       number;
+    nonbookish?:       null;
+    preliberal?:       number;
+    prettifier?:       number;
+    rangework?:        number;
+    redient?:          number;
+    subfusiform?:      number;
+    suicidical?:       number;
+    swow?:             number;
+    wastrel?:          number;
+    wingle?:           number;
+}
+
+export type Endomyce = number | string;
+
+export type Epinephelidae = boolean | number | string;
+
+export type Eupatorium = null[] | { [key: string]: number };
+
+export type GryphosaurusElement = number[] | GryphosaurusClass | string;
+
+export type GryphosaurusClass = {
+    Burushaski:      null;
+    Tahami:          null;
+    amissibility:    null;
+    citronin:        null;
+    coplaintiff:     null;
+    disquisitionary: null;
+    enoplan:         null;
+    faintness:       null;
+    hebetomy:        null;
+    islandry:        null;
+    lameduck:        null;
+    overbattle:      null;
+    overinterested:  null;
+    phrenologic:     null;
+    rainband:        null;
+    shiningly:       null;
+    stamineous:      null;
+    subscapularis:   null;
+    undaubed:        null;
+    underntime:      null;
+}
+
+export type Koryak = { [key: string]: number | null } | string;
+
+export type LaviniaElement = LaviniaClass | string;
+
+export type LaviniaClass = {
+    Chirotherium?:      number;
+    Tacana?:            number;
+    agitable?:          number;
+    asininity?:         number;
+    benefiter?:         number;
+    bronzelike?:        number;
+    catharticalness?:   number;
+    cholesteatomatous?: number;
+    deprivement?:       number;
+    disdiapason?:       string;
+    flippantness?:      number;
+    fogproof?:          number;
+    homocerc?:          boolean;
+    merrymeeting?:      number;
+    nonbookish?:        null;
+    overcareful?:       number;
+    panaris?:           number;
+    preacceptance?:     number;
+    quinoxaline?:       number;
+    sig?:               number;
+    superconfusion?:    number;
+    tillotter?:         number;
+    tranquillize?:      number;
+    unquestionable?:    number;
+    uproute?:           number;
+}
+
+export type OskarElement = number[] | OskarClass;
+
+export type OskarClass = {
+    Acrobates:        null;
+    Cayuga:           null;
+    Netherlandish:    null;
+    beanshooter:      null;
+    bearhound:        null;
+    guarneri:         null;
+    hypochondriacism: null;
+    indication:       null;
+    jaculative:       null;
+    nagana:           null;
+    noctivagous:      null;
+    nonphysiological: null;
+    praxis:           null;
+    provision:        null;
+    subterhuman:      null;
+    sunlit:           null;
+    syncraniate:      null;
+    teachment:        null;
+    unmutinous:       null;
+    unstoppable:      null;
+}
+
+export type RebeccaElement = Rebecca | number | string;
+
+export type Rebecca = {
+    Chirotherium:    number;
+    catharticalness: number;
+    disdiapason:     string;
+    homocerc:        boolean;
+    nonbookish:      null;
+}
+
+export type Rhomboganoidei = number[] | Rebecca | string;
+
+export type Ruellia = boolean | Rebecca | string;
+
+export type School = number | { [key: string]: number } | null;
+
+export type Shakespearolater = number[] | number | string;
+
+export type Academe = number[] | number | { [key: string]: number };
+
+export type Acquirable = (number | null)[] | { [key: string]: number };
+
+export type Aerometry = boolean | number;
+
+export type Alexin = number[] | boolean;
+
+export type AlleviateElement = (number | null)[] | AlleviateClass;
+
+export type AlleviateClass = {
+    Hulsean:         null;
+    apriori:         null;
+    beggarer:        null;
+    brokenheartedly: null;
+    debilitation:    null;
+    frike:           null;
+    gastrolith:      null;
+    orthocentric:    null;
+    petaly:          null;
+    probudgeting:    null;
+    reacquire:       null;
+    scow:            null;
+    shutoff:         null;
+    subcontiguous:   null;
+    suffumigate:     null;
+    transformable:   null;
+    uncoroneted:     null;
+    unparking:       null;
+    unvarnishedness: null;
+    wherewithal:     null;
+}
+
+export type Amaa = boolean | Rebecca | number;
+
+export type Ambassage = null[] | string;
+
+export type Amphithyron = {
+    Chirotherium?:    number;
+    Juniperus?:       number;
+    Nazirite?:        number;
+    Those?:           number;
+    akroasis?:        number;
+    antiphonical?:    number;
+    basebred?:        number;
+    catharticalness?: number;
+    conductometric?:  number;
+    disdiapason?:     string;
+    ensilation?:      number;
+    eyebolt?:         number;
+    fistulated?:      number;
+    heteropod?:       number;
+    homocerc?:        boolean;
+    labyrinthically?: number;
+    martyrization?:   number;
+    mispolicy?:       number;
+    multipara?:       number;
+    nonbookish?:      null;
+    possessorial?:    number;
+    shamed?:          number;
+    shelfworn?:       number;
+    stagnum?:         number;
+    undecimal?:       number;
+}
+
+export type AnkeeElement = number[] | AnkeeClass | number;
+
+export type AnkeeClass = {
+    Anomoean:        null;
+    Naja:            null;
+    barleyhood:      null;
+    befriender:      null;
+    brutishness:     null;
+    cephalalgy:      null;
+    cirurgian:       null;
+    conventionally:  null;
+    jackshay:        null;
+    milammeter:      null;
+    ombrological:    null;
+    phonasthenia:    null;
+    retrievableness: null;
+    snakily:         null;
+    swot:            null;
+    tartlet:         null;
+    thiofuran:       null;
+    tracheophone:    null;
+    tuglike:         null;
+    unscratchingly:  null;
+}
+
+export type Aphasia = number[] | number;
+
+export type Asprawl = number | string;
+
+export type Bedesman = boolean | number | string;
+
+export type Belard = number[] | Rebecca | number;
+
+export type Bocking = number[] | boolean | { [key: string]: number };
+
+export type Brawlingly = null[] | { [key: string]: number | null };
+
+export type Brookie = number[] | Rebecca;
+
+export type Bumboatman = null[] | null | string;
+
+export type Calaverite = number[] | string;
+
+export type Catallactic = null[] | boolean | { [key: string]: number };
+
+export type Cemental = number[] | number | { [key: string]: number };
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+export class Convert {
+    public static toTopLevel(json: string): TopLevel {
+        return cast(JSON.parse(json), r("TopLevel"));
+    }
+
+    public static topLevelToJson(value: TopLevel): string {
+        return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+    }
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = ''): never {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "Abranchiata", js: "Abranchiata", typ: a(u(a(i(0)), i(0), null)) },
+        { json: "Andriana", js: "Andriana", typ: a(u(null, "")) },
+        { json: "Ansarie", js: "Ansarie", typ: a(u(a(i(0)), r("AnsarieClass"), null)) },
+        { json: "Chytridiaceae", js: "Chytridiaceae", typ: a(u(true, r("ChytridiaceaeClass"), null)) },
+        { json: "Discordia", js: "Discordia", typ: a(u(a(i(0)), r("DiscordiaClass"))) },
+        { json: "Endomyces", js: "Endomyces", typ: a(u(i(0), "")) },
+        { json: "Epinephelidae", js: "Epinephelidae", typ: a(u(true, i(0), "")) },
+        { json: "Eupatorium", js: "Eupatorium", typ: a(u(a(null), m(i(0)))) },
+        { json: "Gryphosaurus", js: "Gryphosaurus", typ: a(u(a(i(0)), r("GryphosaurusClass"), "")) },
+        { json: "Koryak", js: "Koryak", typ: a(u(m(u(i(0), null)), "")) },
+        { json: "Lavinia", js: "Lavinia", typ: a(u(r("LaviniaClass"), "")) },
+        { json: "Oskar", js: "Oskar", typ: a(u(a(i(0)), r("OskarClass"))) },
+        { json: "Rebecca", js: "Rebecca", typ: a(u(r("Rebecca"), i(0), "")) },
+        { json: "Rhomboganoidei", js: "Rhomboganoidei", typ: a(u(a(i(0)), r("Rebecca"), "")) },
+        { json: "Rigsmal", js: "Rigsmal", typ: true },
+        { json: "Ruellia", js: "Ruellia", typ: a(u(true, r("Rebecca"), "")) },
+        { json: "School", js: "School", typ: a(u(i(0), m(i(0)), null)) },
+        { json: "Shakespearolater", js: "Shakespearolater", typ: a(u(a(i(0)), 3.14, "")) },
+        { json: "Svan", js: "Svan", typ: a(3.14) },
+        { json: "Wayao", js: "Wayao", typ: m(3.14) },
+        { json: "academe", js: "academe", typ: a(u(a(i(0)), i(0), m(i(0)))) },
+        { json: "acquirable", js: "acquirable", typ: a(u(a(u(i(0), null)), m(i(0)))) },
+        { json: "aerometry", js: "aerometry", typ: a(u(true, 3.14)) },
+        { json: "alexin", js: "alexin", typ: a(u(a(i(0)), true)) },
+        { json: "alleviate", js: "alleviate", typ: a(u(a(u(i(0), null)), r("AlleviateClass"))) },
+        { json: "amaas", js: "amaas", typ: a(u(true, r("Rebecca"), i(0))) },
+        { json: "ambassage", js: "ambassage", typ: a(u(a(null), "")) },
+        { json: "amphithyron", js: "amphithyron", typ: a(u(r("Amphithyron"), null)) },
+        { json: "ankee", js: "ankee", typ: a(u(a(i(0)), r("AnkeeClass"), i(0))) },
+        { json: "annihilator", js: "annihilator", typ: a(u(m(u(i(0), null)), null)) },
+        { json: "annulose", js: "annulose", typ: null },
+        { json: "aphasia", js: "aphasia", typ: a(u(a(i(0)), i(0))) },
+        { json: "asprawl", js: "asprawl", typ: a(u(3.14, "")) },
+        { json: "attractive", js: "attractive", typ: a(u(true, null)) },
+        { json: "barksome", js: "barksome", typ: m(i(0)) },
+        { json: "bedesman", js: "bedesman", typ: a(u(true, 3.14, "")) },
+        { json: "belard", js: "belard", typ: a(u(a(i(0)), r("Rebecca"), 3.14)) },
+        { json: "bocking", js: "bocking", typ: a(u(a(i(0)), true, m(i(0)))) },
+        { json: "brawlingly", js: "brawlingly", typ: a(u(a(null), m(u(i(0), null)))) },
+        { json: "brookie", js: "brookie", typ: a(u(a(i(0)), r("Rebecca"))) },
+        { json: "bumboatman", js: "bumboatman", typ: a(u(a(null), null, "")) },
+        { json: "bystreet", js: "bystreet", typ: a(null) },
+        { json: "calaverite", js: "calaverite", typ: a(u(a(i(0)), "")) },
+        { json: "catallactic", js: "catallactic", typ: a(u(a(null), true, m(i(0)))) },
+        { json: "cemental", js: "cemental", typ: a(u(a(i(0)), 3.14, m(i(0)))) },
+    ], false),
+    "AnsarieClass": o([
+        { json: "Alida", js: "Alida", typ: null },
+        { json: "Ictonyx", js: "Ictonyx", typ: null },
+        { json: "Ramist", js: "Ramist", typ: null },
+        { json: "accension", js: "accension", typ: null },
+        { json: "asteria", js: "asteria", typ: null },
+        { json: "beriberic", js: "beriberic", typ: null },
+        { json: "edgebone", js: "edgebone", typ: null },
+        { json: "gastrodialysis", js: "gastrodialysis", typ: null },
+        { json: "geographic", js: "geographic", typ: null },
+        { json: "metrocele", js: "metrocele", typ: null },
+        { json: "misgraft", js: "misgraft", typ: null },
+        { json: "monteith", js: "monteith", typ: null },
+        { json: "notcher", js: "notcher", typ: null },
+        { json: "prorestriction", js: "prorestriction", typ: null },
+        { json: "throatlet", js: "throatlet", typ: null },
+        { json: "unfair", js: "unfair", typ: null },
+        { json: "unsynonymous", js: "unsynonymous", typ: null },
+        { json: "water", js: "water", typ: null },
+        { json: "zestfully", js: "zestfully", typ: null },
+        { json: "zincic", js: "zincic", typ: null },
+    ], false),
+    "ChytridiaceaeClass": o([
+        { json: "Batidaceae", js: "Batidaceae", typ: null },
+        { json: "Brechites", js: "Brechites", typ: null },
+        { json: "Emery", js: "Emery", typ: null },
+        { json: "Narraganset", js: "Narraganset", typ: null },
+        { json: "codespairer", js: "codespairer", typ: null },
+        { json: "enervative", js: "enervative", typ: null },
+        { json: "excriminate", js: "excriminate", typ: null },
+        { json: "goshenite", js: "goshenite", typ: null },
+        { json: "grime", js: "grime", typ: null },
+        { json: "gritten", js: "gritten", typ: null },
+        { json: "hectorly", js: "hectorly", typ: null },
+        { json: "intermediation", js: "intermediation", typ: null },
+        { json: "meeterly", js: "meeterly", typ: null },
+        { json: "onymatic", js: "onymatic", typ: null },
+        { json: "paddlecock", js: "paddlecock", typ: null },
+        { json: "thana", js: "thana", typ: null },
+        { json: "thornily", js: "thornily", typ: null },
+        { json: "uckia", js: "uckia", typ: null },
+        { json: "unmettle", js: "unmettle", typ: null },
+        { json: "vorticellid", js: "vorticellid", typ: null },
+    ], false),
+    "DiscordiaClass": o([
+        { json: "Altaic", js: "Altaic", typ: u(undefined, i(0)) },
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Patarin", js: "Patarin", typ: u(undefined, i(0)) },
+        { json: "amoristic", js: "amoristic", typ: u(undefined, i(0)) },
+        { json: "blennophthalmia", js: "blennophthalmia", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "disciplinability", js: "disciplinability", typ: u(undefined, i(0)) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "goofer", js: "goofer", typ: u(undefined, i(0)) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "laryngograph", js: "laryngograph", typ: u(undefined, i(0)) },
+        { json: "leucitis", js: "leucitis", typ: u(undefined, i(0)) },
+        { json: "lymphocyst", js: "lymphocyst", typ: u(undefined, i(0)) },
+        { json: "microcosmology", js: "microcosmology", typ: u(undefined, i(0)) },
+        { json: "nauseation", js: "nauseation", typ: u(undefined, i(0)) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "preliberal", js: "preliberal", typ: u(undefined, i(0)) },
+        { json: "prettifier", js: "prettifier", typ: u(undefined, i(0)) },
+        { json: "rangework", js: "rangework", typ: u(undefined, i(0)) },
+        { json: "redient", js: "redient", typ: u(undefined, i(0)) },
+        { json: "subfusiform", js: "subfusiform", typ: u(undefined, i(0)) },
+        { json: "suicidical", js: "suicidical", typ: u(undefined, i(0)) },
+        { json: "swow", js: "swow", typ: u(undefined, i(0)) },
+        { json: "wastrel", js: "wastrel", typ: u(undefined, i(0)) },
+        { json: "wingle", js: "wingle", typ: u(undefined, i(0)) },
+    ], false),
+    "GryphosaurusClass": o([
+        { json: "Burushaski", js: "Burushaski", typ: null },
+        { json: "Tahami", js: "Tahami", typ: null },
+        { json: "amissibility", js: "amissibility", typ: null },
+        { json: "citronin", js: "citronin", typ: null },
+        { json: "coplaintiff", js: "coplaintiff", typ: null },
+        { json: "disquisitionary", js: "disquisitionary", typ: null },
+        { json: "enoplan", js: "enoplan", typ: null },
+        { json: "faintness", js: "faintness", typ: null },
+        { json: "hebetomy", js: "hebetomy", typ: null },
+        { json: "islandry", js: "islandry", typ: null },
+        { json: "lameduck", js: "lameduck", typ: null },
+        { json: "overbattle", js: "overbattle", typ: null },
+        { json: "overinterested", js: "overinterested", typ: null },
+        { json: "phrenologic", js: "phrenologic", typ: null },
+        { json: "rainband", js: "rainband", typ: null },
+        { json: "shiningly", js: "shiningly", typ: null },
+        { json: "stamineous", js: "stamineous", typ: null },
+        { json: "subscapularis", js: "subscapularis", typ: null },
+        { json: "undaubed", js: "undaubed", typ: null },
+        { json: "underntime", js: "underntime", typ: null },
+    ], false),
+    "LaviniaClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Tacana", js: "Tacana", typ: u(undefined, i(0)) },
+        { json: "agitable", js: "agitable", typ: u(undefined, i(0)) },
+        { json: "asininity", js: "asininity", typ: u(undefined, i(0)) },
+        { json: "benefiter", js: "benefiter", typ: u(undefined, i(0)) },
+        { json: "bronzelike", js: "bronzelike", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "cholesteatomatous", js: "cholesteatomatous", typ: u(undefined, i(0)) },
+        { json: "deprivement", js: "deprivement", typ: u(undefined, i(0)) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "flippantness", js: "flippantness", typ: u(undefined, i(0)) },
+        { json: "fogproof", js: "fogproof", typ: u(undefined, i(0)) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "merrymeeting", js: "merrymeeting", typ: u(undefined, i(0)) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "overcareful", js: "overcareful", typ: u(undefined, i(0)) },
+        { json: "panaris", js: "panaris", typ: u(undefined, i(0)) },
+        { json: "preacceptance", js: "preacceptance", typ: u(undefined, i(0)) },
+        { json: "quinoxaline", js: "quinoxaline", typ: u(undefined, i(0)) },
+        { json: "sig", js: "sig", typ: u(undefined, i(0)) },
+        { json: "superconfusion", js: "superconfusion", typ: u(undefined, i(0)) },
+        { json: "tillotter", js: "tillotter", typ: u(undefined, i(0)) },
+        { json: "tranquillize", js: "tranquillize", typ: u(undefined, i(0)) },
+        { json: "unquestionable", js: "unquestionable", typ: u(undefined, i(0)) },
+        { json: "uproute", js: "uproute", typ: u(undefined, i(0)) },
+    ], false),
+    "OskarClass": o([
+        { json: "Acrobates", js: "Acrobates", typ: null },
+        { json: "Cayuga", js: "Cayuga", typ: null },
+        { json: "Netherlandish", js: "Netherlandish", typ: null },
+        { json: "beanshooter", js: "beanshooter", typ: null },
+        { json: "bearhound", js: "bearhound", typ: null },
+        { json: "guarneri", js: "guarneri", typ: null },
+        { json: "hypochondriacism", js: "hypochondriacism", typ: null },
+        { json: "indication", js: "indication", typ: null },
+        { json: "jaculative", js: "jaculative", typ: null },
+        { json: "nagana", js: "nagana", typ: null },
+        { json: "noctivagous", js: "noctivagous", typ: null },
+        { json: "nonphysiological", js: "nonphysiological", typ: null },
+        { json: "praxis", js: "praxis", typ: null },
+        { json: "provision", js: "provision", typ: null },
+        { json: "subterhuman", js: "subterhuman", typ: null },
+        { json: "sunlit", js: "sunlit", typ: null },
+        { json: "syncraniate", js: "syncraniate", typ: null },
+        { json: "teachment", js: "teachment", typ: null },
+        { json: "unmutinous", js: "unmutinous", typ: null },
+        { json: "unstoppable", js: "unstoppable", typ: null },
+    ], false),
+    "Rebecca": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: i(0) },
+        { json: "catharticalness", js: "catharticalness", typ: 3.14 },
+        { json: "disdiapason", js: "disdiapason", typ: "" },
+        { json: "homocerc", js: "homocerc", typ: true },
+        { json: "nonbookish", js: "nonbookish", typ: null },
+    ], false),
+    "AlleviateClass": o([
+        { json: "Hulsean", js: "Hulsean", typ: null },
+        { json: "apriori", js: "apriori", typ: null },
+        { json: "beggarer", js: "beggarer", typ: null },
+        { json: "brokenheartedly", js: "brokenheartedly", typ: null },
+        { json: "debilitation", js: "debilitation", typ: null },
+        { json: "frike", js: "frike", typ: null },
+        { json: "gastrolith", js: "gastrolith", typ: null },
+        { json: "orthocentric", js: "orthocentric", typ: null },
+        { json: "petaly", js: "petaly", typ: null },
+        { json: "probudgeting", js: "probudgeting", typ: null },
+        { json: "reacquire", js: "reacquire", typ: null },
+        { json: "scow", js: "scow", typ: null },
+        { json: "shutoff", js: "shutoff", typ: null },
+        { json: "subcontiguous", js: "subcontiguous", typ: null },
+        { json: "suffumigate", js: "suffumigate", typ: null },
+        { json: "transformable", js: "transformable", typ: null },
+        { json: "uncoroneted", js: "uncoroneted", typ: null },
+        { json: "unparking", js: "unparking", typ: null },
+        { json: "unvarnishedness", js: "unvarnishedness", typ: null },
+        { json: "wherewithal", js: "wherewithal", typ: null },
+    ], false),
+    "Amphithyron": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Juniperus", js: "Juniperus", typ: u(undefined, i(0)) },
+        { json: "Nazirite", js: "Nazirite", typ: u(undefined, i(0)) },
+        { json: "Those", js: "Those", typ: u(undefined, i(0)) },
+        { json: "akroasis", js: "akroasis", typ: u(undefined, i(0)) },
+        { json: "antiphonical", js: "antiphonical", typ: u(undefined, i(0)) },
+        { json: "basebred", js: "basebred", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "conductometric", js: "conductometric", typ: u(undefined, i(0)) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "ensilation", js: "ensilation", typ: u(undefined, i(0)) },
+        { json: "eyebolt", js: "eyebolt", typ: u(undefined, i(0)) },
+        { json: "fistulated", js: "fistulated", typ: u(undefined, i(0)) },
+        { json: "heteropod", js: "heteropod", typ: u(undefined, i(0)) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "labyrinthically", js: "labyrinthically", typ: u(undefined, i(0)) },
+        { json: "martyrization", js: "martyrization", typ: u(undefined, i(0)) },
+        { json: "mispolicy", js: "mispolicy", typ: u(undefined, i(0)) },
+        { json: "multipara", js: "multipara", typ: u(undefined, i(0)) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "possessorial", js: "possessorial", typ: u(undefined, i(0)) },
+        { json: "shamed", js: "shamed", typ: u(undefined, i(0)) },
+        { json: "shelfworn", js: "shelfworn", typ: u(undefined, i(0)) },
+        { json: "stagnum", js: "stagnum", typ: u(undefined, i(0)) },
+        { json: "undecimal", js: "undecimal", typ: u(undefined, i(0)) },
+    ], false),
+    "AnkeeClass": o([
+        { json: "Anomoean", js: "Anomoean", typ: null },
+        { json: "Naja", js: "Naja", typ: null },
+        { json: "barleyhood", js: "barleyhood", typ: null },
+        { json: "befriender", js: "befriender", typ: null },
+        { json: "brutishness", js: "brutishness", typ: null },
+        { json: "cephalalgy", js: "cephalalgy", typ: null },
+        { json: "cirurgian", js: "cirurgian", typ: null },
+        { json: "conventionally", js: "conventionally", typ: null },
+        { json: "jackshay", js: "jackshay", typ: null },
+        { json: "milammeter", js: "milammeter", typ: null },
+        { json: "ombrological", js: "ombrological", typ: null },
+        { json: "phonasthenia", js: "phonasthenia", typ: null },
+        { json: "retrievableness", js: "retrievableness", typ: null },
+        { json: "snakily", js: "snakily", typ: null },
+        { json: "swot", js: "swot", typ: null },
+        { json: "tartlet", js: "tartlet", typ: null },
+        { json: "thiofuran", js: "thiofuran", typ: null },
+        { json: "tracheophone", js: "tracheophone", typ: null },
+        { json: "tuglike", js: "tuglike", typ: null },
+        { json: "unscratchingly", js: "unscratchingly", typ: null },
+    ], false),
+};
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/prefer-unions-false--a5053c0a486d/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
index fd1800c..1672405 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
@@ -479,7 +479,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
index fd1800c..1672405 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
@@ -479,7 +479,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/readonly-true--24da4fc107df/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/readonly-true--24da4fc107df/TopLevel.ts
index a5a423e..85e19ba 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/readonly-true--24da4fc107df/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/readonly-true--24da4fc107df/TopLevel.ts
@@ -479,7 +479,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
index f1e2650..9bc85f6 100644
--- a/base/typescript/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations2.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
@@ -479,7 +479,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
index e726dc5..91fda79 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
@@ -583,7 +583,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/converters-all-objects--3a443babd1cb/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/converters-all-objects--3a443babd1cb/TopLevel.ts
index c322233..ef8844b 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/converters-all-objects--3a443babd1cb/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/converters-all-objects--3a443babd1cb/TopLevel.ts
@@ -695,7 +695,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/default/TopLevel.ts
index e726dc5..91fda79 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/default/TopLevel.ts
@@ -583,7 +583,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
index 91ddca4..942b1a8 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
@@ -583,7 +583,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/typescript/test/inputs/json/priority/combinations3.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
new file mode 100644
index 0000000..91fda79
--- /dev/null
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
@@ -0,0 +1,1016 @@
+// To parse this data:
+//
+//   import { Convert, TopLevel } from "./TopLevel";
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export interface TopLevel {
+    juror:            JurorElement[];
+    kongoni:          Kongoni[];
+    ladronism:        LadronismElement[];
+    landlubberly:     LandlubberlyElement[];
+    listener:         Listener[];
+    lupus:            LupusElement[];
+    maslin:           Maslin[];
+    monazite:         MonaziteElement[];
+    monoliteral:      Monoliteral[];
+    monotheistically: MonotheisticallyElement[];
+    montage:          Montage[];
+    moralness:        Moralness[];
+    mowra:            (MonaziteClass | null)[];
+    mulishly:         Mulishly[];
+    myoscope:         Myoscope[];
+    nach:             ((number | null)[] | null)[];
+    neuromastic:      Neuromastic[];
+    noncontributing:  Noncontributing[];
+    nonnervous:       Nonnervous[];
+    nonvaluation:     Nonvaluation[];
+    occupationalist:  OccupationalistElement[];
+    outrival:         OutrivalElement[];
+    paleographically: Paleographically[];
+    pamphletwise:     Pamphletwise[];
+    pediatrics:       Pediatric[];
+    perceptive:       boolean[];
+    piaculum:         PiaculumElement[];
+    piccadilly:       Piccadilly[];
+    piffler:          Piffler[];
+    pithful:          Pithful[];
+    placuntitis:      Placuntiti[];
+    plectopterous:    Plectopterous[];
+    pneumocele:       (Pneumocele | null)[];
+    poliorcetic:      Poliorcetic[];
+    poormaster:       Poormaster[];
+    potwhisky:        PotwhiskyElement[];
+    practicalizer:    Practicalizer[];
+    prefreshman:      PrefreshmanElement[];
+    prehensility:     Prehensility[];
+    prevoidance:      Prevoidance[];
+    probant:          { [key: string]: number | null }[];
+    protext:          Protext[];
+}
+
+export type JurorElement = boolean | JurorClass;
+
+export interface JurorClass {
+    Olea:            null;
+    adipsy:          null;
+    auxiliator:      null;
+    benda:           null;
+    benjamin:        null;
+    brandling:       null;
+    epicurishly:     null;
+    eremochaetous:   null;
+    marten:          null;
+    monocline:       null;
+    palgat:          null;
+    pennyworth:      null;
+    pioury:          null;
+    pragmatistic:    null;
+    stylelessness:   null;
+    systematical:    null;
+    thready:         null;
+    uncontemporary:  null;
+    uncouched:       null;
+    uninhabitedness: null;
+}
+
+export type Kongoni = number[] | { [key: string]: number };
+
+export type LadronismElement = LadronismClass | number | string;
+
+export interface LadronismClass {
+    Prodenia:      null;
+    acclaimer:     null;
+    achree:        null;
+    base:          null;
+    conundrumize:  null;
+    degerminator:  null;
+    describable:   null;
+    exasperatedly: null;
+    heroine:       null;
+    indazin:       null;
+    luteous:       null;
+    papular:       null;
+    pritch:        null;
+    seege:         null;
+    shopgirl:      null;
+    tragedietta:   null;
+    unsparse:      null;
+    uplook:        null;
+    vermiformis:   null;
+    whafabout:     null;
+}
+
+export type LandlubberlyElement = boolean | LandlubberlyClass | number;
+
+export interface LandlubberlyClass {
+    Amyraldism:      null;
+    acropoleis:      null;
+    aminate:         null;
+    bipenniform:     null;
+    bugre:           null;
+    calycule:        null;
+    caoutchouc:      null;
+    disprover:       null;
+    fitroot:         null;
+    fulgently:       null;
+    kickup:          null;
+    laevoversion:    null;
+    moter:           null;
+    objectivity:     null;
+    posterity:       null;
+    postnuptial:     null;
+    precedentary:    null;
+    saddling:        null;
+    subcurrent:      null;
+    unrecriminative: null;
+}
+
+export type Listener = null[] | number;
+
+export type LupusElement = LupusClass | number;
+
+export interface LupusClass {
+    Chirotherium?:    number;
+    Chlorioninae?:    number;
+    Corvinae?:        number;
+    Crassina?:        number;
+    Thysanocarpus?:   number;
+    catharticalness?: number;
+    disdiapason?:     string;
+    exiguity?:        number;
+    farcist?:         number;
+    holographical?:   number;
+    homocerc?:        boolean;
+    ichthyophagan?:   number;
+    implacable?:      number;
+    nonbookish?:      null;
+    outshiner?:       number;
+    overweather?:     number;
+    protonegroid?:    number;
+    shallowish?:      number;
+    snoke?:           number;
+    snout?:           number;
+    surveillance?:    number;
+    threshingtime?:   number;
+    unsignificantly?: number;
+    unsnap?:          number;
+    vendible?:        number;
+}
+
+export interface Maslin {
+    Alicant?:         number;
+    Bakuninist?:      null;
+    Chirotherium?:    number;
+    Dimitry?:         number;
+    antiatonement?:   null;
+    anticorrosive?:   number;
+    aphidozer?:       null;
+    be?:              number;
+    catharticalness?: number;
+    chub?:            number;
+    cuprosilicon?:    number;
+    curtailedly?:     number;
+    dellenite?:       number;
+    disdiapason?:     string;
+    edifying?:        null;
+    ethmoiditis?:     number;
+    gastralgy?:       null;
+    goatherd?:        number;
+    hammerdress?:     number;
+    hangfire?:        null;
+    homocerc?:        boolean;
+    lacunosity?:      number;
+    longiloquence?:   null;
+    mameliere?:       number;
+    motherless?:      null;
+    nonbookish?:      null;
+    noncorrodible?:   null;
+    nonsensicality?:  null;
+    oafishly?:        number;
+    pfund?:           null;
+    preadvisory?:     null;
+    retroflexed?:     null;
+    saccharulmic?:    number;
+    scowlful?:        number;
+    secluded?:        null;
+    slackage?:        null;
+    sphaeridial?:     number;
+    spondulics?:      null;
+    subsecive?:       number;
+    swellmobsman?:    null;
+    trachyglossate?:  number;
+    trialogue?:       null;
+    unassuaged?:      number;
+    ungross?:         null;
+    unjudiciously?:   null;
+}
+
+export type MonaziteElement = MonaziteClass | number;
+
+export interface MonaziteClass {
+    Chirotherium:    number;
+    catharticalness: number;
+    disdiapason:     string;
+    homocerc:        boolean;
+    nonbookish:      null;
+}
+
+export type Monoliteral = null[] | boolean;
+
+export type MonotheisticallyElement = null[] | MonotheisticallyClass;
+
+export interface MonotheisticallyClass {
+    Chirotherium?:       number;
+    blaspheme?:          null;
+    catharticalness?:    number;
+    celiosalpingectomy?: null;
+    consummativeness?:   null;
+    disdiapason?:        string;
+    egestive?:           null;
+    enchylema?:          null;
+    gasconade?:          null;
+    holidayer?:          null;
+    homocerc?:           boolean;
+    intuitionalism?:     null;
+    lophiostomate?:      null;
+    nonbookish?:         null;
+    nonvolition?:        null;
+    palatableness?:      null;
+    pimpery?:            null;
+    previolation?:       null;
+    reconveyance?:       null;
+    registership?:       null;
+    rhyacolite?:         null;
+    smithereens?:        null;
+    superedification?:   null;
+    trust?:              null;
+    whitestone?:         null;
+}
+
+export type Montage = null[] | number | string;
+
+export type Moralness = null[] | number | null;
+
+export type Mulishly = number[] | number | null;
+
+export type Myoscope = null[] | boolean | number;
+
+export type Neuromastic = null[] | number;
+
+export interface Noncontributing {
+    estevin:     string;
+    jolterhead:  number;
+    sauternes:   number;
+    sparsely:    boolean;
+    unrequested: null;
+}
+
+export type Nonnervous = boolean | number;
+
+export type Nonvaluation = null[] | boolean | number;
+
+export type OccupationalistElement = null[] | OccupationalistClass | null;
+
+export interface OccupationalistClass {
+    Chimakum:         null;
+    Fin:              null;
+    beholdable:       null;
+    brotuliform:      null;
+    doodler:          null;
+    emulsin:          null;
+    flourishing:      null;
+    flueless:         null;
+    furtively:        null;
+    gritter:          null;
+    interwish:        null;
+    monoxylic:        null;
+    myristic:         null;
+    nightwear:        null;
+    peruser:          null;
+    theoastrological: null;
+    thumby:           null;
+    tingitid:         null;
+    trailless:        null;
+    unpocketed:       null;
+}
+
+export type OutrivalElement = OutrivalClass | number | null;
+
+export interface OutrivalClass {
+    Castoroides:     null;
+    Czechoslovak:    null;
+    Lingulidae:      null;
+    adroitly:        null;
+    bridehood:       null;
+    diagenesis:      null;
+    dihexahedron:    null;
+    dopester:        null;
+    eumerism:        null;
+    flyness:         null;
+    fouler:          null;
+    laudanosine:     null;
+    minutary:        null;
+    mitra:           null;
+    opisthorchiasis: null;
+    pensively:       null;
+    pubigerous:      null;
+    rebellious:      null;
+    recodify:        null;
+    unpaced:         null;
+}
+
+export type Paleographically = number | { [key: string]: number | null };
+
+export type Pamphletwise = number | { [key: string]: number } | string;
+
+export type Pediatric = boolean | number | null;
+
+export type PiaculumElement = PiaculumClass | number;
+
+export interface PiaculumClass {
+    Chirotherium?:    number;
+    Zipper?:          number;
+    alada?:           number;
+    amphistomous?:    number;
+    boysenberry?:     number;
+    catharticalness?: number;
+    decardinalize?:   number;
+    discouragement?:  number;
+    disdiapason?:     string;
+    doitrified?:      number;
+    hexaspermous?:    number;
+    homocerc?:        boolean;
+    insinking?:       number;
+    loathfulness?:    number;
+    miasmatical?:     number;
+    neurofibril?:     number;
+    nonbookish?:      null;
+    phonendoscope?:   number;
+    pilferment?:      number;
+    predismissory?:   number;
+    preinscription?:  number;
+    quotative?:       number;
+    sienna?:          number;
+    thorax?:          number;
+    yachting?:        number;
+}
+
+export type Piccadilly = number | null | string;
+
+export type Piffler = null[] | MonaziteClass;
+
+export type Pithful = boolean | number | null;
+
+export type Placuntiti = number | { [key: string]: number };
+
+export type Plectopterous = number | { [key: string]: number };
+
+export interface Pneumocele {
+    Carbonarism?:     null;
+    Chirotherium?:    number;
+    Koniga?:          null;
+    Micky?:           null;
+    catharticalness?: number;
+    cineolic?:        null;
+    cobbly?:          null;
+    conchyliferous?:  null;
+    congregation?:    null;
+    disdiapason?:     string;
+    enterotomy?:      null;
+    entophytal?:      null;
+    fewtrils?:        null;
+    herem?:           null;
+    homocerc?:        boolean;
+    meticulosity?:    null;
+    mismarriage?:     null;
+    neurotrophic?:    null;
+    nonbookish?:      null;
+    persuasively?:    null;
+    replaceable?:     null;
+    silex?:           null;
+    taillight?:       null;
+    unjealous?:       null;
+    visitorial?:      null;
+}
+
+export type Poliorcetic = boolean | MonaziteClass;
+
+export type Poormaster = number[] | { [key: string]: number } | null;
+
+export type PotwhiskyElement = PotwhiskyClass | number | null;
+
+export interface PotwhiskyClass {
+    Euchorda:          null;
+    Yoruba:            null;
+    arciform:          null;
+    cresolin:          null;
+    disheartener:      null;
+    disproportionable: null;
+    ferryway:          null;
+    filamentiferous:   null;
+    flemish:           null;
+    forgainst:         null;
+    grainering:        null;
+    irrevoluble:       null;
+    kindredship:       null;
+    pinguitudinous:    null;
+    simpletonic:       null;
+    singsong:          null;
+    submergement:      null;
+    supraoesophagal:   null;
+    thrashel:          null;
+    tyremesis:         null;
+}
+
+export type Practicalizer = null[] | MonaziteClass | string;
+
+export type PrefreshmanElement = null[] | PrefreshmanClass | string;
+
+export interface PrefreshmanClass {
+    Dolphus:       null;
+    Ficus:         null;
+    Gemaric:       null;
+    Phaet:         null;
+    azorubine:     null;
+    choroiditis:   null;
+    coagulatory:   null;
+    cyclorama:     null;
+    duckhearted:   null;
+    jugation:      null;
+    myoliposis:    null;
+    nonnomination: null;
+    palay:         null;
+    pentactinal:   null;
+    piquant:       null;
+    registration:  null;
+    remancipation: null;
+    scutatiform:   null;
+    theodolite:    null;
+    underward:     null;
+}
+
+export type Prehensility = null[] | boolean | MonaziteClass;
+
+export type Prevoidance = number[] | MonaziteClass | number;
+
+export type Protext = number[] | boolean | MonaziteClass;
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+export class Convert {
+    public static toTopLevel(json: string): TopLevel {
+        return cast(JSON.parse(json), r("TopLevel"));
+    }
+
+    public static topLevelToJson(value: TopLevel): string {
+        return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+    }
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = ''): never {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "juror", js: "juror", typ: a(u(true, r("JurorClass"))) },
+        { json: "kongoni", js: "kongoni", typ: a(u(a(i(0)), m(i(0)))) },
+        { json: "ladronism", js: "ladronism", typ: a(u(r("LadronismClass"), 3.14, "")) },
+        { json: "landlubberly", js: "landlubberly", typ: a(u(true, r("LandlubberlyClass"), i(0))) },
+        { json: "listener", js: "listener", typ: a(u(a(null), i(0))) },
+        { json: "lupus", js: "lupus", typ: a(u(r("LupusClass"), i(0))) },
+        { json: "maslin", js: "maslin", typ: a(r("Maslin")) },
+        { json: "monazite", js: "monazite", typ: a(u(r("MonaziteClass"), 3.14)) },
+        { json: "monoliteral", js: "monoliteral", typ: a(u(a(null), true)) },
+        { json: "monotheistically", js: "monotheistically", typ: a(u(a(null), r("MonotheisticallyClass"))) },
+        { json: "montage", js: "montage", typ: a(u(a(null), 3.14, "")) },
+        { json: "moralness", js: "moralness", typ: a(u(a(null), 3.14, null)) },
+        { json: "mowra", js: "mowra", typ: a(u(r("MonaziteClass"), null)) },
+        { json: "mulishly", js: "mulishly", typ: a(u(a(i(0)), 3.14, null)) },
+        { json: "myoscope", js: "myoscope", typ: a(u(a(null), true, i(0))) },
+        { json: "nach", js: "nach", typ: a(u(a(u(i(0), null)), null)) },
+        { json: "neuromastic", js: "neuromastic", typ: a(u(a(null), 3.14)) },
+        { json: "noncontributing", js: "noncontributing", typ: a(r("Noncontributing")) },
+        { json: "nonnervous", js: "nonnervous", typ: a(u(true, i(0))) },
+        { json: "nonvaluation", js: "nonvaluation", typ: a(u(a(null), true, 3.14)) },
+        { json: "occupationalist", js: "occupationalist", typ: a(u(a(null), r("OccupationalistClass"), null)) },
+        { json: "outrival", js: "outrival", typ: a(u(r("OutrivalClass"), 3.14, null)) },
+        { json: "paleographically", js: "paleographically", typ: a(u(3.14, m(u(i(0), null)))) },
+        { json: "pamphletwise", js: "pamphletwise", typ: a(u(i(0), m(i(0)), "")) },
+        { json: "pediatrics", js: "pediatrics", typ: a(u(true, 3.14, null)) },
+        { json: "perceptive", js: "perceptive", typ: a(true) },
+        { json: "piaculum", js: "piaculum", typ: a(u(r("PiaculumClass"), 3.14)) },
+        { json: "piccadilly", js: "piccadilly", typ: a(u(3.14, null, "")) },
+        { json: "piffler", js: "piffler", typ: a(u(a(null), r("MonaziteClass"))) },
+        { json: "pithful", js: "pithful", typ: a(u(true, i(0), null)) },
+        { json: "placuntitis", js: "placuntitis", typ: a(u(i(0), m(i(0)))) },
+        { json: "plectopterous", js: "plectopterous", typ: a(u(3.14, m(i(0)))) },
+        { json: "pneumocele", js: "pneumocele", typ: a(u(r("Pneumocele"), null)) },
+        { json: "poliorcetic", js: "poliorcetic", typ: a(u(true, r("MonaziteClass"))) },
+        { json: "poormaster", js: "poormaster", typ: a(u(a(i(0)), m(i(0)), null)) },
+        { json: "potwhisky", js: "potwhisky", typ: a(u(r("PotwhiskyClass"), i(0), null)) },
+        { json: "practicalizer", js: "practicalizer", typ: a(u(a(null), r("MonaziteClass"), "")) },
+        { json: "prefreshman", js: "prefreshman", typ: a(u(a(null), r("PrefreshmanClass"), "")) },
+        { json: "prehensility", js: "prehensility", typ: a(u(a(null), true, r("MonaziteClass"))) },
+        { json: "prevoidance", js: "prevoidance", typ: a(u(a(i(0)), r("MonaziteClass"), i(0))) },
+        { json: "probant", js: "probant", typ: a(m(u(i(0), null))) },
+        { json: "protext", js: "protext", typ: a(u(a(i(0)), true, r("MonaziteClass"))) },
+    ], false),
+    "JurorClass": o([
+        { json: "Olea", js: "Olea", typ: null },
+        { json: "adipsy", js: "adipsy", typ: null },
+        { json: "auxiliator", js: "auxiliator", typ: null },
+        { json: "benda", js: "benda", typ: null },
+        { json: "benjamin", js: "benjamin", typ: null },
+        { json: "brandling", js: "brandling", typ: null },
+        { json: "epicurishly", js: "epicurishly", typ: null },
+        { json: "eremochaetous", js: "eremochaetous", typ: null },
+        { json: "marten", js: "marten", typ: null },
+        { json: "monocline", js: "monocline", typ: null },
+        { json: "palgat", js: "palgat", typ: null },
+        { json: "pennyworth", js: "pennyworth", typ: null },
+        { json: "pioury", js: "pioury", typ: null },
+        { json: "pragmatistic", js: "pragmatistic", typ: null },
+        { json: "stylelessness", js: "stylelessness", typ: null },
+        { json: "systematical", js: "systematical", typ: null },
+        { json: "thready", js: "thready", typ: null },
+        { json: "uncontemporary", js: "uncontemporary", typ: null },
+        { json: "uncouched", js: "uncouched", typ: null },
+        { json: "uninhabitedness", js: "uninhabitedness", typ: null },
+    ], false),
+    "LadronismClass": o([
+        { json: "Prodenia", js: "Prodenia", typ: null },
+        { json: "acclaimer", js: "acclaimer", typ: null },
+        { json: "achree", js: "achree", typ: null },
+        { json: "base", js: "base", typ: null },
+        { json: "conundrumize", js: "conundrumize", typ: null },
+        { json: "degerminator", js: "degerminator", typ: null },
+        { json: "describable", js: "describable", typ: null },
+        { json: "exasperatedly", js: "exasperatedly", typ: null },
+        { json: "heroine", js: "heroine", typ: null },
+        { json: "indazin", js: "indazin", typ: null },
+        { json: "luteous", js: "luteous", typ: null },
+        { json: "papular", js: "papular", typ: null },
+        { json: "pritch", js: "pritch", typ: null },
+        { json: "seege", js: "seege", typ: null },
+        { json: "shopgirl", js: "shopgirl", typ: null },
+        { json: "tragedietta", js: "tragedietta", typ: null },
+        { json: "unsparse", js: "unsparse", typ: null },
+        { json: "uplook", js: "uplook", typ: null },
+        { json: "vermiformis", js: "vermiformis", typ: null },
+        { json: "whafabout", js: "whafabout", typ: null },
+    ], false),
+    "LandlubberlyClass": o([
+        { json: "Amyraldism", js: "Amyraldism", typ: null },
+        { json: "acropoleis", js: "acropoleis", typ: null },
+        { json: "aminate", js: "aminate", typ: null },
+        { json: "bipenniform", js: "bipenniform", typ: null },
+        { json: "bugre", js: "bugre", typ: null },
+        { json: "calycule", js: "calycule", typ: null },
+        { json: "caoutchouc", js: "caoutchouc", typ: null },
+        { json: "disprover", js: "disprover", typ: null },
+        { json: "fitroot", js: "fitroot", typ: null },
+        { json: "fulgently", js: "fulgently", typ: null },
+        { json: "kickup", js: "kickup", typ: null },
+        { json: "laevoversion", js: "laevoversion", typ: null },
+        { json: "moter", js: "moter", typ: null },
+        { json: "objectivity", js: "objectivity", typ: null },
+        { json: "posterity", js: "posterity", typ: null },
+        { json: "postnuptial", js: "postnuptial", typ: null },
+        { json: "precedentary", js: "precedentary", typ: null },
+        { json: "saddling", js: "saddling", typ: null },
+        { json: "subcurrent", js: "subcurrent", typ: null },
+        { json: "unrecriminative", js: "unrecriminative", typ: null },
+    ], false),
+    "LupusClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Chlorioninae", js: "Chlorioninae", typ: u(undefined, i(0)) },
+        { json: "Corvinae", js: "Corvinae", typ: u(undefined, i(0)) },
+        { json: "Crassina", js: "Crassina", typ: u(undefined, i(0)) },
+        { json: "Thysanocarpus", js: "Thysanocarpus", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "exiguity", js: "exiguity", typ: u(undefined, i(0)) },
+        { json: "farcist", js: "farcist", typ: u(undefined, i(0)) },
+        { json: "holographical", js: "holographical", typ: u(undefined, i(0)) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "ichthyophagan", js: "ichthyophagan", typ: u(undefined, i(0)) },
+        { json: "implacable", js: "implacable", typ: u(undefined, i(0)) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "outshiner", js: "outshiner", typ: u(undefined, i(0)) },
+        { json: "overweather", js: "overweather", typ: u(undefined, i(0)) },
+        { json: "protonegroid", js: "protonegroid", typ: u(undefined, i(0)) },
+        { json: "shallowish", js: "shallowish", typ: u(undefined, i(0)) },
+        { json: "snoke", js: "snoke", typ: u(undefined, i(0)) },
+        { json: "snout", js: "snout", typ: u(undefined, i(0)) },
+        { json: "surveillance", js: "surveillance", typ: u(undefined, i(0)) },
+        { json: "threshingtime", js: "threshingtime", typ: u(undefined, i(0)) },
+        { json: "unsignificantly", js: "unsignificantly", typ: u(undefined, i(0)) },
+        { json: "unsnap", js: "unsnap", typ: u(undefined, i(0)) },
+        { json: "vendible", js: "vendible", typ: u(undefined, i(0)) },
+    ], false),
+    "Maslin": o([
+        { json: "Alicant", js: "Alicant", typ: u(undefined, i(0)) },
+        { json: "Bakuninist", js: "Bakuninist", typ: u(undefined, null) },
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Dimitry", js: "Dimitry", typ: u(undefined, i(0)) },
+        { json: "antiatonement", js: "antiatonement", typ: u(undefined, null) },
+        { json: "anticorrosive", js: "anticorrosive", typ: u(undefined, i(0)) },
+        { json: "aphidozer", js: "aphidozer", typ: u(undefined, null) },
+        { json: "be", js: "be", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "chub", js: "chub", typ: u(undefined, i(0)) },
+        { json: "cuprosilicon", js: "cuprosilicon", typ: u(undefined, i(0)) },
+        { json: "curtailedly", js: "curtailedly", typ: u(undefined, i(0)) },
+        { json: "dellenite", js: "dellenite", typ: u(undefined, i(0)) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "edifying", js: "edifying", typ: u(undefined, null) },
+        { json: "ethmoiditis", js: "ethmoiditis", typ: u(undefined, i(0)) },
+        { json: "gastralgy", js: "gastralgy", typ: u(undefined, null) },
+        { json: "goatherd", js: "goatherd", typ: u(undefined, i(0)) },
+        { json: "hammerdress", js: "hammerdress", typ: u(undefined, i(0)) },
+        { json: "hangfire", js: "hangfire", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "lacunosity", js: "lacunosity", typ: u(undefined, i(0)) },
+        { json: "longiloquence", js: "longiloquence", typ: u(undefined, null) },
+        { json: "mameliere", js: "mameliere", typ: u(undefined, i(0)) },
+        { json: "motherless", js: "motherless", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "noncorrodible", js: "noncorrodible", typ: u(undefined, null) },
+        { json: "nonsensicality", js: "nonsensicality", typ: u(undefined, null) },
+        { json: "oafishly", js: "oafishly", typ: u(undefined, i(0)) },
+        { json: "pfund", js: "pfund", typ: u(undefined, null) },
+        { json: "preadvisory", js: "preadvisory", typ: u(undefined, null) },
+        { json: "retroflexed", js: "retroflexed", typ: u(undefined, null) },
+        { json: "saccharulmic", js: "saccharulmic", typ: u(undefined, i(0)) },
+        { json: "scowlful", js: "scowlful", typ: u(undefined, i(0)) },
+        { json: "secluded", js: "secluded", typ: u(undefined, null) },
+        { json: "slackage", js: "slackage", typ: u(undefined, null) },
+        { json: "sphaeridial", js: "sphaeridial", typ: u(undefined, i(0)) },
+        { json: "spondulics", js: "spondulics", typ: u(undefined, null) },
+        { json: "subsecive", js: "subsecive", typ: u(undefined, i(0)) },
+        { json: "swellmobsman", js: "swellmobsman", typ: u(undefined, null) },
+        { json: "trachyglossate", js: "trachyglossate", typ: u(undefined, i(0)) },
+        { json: "trialogue", js: "trialogue", typ: u(undefined, null) },
+        { json: "unassuaged", js: "unassuaged", typ: u(undefined, i(0)) },
+        { json: "ungross", js: "ungross", typ: u(undefined, null) },
+        { json: "unjudiciously", js: "unjudiciously", typ: u(undefined, null) },
+    ], false),
+    "MonaziteClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: i(0) },
+        { json: "catharticalness", js: "catharticalness", typ: 3.14 },
+        { json: "disdiapason", js: "disdiapason", typ: "" },
+        { json: "homocerc", js: "homocerc", typ: true },
+        { json: "nonbookish", js: "nonbookish", typ: null },
+    ], false),
+    "MonotheisticallyClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "blaspheme", js: "blaspheme", typ: u(undefined, null) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "celiosalpingectomy", js: "celiosalpingectomy", typ: u(undefined, null) },
+        { json: "consummativeness", js: "consummativeness", typ: u(undefined, null) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "egestive", js: "egestive", typ: u(undefined, null) },
+        { json: "enchylema", js: "enchylema", typ: u(undefined, null) },
+        { json: "gasconade", js: "gasconade", typ: u(undefined, null) },
+        { json: "holidayer", js: "holidayer", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "intuitionalism", js: "intuitionalism", typ: u(undefined, null) },
+        { json: "lophiostomate", js: "lophiostomate", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "nonvolition", js: "nonvolition", typ: u(undefined, null) },
+        { json: "palatableness", js: "palatableness", typ: u(undefined, null) },
+        { json: "pimpery", js: "pimpery", typ: u(undefined, null) },
+        { json: "previolation", js: "previolation", typ: u(undefined, null) },
+        { json: "reconveyance", js: "reconveyance", typ: u(undefined, null) },
+        { json: "registership", js: "registership", typ: u(undefined, null) },
+        { json: "rhyacolite", js: "rhyacolite", typ: u(undefined, null) },
+        { json: "smithereens", js: "smithereens", typ: u(undefined, null) },
+        { json: "superedification", js: "superedification", typ: u(undefined, null) },
+        { json: "trust", js: "trust", typ: u(undefined, null) },
+        { json: "whitestone", js: "whitestone", typ: u(undefined, null) },
+    ], false),
+    "Noncontributing": o([
+        { json: "estevin", js: "estevin", typ: "" },
+        { json: "jolterhead", js: "jolterhead", typ: 3.14 },
+        { json: "sauternes", js: "sauternes", typ: i(0) },
+        { json: "sparsely", js: "sparsely", typ: true },
+        { json: "unrequested", js: "unrequested", typ: null },
+    ], false),
+    "OccupationalistClass": o([
+        { json: "Chimakum", js: "Chimakum", typ: null },
+        { json: "Fin", js: "Fin", typ: null },
+        { json: "beholdable", js: "beholdable", typ: null },
+        { json: "brotuliform", js: "brotuliform", typ: null },
+        { json: "doodler", js: "doodler", typ: null },
+        { json: "emulsin", js: "emulsin", typ: null },
+        { json: "flourishing", js: "flourishing", typ: null },
+        { json: "flueless", js: "flueless", typ: null },
+        { json: "furtively", js: "furtively", typ: null },
+        { json: "gritter", js: "gritter", typ: null },
+        { json: "interwish", js: "interwish", typ: null },
+        { json: "monoxylic", js: "monoxylic", typ: null },
+        { json: "myristic", js: "myristic", typ: null },
+        { json: "nightwear", js: "nightwear", typ: null },
+        { json: "peruser", js: "peruser", typ: null },
+        { json: "theoastrological", js: "theoastrological", typ: null },
+        { json: "thumby", js: "thumby", typ: null },
+        { json: "tingitid", js: "tingitid", typ: null },
+        { json: "trailless", js: "trailless", typ: null },
+        { json: "unpocketed", js: "unpocketed", typ: null },
+    ], false),
+    "OutrivalClass": o([
+        { json: "Castoroides", js: "Castoroides", typ: null },
+        { json: "Czechoslovak", js: "Czechoslovak", typ: null },
+        { json: "Lingulidae", js: "Lingulidae", typ: null },
+        { json: "adroitly", js: "adroitly", typ: null },
+        { json: "bridehood", js: "bridehood", typ: null },
+        { json: "diagenesis", js: "diagenesis", typ: null },
+        { json: "dihexahedron", js: "dihexahedron", typ: null },
+        { json: "dopester", js: "dopester", typ: null },
+        { json: "eumerism", js: "eumerism", typ: null },
+        { json: "flyness", js: "flyness", typ: null },
+        { json: "fouler", js: "fouler", typ: null },
+        { json: "laudanosine", js: "laudanosine", typ: null },
+        { json: "minutary", js: "minutary", typ: null },
+        { json: "mitra", js: "mitra", typ: null },
+        { json: "opisthorchiasis", js: "opisthorchiasis", typ: null },
+        { json: "pensively", js: "pensively", typ: null },
+        { json: "pubigerous", js: "pubigerous", typ: null },
+        { json: "rebellious", js: "rebellious", typ: null },
+        { json: "recodify", js: "recodify", typ: null },
+        { json: "unpaced", js: "unpaced", typ: null },
+    ], false),
+    "PiaculumClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Zipper", js: "Zipper", typ: u(undefined, i(0)) },
+        { json: "alada", js: "alada", typ: u(undefined, i(0)) },
+        { json: "amphistomous", js: "amphistomous", typ: u(undefined, i(0)) },
+        { json: "boysenberry", js: "boysenberry", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "decardinalize", js: "decardinalize", typ: u(undefined, i(0)) },
+        { json: "discouragement", js: "discouragement", typ: u(undefined, i(0)) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "doitrified", js: "doitrified", typ: u(undefined, i(0)) },
+        { json: "hexaspermous", js: "hexaspermous", typ: u(undefined, i(0)) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "insinking", js: "insinking", typ: u(undefined, i(0)) },
+        { json: "loathfulness", js: "loathfulness", typ: u(undefined, i(0)) },
+        { json: "miasmatical", js: "miasmatical", typ: u(undefined, i(0)) },
+        { json: "neurofibril", js: "neurofibril", typ: u(undefined, i(0)) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "phonendoscope", js: "phonendoscope", typ: u(undefined, i(0)) },
+        { json: "pilferment", js: "pilferment", typ: u(undefined, i(0)) },
+        { json: "predismissory", js: "predismissory", typ: u(undefined, i(0)) },
+        { json: "preinscription", js: "preinscription", typ: u(undefined, i(0)) },
+        { json: "quotative", js: "quotative", typ: u(undefined, i(0)) },
+        { json: "sienna", js: "sienna", typ: u(undefined, i(0)) },
+        { json: "thorax", js: "thorax", typ: u(undefined, i(0)) },
+        { json: "yachting", js: "yachting", typ: u(undefined, i(0)) },
+    ], false),
+    "Pneumocele": o([
+        { json: "Carbonarism", js: "Carbonarism", typ: u(undefined, null) },
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Koniga", js: "Koniga", typ: u(undefined, null) },
+        { json: "Micky", js: "Micky", typ: u(undefined, null) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "cineolic", js: "cineolic", typ: u(undefined, null) },
+        { json: "cobbly", js: "cobbly", typ: u(undefined, null) },
+        { json: "conchyliferous", js: "conchyliferous", typ: u(undefined, null) },
+        { json: "congregation", js: "congregation", typ: u(undefined, null) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "enterotomy", js: "enterotomy", typ: u(undefined, null) },
+        { json: "entophytal", js: "entophytal", typ: u(undefined, null) },
+        { json: "fewtrils", js: "fewtrils", typ: u(undefined, null) },
+        { json: "herem", js: "herem", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "meticulosity", js: "meticulosity", typ: u(undefined, null) },
+        { json: "mismarriage", js: "mismarriage", typ: u(undefined, null) },
+        { json: "neurotrophic", js: "neurotrophic", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "persuasively", js: "persuasively", typ: u(undefined, null) },
+        { json: "replaceable", js: "replaceable", typ: u(undefined, null) },
+        { json: "silex", js: "silex", typ: u(undefined, null) },
+        { json: "taillight", js: "taillight", typ: u(undefined, null) },
+        { json: "unjealous", js: "unjealous", typ: u(undefined, null) },
+        { json: "visitorial", js: "visitorial", typ: u(undefined, null) },
+    ], false),
+    "PotwhiskyClass": o([
+        { json: "Euchorda", js: "Euchorda", typ: null },
+        { json: "Yoruba", js: "Yoruba", typ: null },
+        { json: "arciform", js: "arciform", typ: null },
+        { json: "cresolin", js: "cresolin", typ: null },
+        { json: "disheartener", js: "disheartener", typ: null },
+        { json: "disproportionable", js: "disproportionable", typ: null },
+        { json: "ferryway", js: "ferryway", typ: null },
+        { json: "filamentiferous", js: "filamentiferous", typ: null },
+        { json: "flemish", js: "flemish", typ: null },
+        { json: "forgainst", js: "forgainst", typ: null },
+        { json: "grainering", js: "grainering", typ: null },
+        { json: "irrevoluble", js: "irrevoluble", typ: null },
+        { json: "kindredship", js: "kindredship", typ: null },
+        { json: "pinguitudinous", js: "pinguitudinous", typ: null },
+        { json: "simpletonic", js: "simpletonic", typ: null },
+        { json: "singsong", js: "singsong", typ: null },
+        { json: "submergement", js: "submergement", typ: null },
+        { json: "supraoesophagal", js: "supraoesophagal", typ: null },
+        { json: "thrashel", js: "thrashel", typ: null },
+        { json: "tyremesis", js: "tyremesis", typ: null },
+    ], false),
+    "PrefreshmanClass": o([
+        { json: "Dolphus", js: "Dolphus", typ: null },
+        { json: "Ficus", js: "Ficus", typ: null },
+        { json: "Gemaric", js: "Gemaric", typ: null },
+        { json: "Phaet", js: "Phaet", typ: null },
+        { json: "azorubine", js: "azorubine", typ: null },
+        { json: "choroiditis", js: "choroiditis", typ: null },
+        { json: "coagulatory", js: "coagulatory", typ: null },
+        { json: "cyclorama", js: "cyclorama", typ: null },
+        { json: "duckhearted", js: "duckhearted", typ: null },
+        { json: "jugation", js: "jugation", typ: null },
+        { json: "myoliposis", js: "myoliposis", typ: null },
+        { json: "nonnomination", js: "nonnomination", typ: null },
+        { json: "palay", js: "palay", typ: null },
+        { json: "pentactinal", js: "pentactinal", typ: null },
+        { json: "piquant", js: "piquant", typ: null },
+        { json: "registration", js: "registration", typ: null },
+        { json: "remancipation", js: "remancipation", typ: null },
+        { json: "scutatiform", js: "scutatiform", typ: null },
+        { json: "theodolite", js: "theodolite", typ: null },
+        { json: "underward", js: "underward", typ: null },
+    ], false),
+};
diff --git a/head/typescript/test/inputs/json/priority/combinations3.json/prefer-types-true--df33e18681f9/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/prefer-types-true--df33e18681f9/TopLevel.ts
new file mode 100644
index 0000000..bda7d9c
--- /dev/null
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/prefer-types-true--df33e18681f9/TopLevel.ts
@@ -0,0 +1,1016 @@
+// To parse this data:
+//
+//   import { Convert, TopLevel } from "./TopLevel";
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export type TopLevel = {
+    juror:            JurorElement[];
+    kongoni:          Kongoni[];
+    ladronism:        LadronismElement[];
+    landlubberly:     LandlubberlyElement[];
+    listener:         Listener[];
+    lupus:            LupusElement[];
+    maslin:           Maslin[];
+    monazite:         MonaziteElement[];
+    monoliteral:      Monoliteral[];
+    monotheistically: MonotheisticallyElement[];
+    montage:          Montage[];
+    moralness:        Moralness[];
+    mowra:            (MonaziteClass | null)[];
+    mulishly:         Mulishly[];
+    myoscope:         Myoscope[];
+    nach:             ((number | null)[] | null)[];
+    neuromastic:      Neuromastic[];
+    noncontributing:  Noncontributing[];
+    nonnervous:       Nonnervous[];
+    nonvaluation:     Nonvaluation[];
+    occupationalist:  OccupationalistElement[];
+    outrival:         OutrivalElement[];
+    paleographically: Paleographically[];
+    pamphletwise:     Pamphletwise[];
+    pediatrics:       Pediatric[];
+    perceptive:       boolean[];
+    piaculum:         PiaculumElement[];
+    piccadilly:       Piccadilly[];
+    piffler:          Piffler[];
+    pithful:          Pithful[];
+    placuntitis:      Placuntiti[];
+    plectopterous:    Plectopterous[];
+    pneumocele:       (Pneumocele | null)[];
+    poliorcetic:      Poliorcetic[];
+    poormaster:       Poormaster[];
+    potwhisky:        PotwhiskyElement[];
+    practicalizer:    Practicalizer[];
+    prefreshman:      PrefreshmanElement[];
+    prehensility:     Prehensility[];
+    prevoidance:      Prevoidance[];
+    probant:          { [key: string]: number | null }[];
+    protext:          Protext[];
+}
+
+export type JurorElement = boolean | JurorClass;
+
+export type JurorClass = {
+    Olea:            null;
+    adipsy:          null;
+    auxiliator:      null;
+    benda:           null;
+    benjamin:        null;
+    brandling:       null;
+    epicurishly:     null;
+    eremochaetous:   null;
+    marten:          null;
+    monocline:       null;
+    palgat:          null;
+    pennyworth:      null;
+    pioury:          null;
+    pragmatistic:    null;
+    stylelessness:   null;
+    systematical:    null;
+    thready:         null;
+    uncontemporary:  null;
+    uncouched:       null;
+    uninhabitedness: null;
+}
+
+export type Kongoni = number[] | { [key: string]: number };
+
+export type LadronismElement = LadronismClass | number | string;
+
+export type LadronismClass = {
+    Prodenia:      null;
+    acclaimer:     null;
+    achree:        null;
+    base:          null;
+    conundrumize:  null;
+    degerminator:  null;
+    describable:   null;
+    exasperatedly: null;
+    heroine:       null;
+    indazin:       null;
+    luteous:       null;
+    papular:       null;
+    pritch:        null;
+    seege:         null;
+    shopgirl:      null;
+    tragedietta:   null;
+    unsparse:      null;
+    uplook:        null;
+    vermiformis:   null;
+    whafabout:     null;
+}
+
+export type LandlubberlyElement = boolean | LandlubberlyClass | number;
+
+export type LandlubberlyClass = {
+    Amyraldism:      null;
+    acropoleis:      null;
+    aminate:         null;
+    bipenniform:     null;
+    bugre:           null;
+    calycule:        null;
+    caoutchouc:      null;
+    disprover:       null;
+    fitroot:         null;
+    fulgently:       null;
+    kickup:          null;
+    laevoversion:    null;
+    moter:           null;
+    objectivity:     null;
+    posterity:       null;
+    postnuptial:     null;
+    precedentary:    null;
+    saddling:        null;
+    subcurrent:      null;
+    unrecriminative: null;
+}
+
+export type Listener = null[] | number;
+
+export type LupusElement = LupusClass | number;
+
+export type LupusClass = {
+    Chirotherium?:    number;
+    Chlorioninae?:    number;
+    Corvinae?:        number;
+    Crassina?:        number;
+    Thysanocarpus?:   number;
+    catharticalness?: number;
+    disdiapason?:     string;
+    exiguity?:        number;
+    farcist?:         number;
+    holographical?:   number;
+    homocerc?:        boolean;
+    ichthyophagan?:   number;
+    implacable?:      number;
+    nonbookish?:      null;
+    outshiner?:       number;
+    overweather?:     number;
+    protonegroid?:    number;
+    shallowish?:      number;
+    snoke?:           number;
+    snout?:           number;
+    surveillance?:    number;
+    threshingtime?:   number;
+    unsignificantly?: number;
+    unsnap?:          number;
+    vendible?:        number;
+}
+
+export type Maslin = {
+    Alicant?:         number;
+    Bakuninist?:      null;
+    Chirotherium?:    number;
+    Dimitry?:         number;
+    antiatonement?:   null;
+    anticorrosive?:   number;
+    aphidozer?:       null;
+    be?:              number;
+    catharticalness?: number;
+    chub?:            number;
+    cuprosilicon?:    number;
+    curtailedly?:     number;
+    dellenite?:       number;
+    disdiapason?:     string;
+    edifying?:        null;
+    ethmoiditis?:     number;
+    gastralgy?:       null;
+    goatherd?:        number;
+    hammerdress?:     number;
+    hangfire?:        null;
+    homocerc?:        boolean;
+    lacunosity?:      number;
+    longiloquence?:   null;
+    mameliere?:       number;
+    motherless?:      null;
+    nonbookish?:      null;
+    noncorrodible?:   null;
+    nonsensicality?:  null;
+    oafishly?:        number;
+    pfund?:           null;
+    preadvisory?:     null;
+    retroflexed?:     null;
+    saccharulmic?:    number;
+    scowlful?:        number;
+    secluded?:        null;
+    slackage?:        null;
+    sphaeridial?:     number;
+    spondulics?:      null;
+    subsecive?:       number;
+    swellmobsman?:    null;
+    trachyglossate?:  number;
+    trialogue?:       null;
+    unassuaged?:      number;
+    ungross?:         null;
+    unjudiciously?:   null;
+}
+
+export type MonaziteElement = MonaziteClass | number;
+
+export type MonaziteClass = {
+    Chirotherium:    number;
+    catharticalness: number;
+    disdiapason:     string;
+    homocerc:        boolean;
+    nonbookish:      null;
+}
+
+export type Monoliteral = null[] | boolean;
+
+export type MonotheisticallyElement = null[] | MonotheisticallyClass;
+
+export type MonotheisticallyClass = {
+    Chirotherium?:       number;
+    blaspheme?:          null;
+    catharticalness?:    number;
+    celiosalpingectomy?: null;
+    consummativeness?:   null;
+    disdiapason?:        string;
+    egestive?:           null;
+    enchylema?:          null;
+    gasconade?:          null;
+    holidayer?:          null;
+    homocerc?:           boolean;
+    intuitionalism?:     null;
+    lophiostomate?:      null;
+    nonbookish?:         null;
+    nonvolition?:        null;
+    palatableness?:      null;
+    pimpery?:            null;
+    previolation?:       null;
+    reconveyance?:       null;
+    registership?:       null;
+    rhyacolite?:         null;
+    smithereens?:        null;
+    superedification?:   null;
+    trust?:              null;
+    whitestone?:         null;
+}
+
+export type Montage = null[] | number | string;
+
+export type Moralness = null[] | number | null;
+
+export type Mulishly = number[] | number | null;
+
+export type Myoscope = null[] | boolean | number;
+
+export type Neuromastic = null[] | number;
+
+export type Noncontributing = {
+    estevin:     string;
+    jolterhead:  number;
+    sauternes:   number;
+    sparsely:    boolean;
+    unrequested: null;
+}
+
+export type Nonnervous = boolean | number;
+
+export type Nonvaluation = null[] | boolean | number;
+
+export type OccupationalistElement = null[] | OccupationalistClass | null;
+
+export type OccupationalistClass = {
+    Chimakum:         null;
+    Fin:              null;
+    beholdable:       null;
+    brotuliform:      null;
+    doodler:          null;
+    emulsin:          null;
+    flourishing:      null;
+    flueless:         null;
+    furtively:        null;
+    gritter:          null;
+    interwish:        null;
+    monoxylic:        null;
+    myristic:         null;
+    nightwear:        null;
+    peruser:          null;
+    theoastrological: null;
+    thumby:           null;
+    tingitid:         null;
+    trailless:        null;
+    unpocketed:       null;
+}
+
+export type OutrivalElement = OutrivalClass | number | null;
+
+export type OutrivalClass = {
+    Castoroides:     null;
+    Czechoslovak:    null;
+    Lingulidae:      null;
+    adroitly:        null;
+    bridehood:       null;
+    diagenesis:      null;
+    dihexahedron:    null;
+    dopester:        null;
+    eumerism:        null;
+    flyness:         null;
+    fouler:          null;
+    laudanosine:     null;
+    minutary:        null;
+    mitra:           null;
+    opisthorchiasis: null;
+    pensively:       null;
+    pubigerous:      null;
+    rebellious:      null;
+    recodify:        null;
+    unpaced:         null;
+}
+
+export type Paleographically = number | { [key: string]: number | null };
+
+export type Pamphletwise = number | { [key: string]: number } | string;
+
+export type Pediatric = boolean | number | null;
+
+export type PiaculumElement = PiaculumClass | number;
+
+export type PiaculumClass = {
+    Chirotherium?:    number;
+    Zipper?:          number;
+    alada?:           number;
+    amphistomous?:    number;
+    boysenberry?:     number;
+    catharticalness?: number;
+    decardinalize?:   number;
+    discouragement?:  number;
+    disdiapason?:     string;
+    doitrified?:      number;
+    hexaspermous?:    number;
+    homocerc?:        boolean;
+    insinking?:       number;
+    loathfulness?:    number;
+    miasmatical?:     number;
+    neurofibril?:     number;
+    nonbookish?:      null;
+    phonendoscope?:   number;
+    pilferment?:      number;
+    predismissory?:   number;
+    preinscription?:  number;
+    quotative?:       number;
+    sienna?:          number;
+    thorax?:          number;
+    yachting?:        number;
+}
+
+export type Piccadilly = number | null | string;
+
+export type Piffler = null[] | MonaziteClass;
+
+export type Pithful = boolean | number | null;
+
+export type Placuntiti = number | { [key: string]: number };
+
+export type Plectopterous = number | { [key: string]: number };
+
+export type Pneumocele = {
+    Carbonarism?:     null;
+    Chirotherium?:    number;
+    Koniga?:          null;
+    Micky?:           null;
+    catharticalness?: number;
+    cineolic?:        null;
+    cobbly?:          null;
+    conchyliferous?:  null;
+    congregation?:    null;
+    disdiapason?:     string;
+    enterotomy?:      null;
+    entophytal?:      null;
+    fewtrils?:        null;
+    herem?:           null;
+    homocerc?:        boolean;
+    meticulosity?:    null;
+    mismarriage?:     null;
+    neurotrophic?:    null;
+    nonbookish?:      null;
+    persuasively?:    null;
+    replaceable?:     null;
+    silex?:           null;
+    taillight?:       null;
+    unjealous?:       null;
+    visitorial?:      null;
+}
+
+export type Poliorcetic = boolean | MonaziteClass;
+
+export type Poormaster = number[] | { [key: string]: number } | null;
+
+export type PotwhiskyElement = PotwhiskyClass | number | null;
+
+export type PotwhiskyClass = {
+    Euchorda:          null;
+    Yoruba:            null;
+    arciform:          null;
+    cresolin:          null;
+    disheartener:      null;
+    disproportionable: null;
+    ferryway:          null;
+    filamentiferous:   null;
+    flemish:           null;
+    forgainst:         null;
+    grainering:        null;
+    irrevoluble:       null;
+    kindredship:       null;
+    pinguitudinous:    null;
+    simpletonic:       null;
+    singsong:          null;
+    submergement:      null;
+    supraoesophagal:   null;
+    thrashel:          null;
+    tyremesis:         null;
+}
+
+export type Practicalizer = null[] | MonaziteClass | string;
+
+export type PrefreshmanElement = null[] | PrefreshmanClass | string;
+
+export type PrefreshmanClass = {
+    Dolphus:       null;
+    Ficus:         null;
+    Gemaric:       null;
+    Phaet:         null;
+    azorubine:     null;
+    choroiditis:   null;
+    coagulatory:   null;
+    cyclorama:     null;
+    duckhearted:   null;
+    jugation:      null;
+    myoliposis:    null;
+    nonnomination: null;
+    palay:         null;
+    pentactinal:   null;
+    piquant:       null;
+    registration:  null;
+    remancipation: null;
+    scutatiform:   null;
+    theodolite:    null;
+    underward:     null;
+}
+
+export type Prehensility = null[] | boolean | MonaziteClass;
+
+export type Prevoidance = number[] | MonaziteClass | number;
+
+export type Protext = number[] | boolean | MonaziteClass;
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+export class Convert {
+    public static toTopLevel(json: string): TopLevel {
+        return cast(JSON.parse(json), r("TopLevel"));
+    }
+
+    public static topLevelToJson(value: TopLevel): string {
+        return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+    }
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = ''): never {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "juror", js: "juror", typ: a(u(true, r("JurorClass"))) },
+        { json: "kongoni", js: "kongoni", typ: a(u(a(i(0)), m(i(0)))) },
+        { json: "ladronism", js: "ladronism", typ: a(u(r("LadronismClass"), 3.14, "")) },
+        { json: "landlubberly", js: "landlubberly", typ: a(u(true, r("LandlubberlyClass"), i(0))) },
+        { json: "listener", js: "listener", typ: a(u(a(null), i(0))) },
+        { json: "lupus", js: "lupus", typ: a(u(r("LupusClass"), i(0))) },
+        { json: "maslin", js: "maslin", typ: a(r("Maslin")) },
+        { json: "monazite", js: "monazite", typ: a(u(r("MonaziteClass"), 3.14)) },
+        { json: "monoliteral", js: "monoliteral", typ: a(u(a(null), true)) },
+        { json: "monotheistically", js: "monotheistically", typ: a(u(a(null), r("MonotheisticallyClass"))) },
+        { json: "montage", js: "montage", typ: a(u(a(null), 3.14, "")) },
+        { json: "moralness", js: "moralness", typ: a(u(a(null), 3.14, null)) },
+        { json: "mowra", js: "mowra", typ: a(u(r("MonaziteClass"), null)) },
+        { json: "mulishly", js: "mulishly", typ: a(u(a(i(0)), 3.14, null)) },
+        { json: "myoscope", js: "myoscope", typ: a(u(a(null), true, i(0))) },
+        { json: "nach", js: "nach", typ: a(u(a(u(i(0), null)), null)) },
+        { json: "neuromastic", js: "neuromastic", typ: a(u(a(null), 3.14)) },
+        { json: "noncontributing", js: "noncontributing", typ: a(r("Noncontributing")) },
+        { json: "nonnervous", js: "nonnervous", typ: a(u(true, i(0))) },
+        { json: "nonvaluation", js: "nonvaluation", typ: a(u(a(null), true, 3.14)) },
+        { json: "occupationalist", js: "occupationalist", typ: a(u(a(null), r("OccupationalistClass"), null)) },
+        { json: "outrival", js: "outrival", typ: a(u(r("OutrivalClass"), 3.14, null)) },
+        { json: "paleographically", js: "paleographically", typ: a(u(3.14, m(u(i(0), null)))) },
+        { json: "pamphletwise", js: "pamphletwise", typ: a(u(i(0), m(i(0)), "")) },
+        { json: "pediatrics", js: "pediatrics", typ: a(u(true, 3.14, null)) },
+        { json: "perceptive", js: "perceptive", typ: a(true) },
+        { json: "piaculum", js: "piaculum", typ: a(u(r("PiaculumClass"), 3.14)) },
+        { json: "piccadilly", js: "piccadilly", typ: a(u(3.14, null, "")) },
+        { json: "piffler", js: "piffler", typ: a(u(a(null), r("MonaziteClass"))) },
+        { json: "pithful", js: "pithful", typ: a(u(true, i(0), null)) },
+        { json: "placuntitis", js: "placuntitis", typ: a(u(i(0), m(i(0)))) },
+        { json: "plectopterous", js: "plectopterous", typ: a(u(3.14, m(i(0)))) },
+        { json: "pneumocele", js: "pneumocele", typ: a(u(r("Pneumocele"), null)) },
+        { json: "poliorcetic", js: "poliorcetic", typ: a(u(true, r("MonaziteClass"))) },
+        { json: "poormaster", js: "poormaster", typ: a(u(a(i(0)), m(i(0)), null)) },
+        { json: "potwhisky", js: "potwhisky", typ: a(u(r("PotwhiskyClass"), i(0), null)) },
+        { json: "practicalizer", js: "practicalizer", typ: a(u(a(null), r("MonaziteClass"), "")) },
+        { json: "prefreshman", js: "prefreshman", typ: a(u(a(null), r("PrefreshmanClass"), "")) },
+        { json: "prehensility", js: "prehensility", typ: a(u(a(null), true, r("MonaziteClass"))) },
+        { json: "prevoidance", js: "prevoidance", typ: a(u(a(i(0)), r("MonaziteClass"), i(0))) },
+        { json: "probant", js: "probant", typ: a(m(u(i(0), null))) },
+        { json: "protext", js: "protext", typ: a(u(a(i(0)), true, r("MonaziteClass"))) },
+    ], false),
+    "JurorClass": o([
+        { json: "Olea", js: "Olea", typ: null },
+        { json: "adipsy", js: "adipsy", typ: null },
+        { json: "auxiliator", js: "auxiliator", typ: null },
+        { json: "benda", js: "benda", typ: null },
+        { json: "benjamin", js: "benjamin", typ: null },
+        { json: "brandling", js: "brandling", typ: null },
+        { json: "epicurishly", js: "epicurishly", typ: null },
+        { json: "eremochaetous", js: "eremochaetous", typ: null },
+        { json: "marten", js: "marten", typ: null },
+        { json: "monocline", js: "monocline", typ: null },
+        { json: "palgat", js: "palgat", typ: null },
+        { json: "pennyworth", js: "pennyworth", typ: null },
+        { json: "pioury", js: "pioury", typ: null },
+        { json: "pragmatistic", js: "pragmatistic", typ: null },
+        { json: "stylelessness", js: "stylelessness", typ: null },
+        { json: "systematical", js: "systematical", typ: null },
+        { json: "thready", js: "thready", typ: null },
+        { json: "uncontemporary", js: "uncontemporary", typ: null },
+        { json: "uncouched", js: "uncouched", typ: null },
+        { json: "uninhabitedness", js: "uninhabitedness", typ: null },
+    ], false),
+    "LadronismClass": o([
+        { json: "Prodenia", js: "Prodenia", typ: null },
+        { json: "acclaimer", js: "acclaimer", typ: null },
+        { json: "achree", js: "achree", typ: null },
+        { json: "base", js: "base", typ: null },
+        { json: "conundrumize", js: "conundrumize", typ: null },
+        { json: "degerminator", js: "degerminator", typ: null },
+        { json: "describable", js: "describable", typ: null },
+        { json: "exasperatedly", js: "exasperatedly", typ: null },
+        { json: "heroine", js: "heroine", typ: null },
+        { json: "indazin", js: "indazin", typ: null },
+        { json: "luteous", js: "luteous", typ: null },
+        { json: "papular", js: "papular", typ: null },
+        { json: "pritch", js: "pritch", typ: null },
+        { json: "seege", js: "seege", typ: null },
+        { json: "shopgirl", js: "shopgirl", typ: null },
+        { json: "tragedietta", js: "tragedietta", typ: null },
+        { json: "unsparse", js: "unsparse", typ: null },
+        { json: "uplook", js: "uplook", typ: null },
+        { json: "vermiformis", js: "vermiformis", typ: null },
+        { json: "whafabout", js: "whafabout", typ: null },
+    ], false),
+    "LandlubberlyClass": o([
+        { json: "Amyraldism", js: "Amyraldism", typ: null },
+        { json: "acropoleis", js: "acropoleis", typ: null },
+        { json: "aminate", js: "aminate", typ: null },
+        { json: "bipenniform", js: "bipenniform", typ: null },
+        { json: "bugre", js: "bugre", typ: null },
+        { json: "calycule", js: "calycule", typ: null },
+        { json: "caoutchouc", js: "caoutchouc", typ: null },
+        { json: "disprover", js: "disprover", typ: null },
+        { json: "fitroot", js: "fitroot", typ: null },
+        { json: "fulgently", js: "fulgently", typ: null },
+        { json: "kickup", js: "kickup", typ: null },
+        { json: "laevoversion", js: "laevoversion", typ: null },
+        { json: "moter", js: "moter", typ: null },
+        { json: "objectivity", js: "objectivity", typ: null },
+        { json: "posterity", js: "posterity", typ: null },
+        { json: "postnuptial", js: "postnuptial", typ: null },
+        { json: "precedentary", js: "precedentary", typ: null },
+        { json: "saddling", js: "saddling", typ: null },
+        { json: "subcurrent", js: "subcurrent", typ: null },
+        { json: "unrecriminative", js: "unrecriminative", typ: null },
+    ], false),
+    "LupusClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Chlorioninae", js: "Chlorioninae", typ: u(undefined, i(0)) },
+        { json: "Corvinae", js: "Corvinae", typ: u(undefined, i(0)) },
+        { json: "Crassina", js: "Crassina", typ: u(undefined, i(0)) },
+        { json: "Thysanocarpus", js: "Thysanocarpus", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "exiguity", js: "exiguity", typ: u(undefined, i(0)) },
+        { json: "farcist", js: "farcist", typ: u(undefined, i(0)) },
+        { json: "holographical", js: "holographical", typ: u(undefined, i(0)) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "ichthyophagan", js: "ichthyophagan", typ: u(undefined, i(0)) },
+        { json: "implacable", js: "implacable", typ: u(undefined, i(0)) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "outshiner", js: "outshiner", typ: u(undefined, i(0)) },
+        { json: "overweather", js: "overweather", typ: u(undefined, i(0)) },
+        { json: "protonegroid", js: "protonegroid", typ: u(undefined, i(0)) },
+        { json: "shallowish", js: "shallowish", typ: u(undefined, i(0)) },
+        { json: "snoke", js: "snoke", typ: u(undefined, i(0)) },
+        { json: "snout", js: "snout", typ: u(undefined, i(0)) },
+        { json: "surveillance", js: "surveillance", typ: u(undefined, i(0)) },
+        { json: "threshingtime", js: "threshingtime", typ: u(undefined, i(0)) },
+        { json: "unsignificantly", js: "unsignificantly", typ: u(undefined, i(0)) },
+        { json: "unsnap", js: "unsnap", typ: u(undefined, i(0)) },
+        { json: "vendible", js: "vendible", typ: u(undefined, i(0)) },
+    ], false),
+    "Maslin": o([
+        { json: "Alicant", js: "Alicant", typ: u(undefined, i(0)) },
+        { json: "Bakuninist", js: "Bakuninist", typ: u(undefined, null) },
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Dimitry", js: "Dimitry", typ: u(undefined, i(0)) },
+        { json: "antiatonement", js: "antiatonement", typ: u(undefined, null) },
+        { json: "anticorrosive", js: "anticorrosive", typ: u(undefined, i(0)) },
+        { json: "aphidozer", js: "aphidozer", typ: u(undefined, null) },
+        { json: "be", js: "be", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "chub", js: "chub", typ: u(undefined, i(0)) },
+        { json: "cuprosilicon", js: "cuprosilicon", typ: u(undefined, i(0)) },
+        { json: "curtailedly", js: "curtailedly", typ: u(undefined, i(0)) },
+        { json: "dellenite", js: "dellenite", typ: u(undefined, i(0)) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "edifying", js: "edifying", typ: u(undefined, null) },
+        { json: "ethmoiditis", js: "ethmoiditis", typ: u(undefined, i(0)) },
+        { json: "gastralgy", js: "gastralgy", typ: u(undefined, null) },
+        { json: "goatherd", js: "goatherd", typ: u(undefined, i(0)) },
+        { json: "hammerdress", js: "hammerdress", typ: u(undefined, i(0)) },
+        { json: "hangfire", js: "hangfire", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "lacunosity", js: "lacunosity", typ: u(undefined, i(0)) },
+        { json: "longiloquence", js: "longiloquence", typ: u(undefined, null) },
+        { json: "mameliere", js: "mameliere", typ: u(undefined, i(0)) },
+        { json: "motherless", js: "motherless", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "noncorrodible", js: "noncorrodible", typ: u(undefined, null) },
+        { json: "nonsensicality", js: "nonsensicality", typ: u(undefined, null) },
+        { json: "oafishly", js: "oafishly", typ: u(undefined, i(0)) },
+        { json: "pfund", js: "pfund", typ: u(undefined, null) },
+        { json: "preadvisory", js: "preadvisory", typ: u(undefined, null) },
+        { json: "retroflexed", js: "retroflexed", typ: u(undefined, null) },
+        { json: "saccharulmic", js: "saccharulmic", typ: u(undefined, i(0)) },
+        { json: "scowlful", js: "scowlful", typ: u(undefined, i(0)) },
+        { json: "secluded", js: "secluded", typ: u(undefined, null) },
+        { json: "slackage", js: "slackage", typ: u(undefined, null) },
+        { json: "sphaeridial", js: "sphaeridial", typ: u(undefined, i(0)) },
+        { json: "spondulics", js: "spondulics", typ: u(undefined, null) },
+        { json: "subsecive", js: "subsecive", typ: u(undefined, i(0)) },
+        { json: "swellmobsman", js: "swellmobsman", typ: u(undefined, null) },
+        { json: "trachyglossate", js: "trachyglossate", typ: u(undefined, i(0)) },
+        { json: "trialogue", js: "trialogue", typ: u(undefined, null) },
+        { json: "unassuaged", js: "unassuaged", typ: u(undefined, i(0)) },
+        { json: "ungross", js: "ungross", typ: u(undefined, null) },
+        { json: "unjudiciously", js: "unjudiciously", typ: u(undefined, null) },
+    ], false),
+    "MonaziteClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: i(0) },
+        { json: "catharticalness", js: "catharticalness", typ: 3.14 },
+        { json: "disdiapason", js: "disdiapason", typ: "" },
+        { json: "homocerc", js: "homocerc", typ: true },
+        { json: "nonbookish", js: "nonbookish", typ: null },
+    ], false),
+    "MonotheisticallyClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "blaspheme", js: "blaspheme", typ: u(undefined, null) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "celiosalpingectomy", js: "celiosalpingectomy", typ: u(undefined, null) },
+        { json: "consummativeness", js: "consummativeness", typ: u(undefined, null) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "egestive", js: "egestive", typ: u(undefined, null) },
+        { json: "enchylema", js: "enchylema", typ: u(undefined, null) },
+        { json: "gasconade", js: "gasconade", typ: u(undefined, null) },
+        { json: "holidayer", js: "holidayer", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "intuitionalism", js: "intuitionalism", typ: u(undefined, null) },
+        { json: "lophiostomate", js: "lophiostomate", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "nonvolition", js: "nonvolition", typ: u(undefined, null) },
+        { json: "palatableness", js: "palatableness", typ: u(undefined, null) },
+        { json: "pimpery", js: "pimpery", typ: u(undefined, null) },
+        { json: "previolation", js: "previolation", typ: u(undefined, null) },
+        { json: "reconveyance", js: "reconveyance", typ: u(undefined, null) },
+        { json: "registership", js: "registership", typ: u(undefined, null) },
+        { json: "rhyacolite", js: "rhyacolite", typ: u(undefined, null) },
+        { json: "smithereens", js: "smithereens", typ: u(undefined, null) },
+        { json: "superedification", js: "superedification", typ: u(undefined, null) },
+        { json: "trust", js: "trust", typ: u(undefined, null) },
+        { json: "whitestone", js: "whitestone", typ: u(undefined, null) },
+    ], false),
+    "Noncontributing": o([
+        { json: "estevin", js: "estevin", typ: "" },
+        { json: "jolterhead", js: "jolterhead", typ: 3.14 },
+        { json: "sauternes", js: "sauternes", typ: i(0) },
+        { json: "sparsely", js: "sparsely", typ: true },
+        { json: "unrequested", js: "unrequested", typ: null },
+    ], false),
+    "OccupationalistClass": o([
+        { json: "Chimakum", js: "Chimakum", typ: null },
+        { json: "Fin", js: "Fin", typ: null },
+        { json: "beholdable", js: "beholdable", typ: null },
+        { json: "brotuliform", js: "brotuliform", typ: null },
+        { json: "doodler", js: "doodler", typ: null },
+        { json: "emulsin", js: "emulsin", typ: null },
+        { json: "flourishing", js: "flourishing", typ: null },
+        { json: "flueless", js: "flueless", typ: null },
+        { json: "furtively", js: "furtively", typ: null },
+        { json: "gritter", js: "gritter", typ: null },
+        { json: "interwish", js: "interwish", typ: null },
+        { json: "monoxylic", js: "monoxylic", typ: null },
+        { json: "myristic", js: "myristic", typ: null },
+        { json: "nightwear", js: "nightwear", typ: null },
+        { json: "peruser", js: "peruser", typ: null },
+        { json: "theoastrological", js: "theoastrological", typ: null },
+        { json: "thumby", js: "thumby", typ: null },
+        { json: "tingitid", js: "tingitid", typ: null },
+        { json: "trailless", js: "trailless", typ: null },
+        { json: "unpocketed", js: "unpocketed", typ: null },
+    ], false),
+    "OutrivalClass": o([
+        { json: "Castoroides", js: "Castoroides", typ: null },
+        { json: "Czechoslovak", js: "Czechoslovak", typ: null },
+        { json: "Lingulidae", js: "Lingulidae", typ: null },
+        { json: "adroitly", js: "adroitly", typ: null },
+        { json: "bridehood", js: "bridehood", typ: null },
+        { json: "diagenesis", js: "diagenesis", typ: null },
+        { json: "dihexahedron", js: "dihexahedron", typ: null },
+        { json: "dopester", js: "dopester", typ: null },
+        { json: "eumerism", js: "eumerism", typ: null },
+        { json: "flyness", js: "flyness", typ: null },
+        { json: "fouler", js: "fouler", typ: null },
+        { json: "laudanosine", js: "laudanosine", typ: null },
+        { json: "minutary", js: "minutary", typ: null },
+        { json: "mitra", js: "mitra", typ: null },
+        { json: "opisthorchiasis", js: "opisthorchiasis", typ: null },
+        { json: "pensively", js: "pensively", typ: null },
+        { json: "pubigerous", js: "pubigerous", typ: null },
+        { json: "rebellious", js: "rebellious", typ: null },
+        { json: "recodify", js: "recodify", typ: null },
+        { json: "unpaced", js: "unpaced", typ: null },
+    ], false),
+    "PiaculumClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Zipper", js: "Zipper", typ: u(undefined, i(0)) },
+        { json: "alada", js: "alada", typ: u(undefined, i(0)) },
+        { json: "amphistomous", js: "amphistomous", typ: u(undefined, i(0)) },
+        { json: "boysenberry", js: "boysenberry", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "decardinalize", js: "decardinalize", typ: u(undefined, i(0)) },
+        { json: "discouragement", js: "discouragement", typ: u(undefined, i(0)) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "doitrified", js: "doitrified", typ: u(undefined, i(0)) },
+        { json: "hexaspermous", js: "hexaspermous", typ: u(undefined, i(0)) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "insinking", js: "insinking", typ: u(undefined, i(0)) },
+        { json: "loathfulness", js: "loathfulness", typ: u(undefined, i(0)) },
+        { json: "miasmatical", js: "miasmatical", typ: u(undefined, i(0)) },
+        { json: "neurofibril", js: "neurofibril", typ: u(undefined, i(0)) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "phonendoscope", js: "phonendoscope", typ: u(undefined, i(0)) },
+        { json: "pilferment", js: "pilferment", typ: u(undefined, i(0)) },
+        { json: "predismissory", js: "predismissory", typ: u(undefined, i(0)) },
+        { json: "preinscription", js: "preinscription", typ: u(undefined, i(0)) },
+        { json: "quotative", js: "quotative", typ: u(undefined, i(0)) },
+        { json: "sienna", js: "sienna", typ: u(undefined, i(0)) },
+        { json: "thorax", js: "thorax", typ: u(undefined, i(0)) },
+        { json: "yachting", js: "yachting", typ: u(undefined, i(0)) },
+    ], false),
+    "Pneumocele": o([
+        { json: "Carbonarism", js: "Carbonarism", typ: u(undefined, null) },
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Koniga", js: "Koniga", typ: u(undefined, null) },
+        { json: "Micky", js: "Micky", typ: u(undefined, null) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "cineolic", js: "cineolic", typ: u(undefined, null) },
+        { json: "cobbly", js: "cobbly", typ: u(undefined, null) },
+        { json: "conchyliferous", js: "conchyliferous", typ: u(undefined, null) },
+        { json: "congregation", js: "congregation", typ: u(undefined, null) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "enterotomy", js: "enterotomy", typ: u(undefined, null) },
+        { json: "entophytal", js: "entophytal", typ: u(undefined, null) },
+        { json: "fewtrils", js: "fewtrils", typ: u(undefined, null) },
+        { json: "herem", js: "herem", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "meticulosity", js: "meticulosity", typ: u(undefined, null) },
+        { json: "mismarriage", js: "mismarriage", typ: u(undefined, null) },
+        { json: "neurotrophic", js: "neurotrophic", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "persuasively", js: "persuasively", typ: u(undefined, null) },
+        { json: "replaceable", js: "replaceable", typ: u(undefined, null) },
+        { json: "silex", js: "silex", typ: u(undefined, null) },
+        { json: "taillight", js: "taillight", typ: u(undefined, null) },
+        { json: "unjealous", js: "unjealous", typ: u(undefined, null) },
+        { json: "visitorial", js: "visitorial", typ: u(undefined, null) },
+    ], false),
+    "PotwhiskyClass": o([
+        { json: "Euchorda", js: "Euchorda", typ: null },
+        { json: "Yoruba", js: "Yoruba", typ: null },
+        { json: "arciform", js: "arciform", typ: null },
+        { json: "cresolin", js: "cresolin", typ: null },
+        { json: "disheartener", js: "disheartener", typ: null },
+        { json: "disproportionable", js: "disproportionable", typ: null },
+        { json: "ferryway", js: "ferryway", typ: null },
+        { json: "filamentiferous", js: "filamentiferous", typ: null },
+        { json: "flemish", js: "flemish", typ: null },
+        { json: "forgainst", js: "forgainst", typ: null },
+        { json: "grainering", js: "grainering", typ: null },
+        { json: "irrevoluble", js: "irrevoluble", typ: null },
+        { json: "kindredship", js: "kindredship", typ: null },
+        { json: "pinguitudinous", js: "pinguitudinous", typ: null },
+        { json: "simpletonic", js: "simpletonic", typ: null },
+        { json: "singsong", js: "singsong", typ: null },
+        { json: "submergement", js: "submergement", typ: null },
+        { json: "supraoesophagal", js: "supraoesophagal", typ: null },
+        { json: "thrashel", js: "thrashel", typ: null },
+        { json: "tyremesis", js: "tyremesis", typ: null },
+    ], false),
+    "PrefreshmanClass": o([
+        { json: "Dolphus", js: "Dolphus", typ: null },
+        { json: "Ficus", js: "Ficus", typ: null },
+        { json: "Gemaric", js: "Gemaric", typ: null },
+        { json: "Phaet", js: "Phaet", typ: null },
+        { json: "azorubine", js: "azorubine", typ: null },
+        { json: "choroiditis", js: "choroiditis", typ: null },
+        { json: "coagulatory", js: "coagulatory", typ: null },
+        { json: "cyclorama", js: "cyclorama", typ: null },
+        { json: "duckhearted", js: "duckhearted", typ: null },
+        { json: "jugation", js: "jugation", typ: null },
+        { json: "myoliposis", js: "myoliposis", typ: null },
+        { json: "nonnomination", js: "nonnomination", typ: null },
+        { json: "palay", js: "palay", typ: null },
+        { json: "pentactinal", js: "pentactinal", typ: null },
+        { json: "piquant", js: "piquant", typ: null },
+        { json: "registration", js: "registration", typ: null },
+        { json: "remancipation", js: "remancipation", typ: null },
+        { json: "scutatiform", js: "scutatiform", typ: null },
+        { json: "theodolite", js: "theodolite", typ: null },
+        { json: "underward", js: "underward", typ: null },
+    ], false),
+};
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/prefer-unions-false--a5053c0a486d/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
index e726dc5..91fda79 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
@@ -583,7 +583,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
index e726dc5..91fda79 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
@@ -583,7 +583,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/readonly-true--24da4fc107df/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/readonly-true--24da4fc107df/TopLevel.ts
index d74d207..682231e 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/readonly-true--24da4fc107df/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/readonly-true--24da4fc107df/TopLevel.ts
@@ -583,7 +583,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
index fa4dd36..346b59c 100644
--- a/base/typescript/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations3.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
@@ -583,7 +583,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
index bcc98d6..45c706b 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/acronym-style-pascal--d9e0c1bd777a/TopLevel.ts
@@ -653,7 +653,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/converters-all-objects--3a443babd1cb/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/converters-all-objects--3a443babd1cb/TopLevel.ts
index 880e87a..7a91ed4 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/converters-all-objects--3a443babd1cb/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/converters-all-objects--3a443babd1cb/TopLevel.ts
@@ -781,7 +781,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/default/TopLevel.ts
index bcc98d6..45c706b 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/default/TopLevel.ts
@@ -653,7 +653,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
index 998f2fa..86c59b2 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/nice-property-names-true--f4d7920ee2ce/TopLevel.ts
@@ -653,7 +653,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/typescript/test/inputs/json/priority/combinations4.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
new file mode 100644
index 0000000..45c706b
--- /dev/null
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/prefer-const-values-true--6b26e4d1265c/TopLevel.ts
@@ -0,0 +1,1140 @@
+// To parse this data:
+//
+//   import { Convert, TopLevel } from "./TopLevel";
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export interface TopLevel {
+    protrusive:         Protrusive[];
+    pulpitism:          PulpitismElement[];
+    pyodermia:          PyodermiaElement[];
+    quebrachine:        QuebrachineElement[];
+    querier:            Querier[];
+    rebarbative:        Rebarbative[];
+    reimagine:          Reimagine[];
+    ressaut:            Ressaut;
+    retrocervical:      Retrocervical[];
+    revert:             Revert[];
+    rewrite:            RewriteElement[];
+    saccoderm:          Saccoderm[];
+    santir:             SantirElement[];
+    saprophilous:       Saprophilous[];
+    saxten:             SaxtenElement[];
+    scatty:             (Scatty | null)[];
+    scoffer:            Scoffer[];
+    scrampum:           Scrampum[];
+    semantic:           number;
+    serpentinic:        Serpentinic[];
+    shadowable:         Shadowable[];
+    sistering:          SisteringElement[];
+    staghunting:        Staghunting[];
+    stagmometer:        Stagmometer[];
+    stimulability:      Stimulability[];
+    strangleable:       Strangleable[];
+    strenuosity:        StrenuosityElement[];
+    tabaxir:            Tabaxir[];
+    talpiform:          Talpiform[];
+    thwack:             Thwack[];
+    to:                 (number | null)[];
+    tortricine:         Tortricine[];
+    truantcy:           TruantcyElement[];
+    turgesce:           string[];
+    unbeginning:        Unbeginning[];
+    underdunged:        number[];
+    undesirability:     Undesirability[];
+    unerasing:          Unerasing[];
+    unguentarium:       Unguentarium[];
+    unimpeachably:      UnimpeachablyElement[];
+    unmortgaged:        Unmortgaged[];
+    unobstructed:       Unobstructed[];
+    unreceptivity:      Unreceptivity[];
+    unsatisfactoriness: Unsatisfactoriness[];
+    unsecurity:         number[];
+    unstressed:         UnstressedElement[];
+    untasked:           Untasked[];
+    unvarying:          Unvarying[];
+    vehemently:         Vehemently[];
+    warriorship:        { [key: string]: boolean };
+    whitepot:           Whitepot[];
+    wrothy:             WrothyElement[];
+}
+
+export type Protrusive = (number | null)[] | number;
+
+export type PulpitismElement = number[] | PulpitismClass | number;
+
+export interface PulpitismClass {
+    abnet:           null;
+    buckhorn:        null;
+    calciform:       null;
+    chelophore:      null;
+    cogitation:      null;
+    decreeable:      null;
+    despicable:      null;
+    isodiazo:        null;
+    jadedly:         null;
+    leptochlorite:   null;
+    nursling:        null;
+    palamedean:      null;
+    photoheliograph: null;
+    pipewood:        null;
+    roberd:          null;
+    statable:        null;
+    superassume:     null;
+    syllabe:         null;
+    toughhead:       null;
+    underburn:       null;
+}
+
+export type PyodermiaElement = PyodermiaClass | number;
+
+export interface PyodermiaClass {
+    Gyppo:          null;
+    aphoristically: null;
+    apophyllous:    null;
+    cognize:        null;
+    dermonosology:  null;
+    ither:          null;
+    juglandaceous:  null;
+    litho:          null;
+    macropterous:   null;
+    photographer:   null;
+    romancing:      null;
+    rumness:        null;
+    somniloquist:   null;
+    stressfully:    null;
+    tactically:     null;
+    tracheophony:   null;
+    unappositely:   null;
+    unclothedly:    null;
+    unimplied:      null;
+    unsyncopated:   null;
+}
+
+export type QuebrachineElement = boolean | QuebrachineClass | null;
+
+export interface QuebrachineClass {
+    Chirotherium:    number;
+    catharticalness: number;
+    disdiapason:     string;
+    homocerc:        boolean;
+    nonbookish:      null;
+}
+
+export type Querier = boolean | { [key: string]: number };
+
+export type Rebarbative = number[] | boolean | number;
+
+export interface Reimagine {
+    Chirotherium?:    number;
+    Hermo?:           null;
+    adducible?:       null;
+    anabolin?:        null;
+    brainy?:          null;
+    catharticalness?: number;
+    chrysamine?:      null;
+    disdiapason?:     string;
+    fluxweed?:        null;
+    glaucine?:        null;
+    grobianism?:      null;
+    hieroglyphist?:   null;
+    homocerc?:        boolean;
+    icteroid?:        null;
+    immortal?:        null;
+    impetulant?:      null;
+    irrigate?:        null;
+    myxedema?:        null;
+    nonbookish?:      null;
+    onyx?:            null;
+    repasser?:        null;
+    septomarginal?:   null;
+    subdie?:          null;
+    tibiometatarsal?: null;
+    waltzlike?:       null;
+}
+
+export interface Ressaut {
+    Freesia:         string;
+    Genevieve:       string;
+    Mimosaceae:      string;
+    Theopaschitism:  string;
+    apperceptive:    string;
+    cuttoo:          string;
+    douser:          string;
+    drinkproof:      string;
+    forementioned:   string;
+    hyperdiabolical: string;
+    hypocone:        string;
+    irreverentially: string;
+    jumart:          string;
+    mollicrush:      string;
+    nedder:          string;
+    retinasphalt:    string;
+    sough:           string;
+    steading:        string;
+    undurableness:   string;
+    unmingleable:    string;
+}
+
+export type Retrocervical = (number | null)[] | number;
+
+export type Revert = boolean | string;
+
+export type RewriteElement = null[] | RewriteClass | number;
+
+export interface RewriteClass {
+    Hyades:           null;
+    Ptenoglossa:      null;
+    Whiggification:   null;
+    accountancy:      null;
+    cacotrophic:      null;
+    contest:          null;
+    couthily:         null;
+    falculate:        null;
+    foreseize:        null;
+    lemnad:           null;
+    monotheistically: null;
+    nonflying:        null;
+    repatch:          null;
+    rodman:           null;
+    strung:           null;
+    titmal:           null;
+    twalpennyworth:   null;
+    unblamable:       null;
+    vertical:         null;
+    yardman:          null;
+}
+
+export type Saccoderm = number[] | null | string;
+
+export type SantirElement = SantirClass | number;
+
+export interface SantirClass {
+    Suessiones:      null;
+    admiredly:       null;
+    demicaponier:    null;
+    epitympanic:     null;
+    investitor:      null;
+    lupiform:        null;
+    monoflagellate:  null;
+    paleoethnic:     null;
+    prediscountable: null;
+    rhetoricals:     null;
+    roomth:          null;
+    saccharose:      null;
+    septonasal:      null;
+    serpenticide:    null;
+    setarious:       null;
+    spaework:        null;
+    stylite:         null;
+    timelily:        null;
+    unprofaned:      null;
+    vorticular:      null;
+}
+
+export type Saprophilous = { [key: string]: number } | null | string;
+
+export type SaxtenElement = SaxtenClass | string;
+
+export interface SaxtenClass {
+    Centaurid?:       null;
+    Chirotherium?:    number;
+    algarrobilla?:    null;
+    bowgrace?:        null;
+    catharticalness?: number;
+    disdiapason?:     string;
+    flix?:            null;
+    germanely?:       null;
+    homocerc?:        boolean;
+    inhume?:          null;
+    lepidote?:        null;
+    megalochirous?:   null;
+    ninepenny?:       null;
+    nonbookish?:      null;
+    nondeist?:        null;
+    nymphaeaceous?:   null;
+    parietofrontal?:  null;
+    sancyite?:        null;
+    subjectivist?:    null;
+    tibiad?:          null;
+    transonic?:       null;
+    tripetalous?:     null;
+    trunchman?:       null;
+    urger?:           null;
+    withdrawnness?:   null;
+}
+
+export interface Scatty {
+    Tabasco:            null;
+    aeriferous:         null;
+    antical:            null;
+    antighostism:       null;
+    arcanum:            null;
+    autotrophy:         null;
+    baronial:           null;
+    caffeine:           null;
+    gorgoniacean:       null;
+    heroical:           null;
+    hydropical:         null;
+    mechanology:        null;
+    musicopoetic:       null;
+    officiality:        null;
+    oftentimes:         null;
+    ophthalmotonometer: null;
+    reflectively:       null;
+    springer:           null;
+    teleianthous:       null;
+    uncombated:         null;
+}
+
+export type Scoffer = null[] | { [key: string]: number } | null;
+
+export type Scrampum = number[] | boolean | null;
+
+export type Serpentinic = number[] | number;
+
+export type Shadowable = (number | null)[] | boolean;
+
+export type SisteringElement = null[] | SisteringClass | number;
+
+export interface SisteringClass {
+    Chianti:          null;
+    Haplomi:          null;
+    Micropterygidae:  null;
+    amphicarpic:      null;
+    frigorific:       null;
+    hyperkinesis:     null;
+    laudable:         null;
+    madwoman:         null;
+    maimedly:         null;
+    microrhabdus:     null;
+    nondense:         null;
+    phlebemphraxis:   null;
+    redsear:          null;
+    schismatical:     null;
+    tartryl:          null;
+    unabhorred:       null;
+    undeliberateness: null;
+    unmixable:        null;
+    untruckling:      null;
+    vineal:           null;
+}
+
+export interface Staghunting {
+    Chirotherium?:       number;
+    calorimetric?:       number;
+    canid?:              number;
+    catharticalness?:    number;
+    disdiapason?:        string;
+    ditriglyphic?:       number;
+    floriferousness?:    number;
+    gamelike?:           number;
+    grig?:               number;
+    homocerc?:           boolean;
+    interloan?:          number;
+    lithotomy?:          number;
+    loric?:              number;
+    membranocoriaceous?: number;
+    membranogenic?:      number;
+    nonbookish?:         null;
+    overtrump?:          number;
+    scotino?:            number;
+    seasonable?:         number;
+    sephen?:             number;
+    stigmarioid?:        number;
+    tired?:              number;
+    trifid?:             number;
+    undefeatedly?:       number;
+    ungirlish?:          number;
+}
+
+export type Stagmometer = (number | null)[] | string;
+
+export type Stimulability = boolean | number | { [key: string]: number };
+
+export type Strangleable = null[] | number;
+
+export type StrenuosityElement = null[] | StrenuosityClass;
+
+export interface StrenuosityClass {
+    Chirotherium?:    number;
+    Onopordon?:       number;
+    Sodomite?:        number;
+    Yankeeist?:       number;
+    bliss?:           number;
+    buccate?:         number;
+    bulletproof?:     number;
+    catharticalness?: number;
+    crumblingness?:   number;
+    disdiapason?:     string;
+    engagedly?:       number;
+    fightable?:       number;
+    hoariness?:       number;
+    homocerc?:        boolean;
+    hypopodium?:      number;
+    luxurist?:        number;
+    mechanician?:     number;
+    nonbookish?:      null;
+    podgily?:         number;
+    reformableness?:  number;
+    scatterbrains?:   number;
+    seminuria?:       number;
+    tramp?:           number;
+    undueness?:       number;
+    worthily?:        number;
+}
+
+export type Tabaxir = boolean | number;
+
+export type Talpiform = QuebrachineClass | number | null;
+
+export type Thwack = boolean | QuebrachineClass | number;
+
+export type Tortricine = (number | null)[] | QuebrachineClass;
+
+export type TruantcyElement = boolean | TruantcyClass;
+
+export interface TruantcyClass {
+    Chirotherium?:    number;
+    Epeira?:          null;
+    Eurylaimi?:       null;
+    Yuman?:           null;
+    alfiona?:         null;
+    ascaridiasis?:    null;
+    bungey?:          null;
+    catharticalness?: number;
+    ceroxyle?:        null;
+    chorology?:       null;
+    disdiapason?:     string;
+    enmarble?:        null;
+    germination?:     null;
+    hallelujah?:      null;
+    homocerc?:        boolean;
+    lev?:             null;
+    mouthing?:        null;
+    nonbookish?:      null;
+    philliloo?:       null;
+    planetal?:        null;
+    poney?:           null;
+    punctualist?:     null;
+    returnlessly?:    null;
+    skelder?:         null;
+    windwaywardly?:   null;
+}
+
+export type Unbeginning = null[] | { [key: string]: number } | string;
+
+export type Undesirability = number[] | { [key: string]: number } | string;
+
+export type Unerasing = null[] | number | { [key: string]: number };
+
+export type Unguentarium = null[] | number | null;
+
+export type UnimpeachablyElement = boolean | UnimpeachablyClass;
+
+export interface UnimpeachablyClass {
+    Bobadil?:            number;
+    Chirotherium?:       number;
+    Quiina?:             number;
+    Robert?:             number;
+    acerin?:             number;
+    catharticalness?:    number;
+    chlorophylligenous?: number;
+    conversational?:     number;
+    demiowl?:            number;
+    disdiapason?:        string;
+    ectorhinal?:         number;
+    gamblesomeness?:     number;
+    homocerc?:           boolean;
+    irrorate?:           number;
+    kindergartening?:    number;
+    lateritic?:          number;
+    mespil?:             number;
+    misconfiguration?:   number;
+    nonbookish?:         null;
+    planometry?:         number;
+    rot?:                number;
+    subcinctorium?:      number;
+    tussocker?:          number;
+    ultraproud?:         number;
+    unsuggestedness?:    number;
+}
+
+export type Unmortgaged = number | { [key: string]: number } | null;
+
+export type Unobstructed = QuebrachineClass | number | null;
+
+export type Unreceptivity = null[] | number | string;
+
+export type Unsatisfactoriness = number[] | boolean | number;
+
+export type UnstressedElement = boolean | UnstressedClass | string;
+
+export interface UnstressedClass {
+    Alain:           null;
+    Amphirhina:      null;
+    Lincolnian:      null;
+    Sarcophilus:     null;
+    antimachinery:   null;
+    coldish:         null;
+    crantara:        null;
+    distinguishing:  null;
+    elytroposis:     null;
+    gentianwort:     null;
+    heliosis:        null;
+    instrumental:    null;
+    introinflection: null;
+    kala:            null;
+    metad:           null;
+    swingingly:      null;
+    unconformity:    null;
+    undecreed:       null;
+    venerable:       null;
+    vowellessness:   null;
+}
+
+export type Untasked = null[] | number | { [key: string]: number };
+
+export type Unvarying = boolean | number | { [key: string]: number };
+
+export type Vehemently = null[] | boolean | null;
+
+export type Whitepot = QuebrachineClass | number;
+
+export type WrothyElement = null[] | WrothyClass;
+
+export interface WrothyClass {
+    Aeschynanthus:    null;
+    Ephesine:         null;
+    aquiferous:       null;
+    cheapener:        null;
+    enumeration:      null;
+    escadrille:       null;
+    estrous:          null;
+    interestedly:     null;
+    katakinetomer:    null;
+    mortification:    null;
+    morula:           null;
+    orthosymmetrical: null;
+    overbark:         null;
+    politist:         null;
+    qualified:        null;
+    sphenomalar:      null;
+    throatful:        null;
+    transhumance:     null;
+    triandrian:       null;
+    unbooked:         null;
+}
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+export class Convert {
+    public static toTopLevel(json: string): TopLevel {
+        return cast(JSON.parse(json), r("TopLevel"));
+    }
+
+    public static topLevelToJson(value: TopLevel): string {
+        return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+    }
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = ''): never {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "protrusive", js: "protrusive", typ: a(u(a(u(i(0), null)), 3.14)) },
+        { json: "pulpitism", js: "pulpitism", typ: a(u(a(i(0)), r("PulpitismClass"), 3.14)) },
+        { json: "pyodermia", js: "pyodermia", typ: a(u(r("PyodermiaClass"), i(0))) },
+        { json: "quebrachine", js: "quebrachine", typ: a(u(true, r("QuebrachineClass"), null)) },
+        { json: "querier", js: "querier", typ: a(u(true, m(i(0)))) },
+        { json: "rebarbative", js: "rebarbative", typ: a(u(a(i(0)), true, 3.14)) },
+        { json: "reimagine", js: "reimagine", typ: a(r("Reimagine")) },
+        { json: "ressaut", js: "ressaut", typ: r("Ressaut") },
+        { json: "retrocervical", js: "retrocervical", typ: a(u(a(u(i(0), null)), i(0))) },
+        { json: "revert", js: "revert", typ: a(u(true, "")) },
+        { json: "rewrite", js: "rewrite", typ: a(u(a(null), r("RewriteClass"), 3.14)) },
+        { json: "saccoderm", js: "saccoderm", typ: a(u(a(i(0)), null, "")) },
+        { json: "santir", js: "santir", typ: a(u(r("SantirClass"), 3.14)) },
+        { json: "saprophilous", js: "saprophilous", typ: a(u(m(i(0)), null, "")) },
+        { json: "saxten", js: "saxten", typ: a(u(r("SaxtenClass"), "")) },
+        { json: "scatty", js: "scatty", typ: a(u(r("Scatty"), null)) },
+        { json: "scoffer", js: "scoffer", typ: a(u(a(null), m(i(0)), null)) },
+        { json: "scrampum", js: "scrampum", typ: a(u(a(i(0)), true, null)) },
+        { json: "semantic", js: "semantic", typ: 3.14 },
+        { json: "serpentinic", js: "serpentinic", typ: a(u(a(i(0)), 3.14)) },
+        { json: "shadowable", js: "shadowable", typ: a(u(a(u(i(0), null)), true)) },
+        { json: "sistering", js: "sistering", typ: a(u(a(null), r("SisteringClass"), i(0))) },
+        { json: "staghunting", js: "staghunting", typ: a(r("Staghunting")) },
+        { json: "stagmometer", js: "stagmometer", typ: a(u(a(u(i(0), null)), "")) },
+        { json: "stimulability", js: "stimulability", typ: a(u(true, i(0), m(i(0)))) },
+        { json: "strangleable", js: "strangleable", typ: a(u(a(null), 3.14)) },
+        { json: "strenuosity", js: "strenuosity", typ: a(u(a(null), r("StrenuosityClass"))) },
+        { json: "tabaxir", js: "tabaxir", typ: a(u(true, 3.14)) },
+        { json: "talpiform", js: "talpiform", typ: a(u(r("QuebrachineClass"), 3.14, null)) },
+        { json: "thwack", js: "thwack", typ: a(u(true, r("QuebrachineClass"), 3.14)) },
+        { json: "to", js: "to", typ: a(u(3.14, null)) },
+        { json: "tortricine", js: "tortricine", typ: a(u(a(u(i(0), null)), r("QuebrachineClass"))) },
+        { json: "truantcy", js: "truantcy", typ: a(u(true, r("TruantcyClass"))) },
+        { json: "turgesce", js: "turgesce", typ: a("") },
+        { json: "unbeginning", js: "unbeginning", typ: a(u(a(null), m(i(0)), "")) },
+        { json: "underdunged", js: "underdunged", typ: a(3.14) },
+        { json: "undesirability", js: "undesirability", typ: a(u(a(i(0)), m(i(0)), "")) },
+        { json: "unerasing", js: "unerasing", typ: a(u(a(null), i(0), m(i(0)))) },
+        { json: "unguentarium", js: "unguentarium", typ: a(u(a(null), i(0), null)) },
+        { json: "unimpeachably", js: "unimpeachably", typ: a(u(true, r("UnimpeachablyClass"))) },
+        { json: "unmortgaged", js: "unmortgaged", typ: a(u(3.14, m(i(0)), null)) },
+        { json: "unobstructed", js: "unobstructed", typ: a(u(r("QuebrachineClass"), i(0), null)) },
+        { json: "unreceptivity", js: "unreceptivity", typ: a(u(a(null), i(0), "")) },
+        { json: "unsatisfactoriness", js: "unsatisfactoriness", typ: a(u(a(i(0)), true, i(0))) },
+        { json: "unsecurity", js: "unsecurity", typ: a(i(0)) },
+        { json: "unstressed", js: "unstressed", typ: a(u(true, r("UnstressedClass"), "")) },
+        { json: "untasked", js: "untasked", typ: a(u(a(null), 3.14, m(i(0)))) },
+        { json: "unvarying", js: "unvarying", typ: a(u(true, 3.14, m(i(0)))) },
+        { json: "vehemently", js: "vehemently", typ: a(u(a(null), true, null)) },
+        { json: "warriorship", js: "warriorship", typ: m(true) },
+        { json: "whitepot", js: "whitepot", typ: a(u(r("QuebrachineClass"), 3.14)) },
+        { json: "wrothy", js: "wrothy", typ: a(u(a(null), r("WrothyClass"))) },
+    ], false),
+    "PulpitismClass": o([
+        { json: "abnet", js: "abnet", typ: null },
+        { json: "buckhorn", js: "buckhorn", typ: null },
+        { json: "calciform", js: "calciform", typ: null },
+        { json: "chelophore", js: "chelophore", typ: null },
+        { json: "cogitation", js: "cogitation", typ: null },
+        { json: "decreeable", js: "decreeable", typ: null },
+        { json: "despicable", js: "despicable", typ: null },
+        { json: "isodiazo", js: "isodiazo", typ: null },
+        { json: "jadedly", js: "jadedly", typ: null },
+        { json: "leptochlorite", js: "leptochlorite", typ: null },
+        { json: "nursling", js: "nursling", typ: null },
+        { json: "palamedean", js: "palamedean", typ: null },
+        { json: "photoheliograph", js: "photoheliograph", typ: null },
+        { json: "pipewood", js: "pipewood", typ: null },
+        { json: "roberd", js: "roberd", typ: null },
+        { json: "statable", js: "statable", typ: null },
+        { json: "superassume", js: "superassume", typ: null },
+        { json: "syllabe", js: "syllabe", typ: null },
+        { json: "toughhead", js: "toughhead", typ: null },
+        { json: "underburn", js: "underburn", typ: null },
+    ], false),
+    "PyodermiaClass": o([
+        { json: "Gyppo", js: "Gyppo", typ: null },
+        { json: "aphoristically", js: "aphoristically", typ: null },
+        { json: "apophyllous", js: "apophyllous", typ: null },
+        { json: "cognize", js: "cognize", typ: null },
+        { json: "dermonosology", js: "dermonosology", typ: null },
+        { json: "ither", js: "ither", typ: null },
+        { json: "juglandaceous", js: "juglandaceous", typ: null },
+        { json: "litho", js: "litho", typ: null },
+        { json: "macropterous", js: "macropterous", typ: null },
+        { json: "photographer", js: "photographer", typ: null },
+        { json: "romancing", js: "romancing", typ: null },
+        { json: "rumness", js: "rumness", typ: null },
+        { json: "somniloquist", js: "somniloquist", typ: null },
+        { json: "stressfully", js: "stressfully", typ: null },
+        { json: "tactically", js: "tactically", typ: null },
+        { json: "tracheophony", js: "tracheophony", typ: null },
+        { json: "unappositely", js: "unappositely", typ: null },
+        { json: "unclothedly", js: "unclothedly", typ: null },
+        { json: "unimplied", js: "unimplied", typ: null },
+        { json: "unsyncopated", js: "unsyncopated", typ: null },
+    ], false),
+    "QuebrachineClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: i(0) },
+        { json: "catharticalness", js: "catharticalness", typ: 3.14 },
+        { json: "disdiapason", js: "disdiapason", typ: "" },
+        { json: "homocerc", js: "homocerc", typ: true },
+        { json: "nonbookish", js: "nonbookish", typ: null },
+    ], false),
+    "Reimagine": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Hermo", js: "Hermo", typ: u(undefined, null) },
+        { json: "adducible", js: "adducible", typ: u(undefined, null) },
+        { json: "anabolin", js: "anabolin", typ: u(undefined, null) },
+        { json: "brainy", js: "brainy", typ: u(undefined, null) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "chrysamine", js: "chrysamine", typ: u(undefined, null) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "fluxweed", js: "fluxweed", typ: u(undefined, null) },
+        { json: "glaucine", js: "glaucine", typ: u(undefined, null) },
+        { json: "grobianism", js: "grobianism", typ: u(undefined, null) },
+        { json: "hieroglyphist", js: "hieroglyphist", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "icteroid", js: "icteroid", typ: u(undefined, null) },
+        { json: "immortal", js: "immortal", typ: u(undefined, null) },
+        { json: "impetulant", js: "impetulant", typ: u(undefined, null) },
+        { json: "irrigate", js: "irrigate", typ: u(undefined, null) },
+        { json: "myxedema", js: "myxedema", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "onyx", js: "onyx", typ: u(undefined, null) },
+        { json: "repasser", js: "repasser", typ: u(undefined, null) },
+        { json: "septomarginal", js: "septomarginal", typ: u(undefined, null) },
+        { json: "subdie", js: "subdie", typ: u(undefined, null) },
+        { json: "tibiometatarsal", js: "tibiometatarsal", typ: u(undefined, null) },
+        { json: "waltzlike", js: "waltzlike", typ: u(undefined, null) },
+    ], false),
+    "Ressaut": o([
+        { json: "Freesia", js: "Freesia", typ: "" },
+        { json: "Genevieve", js: "Genevieve", typ: "" },
+        { json: "Mimosaceae", js: "Mimosaceae", typ: "" },
+        { json: "Theopaschitism", js: "Theopaschitism", typ: "" },
+        { json: "apperceptive", js: "apperceptive", typ: "" },
+        { json: "cuttoo", js: "cuttoo", typ: "" },
+        { json: "douser", js: "douser", typ: "" },
+        { json: "drinkproof", js: "drinkproof", typ: "" },
+        { json: "forementioned", js: "forementioned", typ: "" },
+        { json: "hyperdiabolical", js: "hyperdiabolical", typ: "" },
+        { json: "hypocone", js: "hypocone", typ: "" },
+        { json: "irreverentially", js: "irreverentially", typ: "" },
+        { json: "jumart", js: "jumart", typ: "" },
+        { json: "mollicrush", js: "mollicrush", typ: "" },
+        { json: "nedder", js: "nedder", typ: "" },
+        { json: "retinasphalt", js: "retinasphalt", typ: "" },
+        { json: "sough", js: "sough", typ: "" },
+        { json: "steading", js: "steading", typ: "" },
+        { json: "undurableness", js: "undurableness", typ: "" },
+        { json: "unmingleable", js: "unmingleable", typ: "" },
+    ], false),
+    "RewriteClass": o([
+        { json: "Hyades", js: "Hyades", typ: null },
+        { json: "Ptenoglossa", js: "Ptenoglossa", typ: null },
+        { json: "Whiggification", js: "Whiggification", typ: null },
+        { json: "accountancy", js: "accountancy", typ: null },
+        { json: "cacotrophic", js: "cacotrophic", typ: null },
+        { json: "contest", js: "contest", typ: null },
+        { json: "couthily", js: "couthily", typ: null },
+        { json: "falculate", js: "falculate", typ: null },
+        { json: "foreseize", js: "foreseize", typ: null },
+        { json: "lemnad", js: "lemnad", typ: null },
+        { json: "monotheistically", js: "monotheistically", typ: null },
+        { json: "nonflying", js: "nonflying", typ: null },
+        { json: "repatch", js: "repatch", typ: null },
+        { json: "rodman", js: "rodman", typ: null },
+        { json: "strung", js: "strung", typ: null },
+        { json: "titmal", js: "titmal", typ: null },
+        { json: "twalpennyworth", js: "twalpennyworth", typ: null },
+        { json: "unblamable", js: "unblamable", typ: null },
+        { json: "vertical", js: "vertical", typ: null },
+        { json: "yardman", js: "yardman", typ: null },
+    ], false),
+    "SantirClass": o([
+        { json: "Suessiones", js: "Suessiones", typ: null },
+        { json: "admiredly", js: "admiredly", typ: null },
+        { json: "demicaponier", js: "demicaponier", typ: null },
+        { json: "epitympanic", js: "epitympanic", typ: null },
+        { json: "investitor", js: "investitor", typ: null },
+        { json: "lupiform", js: "lupiform", typ: null },
+        { json: "monoflagellate", js: "monoflagellate", typ: null },
+        { json: "paleoethnic", js: "paleoethnic", typ: null },
+        { json: "prediscountable", js: "prediscountable", typ: null },
+        { json: "rhetoricals", js: "rhetoricals", typ: null },
+        { json: "roomth", js: "roomth", typ: null },
+        { json: "saccharose", js: "saccharose", typ: null },
+        { json: "septonasal", js: "septonasal", typ: null },
+        { json: "serpenticide", js: "serpenticide", typ: null },
+        { json: "setarious", js: "setarious", typ: null },
+        { json: "spaework", js: "spaework", typ: null },
+        { json: "stylite", js: "stylite", typ: null },
+        { json: "timelily", js: "timelily", typ: null },
+        { json: "unprofaned", js: "unprofaned", typ: null },
+        { json: "vorticular", js: "vorticular", typ: null },
+    ], false),
+    "SaxtenClass": o([
+        { json: "Centaurid", js: "Centaurid", typ: u(undefined, null) },
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "algarrobilla", js: "algarrobilla", typ: u(undefined, null) },
+        { json: "bowgrace", js: "bowgrace", typ: u(undefined, null) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "flix", js: "flix", typ: u(undefined, null) },
+        { json: "germanely", js: "germanely", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "inhume", js: "inhume", typ: u(undefined, null) },
+        { json: "lepidote", js: "lepidote", typ: u(undefined, null) },
+        { json: "megalochirous", js: "megalochirous", typ: u(undefined, null) },
+        { json: "ninepenny", js: "ninepenny", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "nondeist", js: "nondeist", typ: u(undefined, null) },
+        { json: "nymphaeaceous", js: "nymphaeaceous", typ: u(undefined, null) },
+        { json: "parietofrontal", js: "parietofrontal", typ: u(undefined, null) },
+        { json: "sancyite", js: "sancyite", typ: u(undefined, null) },
+        { json: "subjectivist", js: "subjectivist", typ: u(undefined, null) },
+        { json: "tibiad", js: "tibiad", typ: u(undefined, null) },
+        { json: "transonic", js: "transonic", typ: u(undefined, null) },
+        { json: "tripetalous", js: "tripetalous", typ: u(undefined, null) },
+        { json: "trunchman", js: "trunchman", typ: u(undefined, null) },
+        { json: "urger", js: "urger", typ: u(undefined, null) },
+        { json: "withdrawnness", js: "withdrawnness", typ: u(undefined, null) },
+    ], false),
+    "Scatty": o([
+        { json: "Tabasco", js: "Tabasco", typ: null },
+        { json: "aeriferous", js: "aeriferous", typ: null },
+        { json: "antical", js: "antical", typ: null },
+        { json: "antighostism", js: "antighostism", typ: null },
+        { json: "arcanum", js: "arcanum", typ: null },
+        { json: "autotrophy", js: "autotrophy", typ: null },
+        { json: "baronial", js: "baronial", typ: null },
+        { json: "caffeine", js: "caffeine", typ: null },
+        { json: "gorgoniacean", js: "gorgoniacean", typ: null },
+        { json: "heroical", js: "heroical", typ: null },
+        { json: "hydropical", js: "hydropical", typ: null },
+        { json: "mechanology", js: "mechanology", typ: null },
+        { json: "musicopoetic", js: "musicopoetic", typ: null },
+        { json: "officiality", js: "officiality", typ: null },
+        { json: "oftentimes", js: "oftentimes", typ: null },
+        { json: "ophthalmotonometer", js: "ophthalmotonometer", typ: null },
+        { json: "reflectively", js: "reflectively", typ: null },
+        { json: "springer", js: "springer", typ: null },
+        { json: "teleianthous", js: "teleianthous", typ: null },
+        { json: "uncombated", js: "uncombated", typ: null },
+    ], false),
+    "SisteringClass": o([
+        { json: "Chianti", js: "Chianti", typ: null },
+        { json: "Haplomi", js: "Haplomi", typ: null },
+        { json: "Micropterygidae", js: "Micropterygidae", typ: null },
+        { json: "amphicarpic", js: "amphicarpic", typ: null },
+        { json: "frigorific", js: "frigorific", typ: null },
+        { json: "hyperkinesis", js: "hyperkinesis", typ: null },
+        { json: "laudable", js: "laudable", typ: null },
+        { json: "madwoman", js: "madwoman", typ: null },
+        { json: "maimedly", js: "maimedly", typ: null },
+        { json: "microrhabdus", js: "microrhabdus", typ: null },
+        { json: "nondense", js: "nondense", typ: null },
+        { json: "phlebemphraxis", js: "phlebemphraxis", typ: null },
+        { json: "redsear", js: "redsear", typ: null },
+        { json: "schismatical", js: "schismatical", typ: null },
+        { json: "tartryl", js: "tartryl", typ: null },
+        { json: "unabhorred", js: "unabhorred", typ: null },
+        { json: "undeliberateness", js: "undeliberateness", typ: null },
+        { json: "unmixable", js: "unmixable", typ: null },
+        { json: "untruckling", js: "untruckling", typ: null },
+        { json: "vineal", js: "vineal", typ: null },
+    ], false),
+    "Staghunting": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "calorimetric", js: "calorimetric", typ: u(undefined, i(0)) },
+        { json: "canid", js: "canid", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "ditriglyphic", js: "ditriglyphic", typ: u(undefined, i(0)) },
+        { json: "floriferousness", js: "floriferousness", typ: u(undefined, i(0)) },
+        { json: "gamelike", js: "gamelike", typ: u(undefined, i(0)) },
+        { json: "grig", js: "grig", typ: u(undefined, i(0)) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "interloan", js: "interloan", typ: u(undefined, i(0)) },
+        { json: "lithotomy", js: "lithotomy", typ: u(undefined, i(0)) },
+        { json: "loric", js: "loric", typ: u(undefined, i(0)) },
+        { json: "membranocoriaceous", js: "membranocoriaceous", typ: u(undefined, i(0)) },
+        { json: "membranogenic", js: "membranogenic", typ: u(undefined, i(0)) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "overtrump", js: "overtrump", typ: u(undefined, i(0)) },
+        { json: "scotino", js: "scotino", typ: u(undefined, i(0)) },
+        { json: "seasonable", js: "seasonable", typ: u(undefined, i(0)) },
+        { json: "sephen", js: "sephen", typ: u(undefined, i(0)) },
+        { json: "stigmarioid", js: "stigmarioid", typ: u(undefined, i(0)) },
+        { json: "tired", js: "tired", typ: u(undefined, i(0)) },
+        { json: "trifid", js: "trifid", typ: u(undefined, i(0)) },
+        { json: "undefeatedly", js: "undefeatedly", typ: u(undefined, i(0)) },
+        { json: "ungirlish", js: "ungirlish", typ: u(undefined, i(0)) },
+    ], false),
+    "StrenuosityClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Onopordon", js: "Onopordon", typ: u(undefined, i(0)) },
+        { json: "Sodomite", js: "Sodomite", typ: u(undefined, i(0)) },
+        { json: "Yankeeist", js: "Yankeeist", typ: u(undefined, i(0)) },
+        { json: "bliss", js: "bliss", typ: u(undefined, i(0)) },
+        { json: "buccate", js: "buccate", typ: u(undefined, i(0)) },
+        { json: "bulletproof", js: "bulletproof", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "crumblingness", js: "crumblingness", typ: u(undefined, i(0)) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "engagedly", js: "engagedly", typ: u(undefined, i(0)) },
+        { json: "fightable", js: "fightable", typ: u(undefined, i(0)) },
+        { json: "hoariness", js: "hoariness", typ: u(undefined, i(0)) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "hypopodium", js: "hypopodium", typ: u(undefined, i(0)) },
+        { json: "luxurist", js: "luxurist", typ: u(undefined, i(0)) },
+        { json: "mechanician", js: "mechanician", typ: u(undefined, i(0)) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "podgily", js: "podgily", typ: u(undefined, i(0)) },
+        { json: "reformableness", js: "reformableness", typ: u(undefined, i(0)) },
+        { json: "scatterbrains", js: "scatterbrains", typ: u(undefined, i(0)) },
+        { json: "seminuria", js: "seminuria", typ: u(undefined, i(0)) },
+        { json: "tramp", js: "tramp", typ: u(undefined, i(0)) },
+        { json: "undueness", js: "undueness", typ: u(undefined, i(0)) },
+        { json: "worthily", js: "worthily", typ: u(undefined, i(0)) },
+    ], false),
+    "TruantcyClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Epeira", js: "Epeira", typ: u(undefined, null) },
+        { json: "Eurylaimi", js: "Eurylaimi", typ: u(undefined, null) },
+        { json: "Yuman", js: "Yuman", typ: u(undefined, null) },
+        { json: "alfiona", js: "alfiona", typ: u(undefined, null) },
+        { json: "ascaridiasis", js: "ascaridiasis", typ: u(undefined, null) },
+        { json: "bungey", js: "bungey", typ: u(undefined, null) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "ceroxyle", js: "ceroxyle", typ: u(undefined, null) },
+        { json: "chorology", js: "chorology", typ: u(undefined, null) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "enmarble", js: "enmarble", typ: u(undefined, null) },
+        { json: "germination", js: "germination", typ: u(undefined, null) },
+        { json: "hallelujah", js: "hallelujah", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "lev", js: "lev", typ: u(undefined, null) },
+        { json: "mouthing", js: "mouthing", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "philliloo", js: "philliloo", typ: u(undefined, null) },
+        { json: "planetal", js: "planetal", typ: u(undefined, null) },
+        { json: "poney", js: "poney", typ: u(undefined, null) },
+        { json: "punctualist", js: "punctualist", typ: u(undefined, null) },
+        { json: "returnlessly", js: "returnlessly", typ: u(undefined, null) },
+        { json: "skelder", js: "skelder", typ: u(undefined, null) },
+        { json: "windwaywardly", js: "windwaywardly", typ: u(undefined, null) },
+    ], false),
+    "UnimpeachablyClass": o([
+        { json: "Bobadil", js: "Bobadil", typ: u(undefined, i(0)) },
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Quiina", js: "Quiina", typ: u(undefined, i(0)) },
+        { json: "Robert", js: "Robert", typ: u(undefined, i(0)) },
+        { json: "acerin", js: "acerin", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "chlorophylligenous", js: "chlorophylligenous", typ: u(undefined, i(0)) },
+        { json: "conversational", js: "conversational", typ: u(undefined, i(0)) },
+        { json: "demiowl", js: "demiowl", typ: u(undefined, i(0)) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "ectorhinal", js: "ectorhinal", typ: u(undefined, i(0)) },
+        { json: "gamblesomeness", js: "gamblesomeness", typ: u(undefined, i(0)) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "irrorate", js: "irrorate", typ: u(undefined, i(0)) },
+        { json: "kindergartening", js: "kindergartening", typ: u(undefined, i(0)) },
+        { json: "lateritic", js: "lateritic", typ: u(undefined, i(0)) },
+        { json: "mespil", js: "mespil", typ: u(undefined, i(0)) },
+        { json: "misconfiguration", js: "misconfiguration", typ: u(undefined, i(0)) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "planometry", js: "planometry", typ: u(undefined, i(0)) },
+        { json: "rot", js: "rot", typ: u(undefined, i(0)) },
+        { json: "subcinctorium", js: "subcinctorium", typ: u(undefined, i(0)) },
+        { json: "tussocker", js: "tussocker", typ: u(undefined, i(0)) },
+        { json: "ultraproud", js: "ultraproud", typ: u(undefined, i(0)) },
+        { json: "unsuggestedness", js: "unsuggestedness", typ: u(undefined, i(0)) },
+    ], false),
+    "UnstressedClass": o([
+        { json: "Alain", js: "Alain", typ: null },
+        { json: "Amphirhina", js: "Amphirhina", typ: null },
+        { json: "Lincolnian", js: "Lincolnian", typ: null },
+        { json: "Sarcophilus", js: "Sarcophilus", typ: null },
+        { json: "antimachinery", js: "antimachinery", typ: null },
+        { json: "coldish", js: "coldish", typ: null },
+        { json: "crantara", js: "crantara", typ: null },
+        { json: "distinguishing", js: "distinguishing", typ: null },
+        { json: "elytroposis", js: "elytroposis", typ: null },
+        { json: "gentianwort", js: "gentianwort", typ: null },
+        { json: "heliosis", js: "heliosis", typ: null },
+        { json: "instrumental", js: "instrumental", typ: null },
+        { json: "introinflection", js: "introinflection", typ: null },
+        { json: "kala", js: "kala", typ: null },
+        { json: "metad", js: "metad", typ: null },
+        { json: "swingingly", js: "swingingly", typ: null },
+        { json: "unconformity", js: "unconformity", typ: null },
+        { json: "undecreed", js: "undecreed", typ: null },
+        { json: "venerable", js: "venerable", typ: null },
+        { json: "vowellessness", js: "vowellessness", typ: null },
+    ], false),
+    "WrothyClass": o([
+        { json: "Aeschynanthus", js: "Aeschynanthus", typ: null },
+        { json: "Ephesine", js: "Ephesine", typ: null },
+        { json: "aquiferous", js: "aquiferous", typ: null },
+        { json: "cheapener", js: "cheapener", typ: null },
+        { json: "enumeration", js: "enumeration", typ: null },
+        { json: "escadrille", js: "escadrille", typ: null },
+        { json: "estrous", js: "estrous", typ: null },
+        { json: "interestedly", js: "interestedly", typ: null },
+        { json: "katakinetomer", js: "katakinetomer", typ: null },
+        { json: "mortification", js: "mortification", typ: null },
+        { json: "morula", js: "morula", typ: null },
+        { json: "orthosymmetrical", js: "orthosymmetrical", typ: null },
+        { json: "overbark", js: "overbark", typ: null },
+        { json: "politist", js: "politist", typ: null },
+        { json: "qualified", js: "qualified", typ: null },
+        { json: "sphenomalar", js: "sphenomalar", typ: null },
+        { json: "throatful", js: "throatful", typ: null },
+        { json: "transhumance", js: "transhumance", typ: null },
+        { json: "triandrian", js: "triandrian", typ: null },
+        { json: "unbooked", js: "unbooked", typ: null },
+    ], false),
+};
diff --git a/head/typescript/test/inputs/json/priority/combinations4.json/prefer-types-true--df33e18681f9/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/prefer-types-true--df33e18681f9/TopLevel.ts
new file mode 100644
index 0000000..7232170
--- /dev/null
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/prefer-types-true--df33e18681f9/TopLevel.ts
@@ -0,0 +1,1140 @@
+// To parse this data:
+//
+//   import { Convert, TopLevel } from "./TopLevel";
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export type TopLevel = {
+    protrusive:         Protrusive[];
+    pulpitism:          PulpitismElement[];
+    pyodermia:          PyodermiaElement[];
+    quebrachine:        QuebrachineElement[];
+    querier:            Querier[];
+    rebarbative:        Rebarbative[];
+    reimagine:          Reimagine[];
+    ressaut:            Ressaut;
+    retrocervical:      Retrocervical[];
+    revert:             Revert[];
+    rewrite:            RewriteElement[];
+    saccoderm:          Saccoderm[];
+    santir:             SantirElement[];
+    saprophilous:       Saprophilous[];
+    saxten:             SaxtenElement[];
+    scatty:             (Scatty | null)[];
+    scoffer:            Scoffer[];
+    scrampum:           Scrampum[];
+    semantic:           number;
+    serpentinic:        Serpentinic[];
+    shadowable:         Shadowable[];
+    sistering:          SisteringElement[];
+    staghunting:        Staghunting[];
+    stagmometer:        Stagmometer[];
+    stimulability:      Stimulability[];
+    strangleable:       Strangleable[];
+    strenuosity:        StrenuosityElement[];
+    tabaxir:            Tabaxir[];
+    talpiform:          Talpiform[];
+    thwack:             Thwack[];
+    to:                 (number | null)[];
+    tortricine:         Tortricine[];
+    truantcy:           TruantcyElement[];
+    turgesce:           string[];
+    unbeginning:        Unbeginning[];
+    underdunged:        number[];
+    undesirability:     Undesirability[];
+    unerasing:          Unerasing[];
+    unguentarium:       Unguentarium[];
+    unimpeachably:      UnimpeachablyElement[];
+    unmortgaged:        Unmortgaged[];
+    unobstructed:       Unobstructed[];
+    unreceptivity:      Unreceptivity[];
+    unsatisfactoriness: Unsatisfactoriness[];
+    unsecurity:         number[];
+    unstressed:         UnstressedElement[];
+    untasked:           Untasked[];
+    unvarying:          Unvarying[];
+    vehemently:         Vehemently[];
+    warriorship:        { [key: string]: boolean };
+    whitepot:           Whitepot[];
+    wrothy:             WrothyElement[];
+}
+
+export type Protrusive = (number | null)[] | number;
+
+export type PulpitismElement = number[] | PulpitismClass | number;
+
+export type PulpitismClass = {
+    abnet:           null;
+    buckhorn:        null;
+    calciform:       null;
+    chelophore:      null;
+    cogitation:      null;
+    decreeable:      null;
+    despicable:      null;
+    isodiazo:        null;
+    jadedly:         null;
+    leptochlorite:   null;
+    nursling:        null;
+    palamedean:      null;
+    photoheliograph: null;
+    pipewood:        null;
+    roberd:          null;
+    statable:        null;
+    superassume:     null;
+    syllabe:         null;
+    toughhead:       null;
+    underburn:       null;
+}
+
+export type PyodermiaElement = PyodermiaClass | number;
+
+export type PyodermiaClass = {
+    Gyppo:          null;
+    aphoristically: null;
+    apophyllous:    null;
+    cognize:        null;
+    dermonosology:  null;
+    ither:          null;
+    juglandaceous:  null;
+    litho:          null;
+    macropterous:   null;
+    photographer:   null;
+    romancing:      null;
+    rumness:        null;
+    somniloquist:   null;
+    stressfully:    null;
+    tactically:     null;
+    tracheophony:   null;
+    unappositely:   null;
+    unclothedly:    null;
+    unimplied:      null;
+    unsyncopated:   null;
+}
+
+export type QuebrachineElement = boolean | QuebrachineClass | null;
+
+export type QuebrachineClass = {
+    Chirotherium:    number;
+    catharticalness: number;
+    disdiapason:     string;
+    homocerc:        boolean;
+    nonbookish:      null;
+}
+
+export type Querier = boolean | { [key: string]: number };
+
+export type Rebarbative = number[] | boolean | number;
+
+export type Reimagine = {
+    Chirotherium?:    number;
+    Hermo?:           null;
+    adducible?:       null;
+    anabolin?:        null;
+    brainy?:          null;
+    catharticalness?: number;
+    chrysamine?:      null;
+    disdiapason?:     string;
+    fluxweed?:        null;
+    glaucine?:        null;
+    grobianism?:      null;
+    hieroglyphist?:   null;
+    homocerc?:        boolean;
+    icteroid?:        null;
+    immortal?:        null;
+    impetulant?:      null;
+    irrigate?:        null;
+    myxedema?:        null;
+    nonbookish?:      null;
+    onyx?:            null;
+    repasser?:        null;
+    septomarginal?:   null;
+    subdie?:          null;
+    tibiometatarsal?: null;
+    waltzlike?:       null;
+}
+
+export type Ressaut = {
+    Freesia:         string;
+    Genevieve:       string;
+    Mimosaceae:      string;
+    Theopaschitism:  string;
+    apperceptive:    string;
+    cuttoo:          string;
+    douser:          string;
+    drinkproof:      string;
+    forementioned:   string;
+    hyperdiabolical: string;
+    hypocone:        string;
+    irreverentially: string;
+    jumart:          string;
+    mollicrush:      string;
+    nedder:          string;
+    retinasphalt:    string;
+    sough:           string;
+    steading:        string;
+    undurableness:   string;
+    unmingleable:    string;
+}
+
+export type Retrocervical = (number | null)[] | number;
+
+export type Revert = boolean | string;
+
+export type RewriteElement = null[] | RewriteClass | number;
+
+export type RewriteClass = {
+    Hyades:           null;
+    Ptenoglossa:      null;
+    Whiggification:   null;
+    accountancy:      null;
+    cacotrophic:      null;
+    contest:          null;
+    couthily:         null;
+    falculate:        null;
+    foreseize:        null;
+    lemnad:           null;
+    monotheistically: null;
+    nonflying:        null;
+    repatch:          null;
+    rodman:           null;
+    strung:           null;
+    titmal:           null;
+    twalpennyworth:   null;
+    unblamable:       null;
+    vertical:         null;
+    yardman:          null;
+}
+
+export type Saccoderm = number[] | null | string;
+
+export type SantirElement = SantirClass | number;
+
+export type SantirClass = {
+    Suessiones:      null;
+    admiredly:       null;
+    demicaponier:    null;
+    epitympanic:     null;
+    investitor:      null;
+    lupiform:        null;
+    monoflagellate:  null;
+    paleoethnic:     null;
+    prediscountable: null;
+    rhetoricals:     null;
+    roomth:          null;
+    saccharose:      null;
+    septonasal:      null;
+    serpenticide:    null;
+    setarious:       null;
+    spaework:        null;
+    stylite:         null;
+    timelily:        null;
+    unprofaned:      null;
+    vorticular:      null;
+}
+
+export type Saprophilous = { [key: string]: number } | null | string;
+
+export type SaxtenElement = SaxtenClass | string;
+
+export type SaxtenClass = {
+    Centaurid?:       null;
+    Chirotherium?:    number;
+    algarrobilla?:    null;
+    bowgrace?:        null;
+    catharticalness?: number;
+    disdiapason?:     string;
+    flix?:            null;
+    germanely?:       null;
+    homocerc?:        boolean;
+    inhume?:          null;
+    lepidote?:        null;
+    megalochirous?:   null;
+    ninepenny?:       null;
+    nonbookish?:      null;
+    nondeist?:        null;
+    nymphaeaceous?:   null;
+    parietofrontal?:  null;
+    sancyite?:        null;
+    subjectivist?:    null;
+    tibiad?:          null;
+    transonic?:       null;
+    tripetalous?:     null;
+    trunchman?:       null;
+    urger?:           null;
+    withdrawnness?:   null;
+}
+
+export type Scatty = {
+    Tabasco:            null;
+    aeriferous:         null;
+    antical:            null;
+    antighostism:       null;
+    arcanum:            null;
+    autotrophy:         null;
+    baronial:           null;
+    caffeine:           null;
+    gorgoniacean:       null;
+    heroical:           null;
+    hydropical:         null;
+    mechanology:        null;
+    musicopoetic:       null;
+    officiality:        null;
+    oftentimes:         null;
+    ophthalmotonometer: null;
+    reflectively:       null;
+    springer:           null;
+    teleianthous:       null;
+    uncombated:         null;
+}
+
+export type Scoffer = null[] | { [key: string]: number } | null;
+
+export type Scrampum = number[] | boolean | null;
+
+export type Serpentinic = number[] | number;
+
+export type Shadowable = (number | null)[] | boolean;
+
+export type SisteringElement = null[] | SisteringClass | number;
+
+export type SisteringClass = {
+    Chianti:          null;
+    Haplomi:          null;
+    Micropterygidae:  null;
+    amphicarpic:      null;
+    frigorific:       null;
+    hyperkinesis:     null;
+    laudable:         null;
+    madwoman:         null;
+    maimedly:         null;
+    microrhabdus:     null;
+    nondense:         null;
+    phlebemphraxis:   null;
+    redsear:          null;
+    schismatical:     null;
+    tartryl:          null;
+    unabhorred:       null;
+    undeliberateness: null;
+    unmixable:        null;
+    untruckling:      null;
+    vineal:           null;
+}
+
+export type Staghunting = {
+    Chirotherium?:       number;
+    calorimetric?:       number;
+    canid?:              number;
+    catharticalness?:    number;
+    disdiapason?:        string;
+    ditriglyphic?:       number;
+    floriferousness?:    number;
+    gamelike?:           number;
+    grig?:               number;
+    homocerc?:           boolean;
+    interloan?:          number;
+    lithotomy?:          number;
+    loric?:              number;
+    membranocoriaceous?: number;
+    membranogenic?:      number;
+    nonbookish?:         null;
+    overtrump?:          number;
+    scotino?:            number;
+    seasonable?:         number;
+    sephen?:             number;
+    stigmarioid?:        number;
+    tired?:              number;
+    trifid?:             number;
+    undefeatedly?:       number;
+    ungirlish?:          number;
+}
+
+export type Stagmometer = (number | null)[] | string;
+
+export type Stimulability = boolean | number | { [key: string]: number };
+
+export type Strangleable = null[] | number;
+
+export type StrenuosityElement = null[] | StrenuosityClass;
+
+export type StrenuosityClass = {
+    Chirotherium?:    number;
+    Onopordon?:       number;
+    Sodomite?:        number;
+    Yankeeist?:       number;
+    bliss?:           number;
+    buccate?:         number;
+    bulletproof?:     number;
+    catharticalness?: number;
+    crumblingness?:   number;
+    disdiapason?:     string;
+    engagedly?:       number;
+    fightable?:       number;
+    hoariness?:       number;
+    homocerc?:        boolean;
+    hypopodium?:      number;
+    luxurist?:        number;
+    mechanician?:     number;
+    nonbookish?:      null;
+    podgily?:         number;
+    reformableness?:  number;
+    scatterbrains?:   number;
+    seminuria?:       number;
+    tramp?:           number;
+    undueness?:       number;
+    worthily?:        number;
+}
+
+export type Tabaxir = boolean | number;
+
+export type Talpiform = QuebrachineClass | number | null;
+
+export type Thwack = boolean | QuebrachineClass | number;
+
+export type Tortricine = (number | null)[] | QuebrachineClass;
+
+export type TruantcyElement = boolean | TruantcyClass;
+
+export type TruantcyClass = {
+    Chirotherium?:    number;
+    Epeira?:          null;
+    Eurylaimi?:       null;
+    Yuman?:           null;
+    alfiona?:         null;
+    ascaridiasis?:    null;
+    bungey?:          null;
+    catharticalness?: number;
+    ceroxyle?:        null;
+    chorology?:       null;
+    disdiapason?:     string;
+    enmarble?:        null;
+    germination?:     null;
+    hallelujah?:      null;
+    homocerc?:        boolean;
+    lev?:             null;
+    mouthing?:        null;
+    nonbookish?:      null;
+    philliloo?:       null;
+    planetal?:        null;
+    poney?:           null;
+    punctualist?:     null;
+    returnlessly?:    null;
+    skelder?:         null;
+    windwaywardly?:   null;
+}
+
+export type Unbeginning = null[] | { [key: string]: number } | string;
+
+export type Undesirability = number[] | { [key: string]: number } | string;
+
+export type Unerasing = null[] | number | { [key: string]: number };
+
+export type Unguentarium = null[] | number | null;
+
+export type UnimpeachablyElement = boolean | UnimpeachablyClass;
+
+export type UnimpeachablyClass = {
+    Bobadil?:            number;
+    Chirotherium?:       number;
+    Quiina?:             number;
+    Robert?:             number;
+    acerin?:             number;
+    catharticalness?:    number;
+    chlorophylligenous?: number;
+    conversational?:     number;
+    demiowl?:            number;
+    disdiapason?:        string;
+    ectorhinal?:         number;
+    gamblesomeness?:     number;
+    homocerc?:           boolean;
+    irrorate?:           number;
+    kindergartening?:    number;
+    lateritic?:          number;
+    mespil?:             number;
+    misconfiguration?:   number;
+    nonbookish?:         null;
+    planometry?:         number;
+    rot?:                number;
+    subcinctorium?:      number;
+    tussocker?:          number;
+    ultraproud?:         number;
+    unsuggestedness?:    number;
+}
+
+export type Unmortgaged = number | { [key: string]: number } | null;
+
+export type Unobstructed = QuebrachineClass | number | null;
+
+export type Unreceptivity = null[] | number | string;
+
+export type Unsatisfactoriness = number[] | boolean | number;
+
+export type UnstressedElement = boolean | UnstressedClass | string;
+
+export type UnstressedClass = {
+    Alain:           null;
+    Amphirhina:      null;
+    Lincolnian:      null;
+    Sarcophilus:     null;
+    antimachinery:   null;
+    coldish:         null;
+    crantara:        null;
+    distinguishing:  null;
+    elytroposis:     null;
+    gentianwort:     null;
+    heliosis:        null;
+    instrumental:    null;
+    introinflection: null;
+    kala:            null;
+    metad:           null;
+    swingingly:      null;
+    unconformity:    null;
+    undecreed:       null;
+    venerable:       null;
+    vowellessness:   null;
+}
+
+export type Untasked = null[] | number | { [key: string]: number };
+
+export type Unvarying = boolean | number | { [key: string]: number };
+
+export type Vehemently = null[] | boolean | null;
+
+export type Whitepot = QuebrachineClass | number;
+
+export type WrothyElement = null[] | WrothyClass;
+
+export type WrothyClass = {
+    Aeschynanthus:    null;
+    Ephesine:         null;
+    aquiferous:       null;
+    cheapener:        null;
+    enumeration:      null;
+    escadrille:       null;
+    estrous:          null;
+    interestedly:     null;
+    katakinetomer:    null;
+    mortification:    null;
+    morula:           null;
+    orthosymmetrical: null;
+    overbark:         null;
+    politist:         null;
+    qualified:        null;
+    sphenomalar:      null;
+    throatful:        null;
+    transhumance:     null;
+    triandrian:       null;
+    unbooked:         null;
+}
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+export class Convert {
+    public static toTopLevel(json: string): TopLevel {
+        return cast(JSON.parse(json), r("TopLevel"));
+    }
+
+    public static topLevelToJson(value: TopLevel): string {
+        return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+    }
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = ''): never {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "protrusive", js: "protrusive", typ: a(u(a(u(i(0), null)), 3.14)) },
+        { json: "pulpitism", js: "pulpitism", typ: a(u(a(i(0)), r("PulpitismClass"), 3.14)) },
+        { json: "pyodermia", js: "pyodermia", typ: a(u(r("PyodermiaClass"), i(0))) },
+        { json: "quebrachine", js: "quebrachine", typ: a(u(true, r("QuebrachineClass"), null)) },
+        { json: "querier", js: "querier", typ: a(u(true, m(i(0)))) },
+        { json: "rebarbative", js: "rebarbative", typ: a(u(a(i(0)), true, 3.14)) },
+        { json: "reimagine", js: "reimagine", typ: a(r("Reimagine")) },
+        { json: "ressaut", js: "ressaut", typ: r("Ressaut") },
+        { json: "retrocervical", js: "retrocervical", typ: a(u(a(u(i(0), null)), i(0))) },
+        { json: "revert", js: "revert", typ: a(u(true, "")) },
+        { json: "rewrite", js: "rewrite", typ: a(u(a(null), r("RewriteClass"), 3.14)) },
+        { json: "saccoderm", js: "saccoderm", typ: a(u(a(i(0)), null, "")) },
+        { json: "santir", js: "santir", typ: a(u(r("SantirClass"), 3.14)) },
+        { json: "saprophilous", js: "saprophilous", typ: a(u(m(i(0)), null, "")) },
+        { json: "saxten", js: "saxten", typ: a(u(r("SaxtenClass"), "")) },
+        { json: "scatty", js: "scatty", typ: a(u(r("Scatty"), null)) },
+        { json: "scoffer", js: "scoffer", typ: a(u(a(null), m(i(0)), null)) },
+        { json: "scrampum", js: "scrampum", typ: a(u(a(i(0)), true, null)) },
+        { json: "semantic", js: "semantic", typ: 3.14 },
+        { json: "serpentinic", js: "serpentinic", typ: a(u(a(i(0)), 3.14)) },
+        { json: "shadowable", js: "shadowable", typ: a(u(a(u(i(0), null)), true)) },
+        { json: "sistering", js: "sistering", typ: a(u(a(null), r("SisteringClass"), i(0))) },
+        { json: "staghunting", js: "staghunting", typ: a(r("Staghunting")) },
+        { json: "stagmometer", js: "stagmometer", typ: a(u(a(u(i(0), null)), "")) },
+        { json: "stimulability", js: "stimulability", typ: a(u(true, i(0), m(i(0)))) },
+        { json: "strangleable", js: "strangleable", typ: a(u(a(null), 3.14)) },
+        { json: "strenuosity", js: "strenuosity", typ: a(u(a(null), r("StrenuosityClass"))) },
+        { json: "tabaxir", js: "tabaxir", typ: a(u(true, 3.14)) },
+        { json: "talpiform", js: "talpiform", typ: a(u(r("QuebrachineClass"), 3.14, null)) },
+        { json: "thwack", js: "thwack", typ: a(u(true, r("QuebrachineClass"), 3.14)) },
+        { json: "to", js: "to", typ: a(u(3.14, null)) },
+        { json: "tortricine", js: "tortricine", typ: a(u(a(u(i(0), null)), r("QuebrachineClass"))) },
+        { json: "truantcy", js: "truantcy", typ: a(u(true, r("TruantcyClass"))) },
+        { json: "turgesce", js: "turgesce", typ: a("") },
+        { json: "unbeginning", js: "unbeginning", typ: a(u(a(null), m(i(0)), "")) },
+        { json: "underdunged", js: "underdunged", typ: a(3.14) },
+        { json: "undesirability", js: "undesirability", typ: a(u(a(i(0)), m(i(0)), "")) },
+        { json: "unerasing", js: "unerasing", typ: a(u(a(null), i(0), m(i(0)))) },
+        { json: "unguentarium", js: "unguentarium", typ: a(u(a(null), i(0), null)) },
+        { json: "unimpeachably", js: "unimpeachably", typ: a(u(true, r("UnimpeachablyClass"))) },
+        { json: "unmortgaged", js: "unmortgaged", typ: a(u(3.14, m(i(0)), null)) },
+        { json: "unobstructed", js: "unobstructed", typ: a(u(r("QuebrachineClass"), i(0), null)) },
+        { json: "unreceptivity", js: "unreceptivity", typ: a(u(a(null), i(0), "")) },
+        { json: "unsatisfactoriness", js: "unsatisfactoriness", typ: a(u(a(i(0)), true, i(0))) },
+        { json: "unsecurity", js: "unsecurity", typ: a(i(0)) },
+        { json: "unstressed", js: "unstressed", typ: a(u(true, r("UnstressedClass"), "")) },
+        { json: "untasked", js: "untasked", typ: a(u(a(null), 3.14, m(i(0)))) },
+        { json: "unvarying", js: "unvarying", typ: a(u(true, 3.14, m(i(0)))) },
+        { json: "vehemently", js: "vehemently", typ: a(u(a(null), true, null)) },
+        { json: "warriorship", js: "warriorship", typ: m(true) },
+        { json: "whitepot", js: "whitepot", typ: a(u(r("QuebrachineClass"), 3.14)) },
+        { json: "wrothy", js: "wrothy", typ: a(u(a(null), r("WrothyClass"))) },
+    ], false),
+    "PulpitismClass": o([
+        { json: "abnet", js: "abnet", typ: null },
+        { json: "buckhorn", js: "buckhorn", typ: null },
+        { json: "calciform", js: "calciform", typ: null },
+        { json: "chelophore", js: "chelophore", typ: null },
+        { json: "cogitation", js: "cogitation", typ: null },
+        { json: "decreeable", js: "decreeable", typ: null },
+        { json: "despicable", js: "despicable", typ: null },
+        { json: "isodiazo", js: "isodiazo", typ: null },
+        { json: "jadedly", js: "jadedly", typ: null },
+        { json: "leptochlorite", js: "leptochlorite", typ: null },
+        { json: "nursling", js: "nursling", typ: null },
+        { json: "palamedean", js: "palamedean", typ: null },
+        { json: "photoheliograph", js: "photoheliograph", typ: null },
+        { json: "pipewood", js: "pipewood", typ: null },
+        { json: "roberd", js: "roberd", typ: null },
+        { json: "statable", js: "statable", typ: null },
+        { json: "superassume", js: "superassume", typ: null },
+        { json: "syllabe", js: "syllabe", typ: null },
+        { json: "toughhead", js: "toughhead", typ: null },
+        { json: "underburn", js: "underburn", typ: null },
+    ], false),
+    "PyodermiaClass": o([
+        { json: "Gyppo", js: "Gyppo", typ: null },
+        { json: "aphoristically", js: "aphoristically", typ: null },
+        { json: "apophyllous", js: "apophyllous", typ: null },
+        { json: "cognize", js: "cognize", typ: null },
+        { json: "dermonosology", js: "dermonosology", typ: null },
+        { json: "ither", js: "ither", typ: null },
+        { json: "juglandaceous", js: "juglandaceous", typ: null },
+        { json: "litho", js: "litho", typ: null },
+        { json: "macropterous", js: "macropterous", typ: null },
+        { json: "photographer", js: "photographer", typ: null },
+        { json: "romancing", js: "romancing", typ: null },
+        { json: "rumness", js: "rumness", typ: null },
+        { json: "somniloquist", js: "somniloquist", typ: null },
+        { json: "stressfully", js: "stressfully", typ: null },
+        { json: "tactically", js: "tactically", typ: null },
+        { json: "tracheophony", js: "tracheophony", typ: null },
+        { json: "unappositely", js: "unappositely", typ: null },
+        { json: "unclothedly", js: "unclothedly", typ: null },
+        { json: "unimplied", js: "unimplied", typ: null },
+        { json: "unsyncopated", js: "unsyncopated", typ: null },
+    ], false),
+    "QuebrachineClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: i(0) },
+        { json: "catharticalness", js: "catharticalness", typ: 3.14 },
+        { json: "disdiapason", js: "disdiapason", typ: "" },
+        { json: "homocerc", js: "homocerc", typ: true },
+        { json: "nonbookish", js: "nonbookish", typ: null },
+    ], false),
+    "Reimagine": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Hermo", js: "Hermo", typ: u(undefined, null) },
+        { json: "adducible", js: "adducible", typ: u(undefined, null) },
+        { json: "anabolin", js: "anabolin", typ: u(undefined, null) },
+        { json: "brainy", js: "brainy", typ: u(undefined, null) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "chrysamine", js: "chrysamine", typ: u(undefined, null) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "fluxweed", js: "fluxweed", typ: u(undefined, null) },
+        { json: "glaucine", js: "glaucine", typ: u(undefined, null) },
+        { json: "grobianism", js: "grobianism", typ: u(undefined, null) },
+        { json: "hieroglyphist", js: "hieroglyphist", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "icteroid", js: "icteroid", typ: u(undefined, null) },
+        { json: "immortal", js: "immortal", typ: u(undefined, null) },
+        { json: "impetulant", js: "impetulant", typ: u(undefined, null) },
+        { json: "irrigate", js: "irrigate", typ: u(undefined, null) },
+        { json: "myxedema", js: "myxedema", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "onyx", js: "onyx", typ: u(undefined, null) },
+        { json: "repasser", js: "repasser", typ: u(undefined, null) },
+        { json: "septomarginal", js: "septomarginal", typ: u(undefined, null) },
+        { json: "subdie", js: "subdie", typ: u(undefined, null) },
+        { json: "tibiometatarsal", js: "tibiometatarsal", typ: u(undefined, null) },
+        { json: "waltzlike", js: "waltzlike", typ: u(undefined, null) },
+    ], false),
+    "Ressaut": o([
+        { json: "Freesia", js: "Freesia", typ: "" },
+        { json: "Genevieve", js: "Genevieve", typ: "" },
+        { json: "Mimosaceae", js: "Mimosaceae", typ: "" },
+        { json: "Theopaschitism", js: "Theopaschitism", typ: "" },
+        { json: "apperceptive", js: "apperceptive", typ: "" },
+        { json: "cuttoo", js: "cuttoo", typ: "" },
+        { json: "douser", js: "douser", typ: "" },
+        { json: "drinkproof", js: "drinkproof", typ: "" },
+        { json: "forementioned", js: "forementioned", typ: "" },
+        { json: "hyperdiabolical", js: "hyperdiabolical", typ: "" },
+        { json: "hypocone", js: "hypocone", typ: "" },
+        { json: "irreverentially", js: "irreverentially", typ: "" },
+        { json: "jumart", js: "jumart", typ: "" },
+        { json: "mollicrush", js: "mollicrush", typ: "" },
+        { json: "nedder", js: "nedder", typ: "" },
+        { json: "retinasphalt", js: "retinasphalt", typ: "" },
+        { json: "sough", js: "sough", typ: "" },
+        { json: "steading", js: "steading", typ: "" },
+        { json: "undurableness", js: "undurableness", typ: "" },
+        { json: "unmingleable", js: "unmingleable", typ: "" },
+    ], false),
+    "RewriteClass": o([
+        { json: "Hyades", js: "Hyades", typ: null },
+        { json: "Ptenoglossa", js: "Ptenoglossa", typ: null },
+        { json: "Whiggification", js: "Whiggification", typ: null },
+        { json: "accountancy", js: "accountancy", typ: null },
+        { json: "cacotrophic", js: "cacotrophic", typ: null },
+        { json: "contest", js: "contest", typ: null },
+        { json: "couthily", js: "couthily", typ: null },
+        { json: "falculate", js: "falculate", typ: null },
+        { json: "foreseize", js: "foreseize", typ: null },
+        { json: "lemnad", js: "lemnad", typ: null },
+        { json: "monotheistically", js: "monotheistically", typ: null },
+        { json: "nonflying", js: "nonflying", typ: null },
+        { json: "repatch", js: "repatch", typ: null },
+        { json: "rodman", js: "rodman", typ: null },
+        { json: "strung", js: "strung", typ: null },
+        { json: "titmal", js: "titmal", typ: null },
+        { json: "twalpennyworth", js: "twalpennyworth", typ: null },
+        { json: "unblamable", js: "unblamable", typ: null },
+        { json: "vertical", js: "vertical", typ: null },
+        { json: "yardman", js: "yardman", typ: null },
+    ], false),
+    "SantirClass": o([
+        { json: "Suessiones", js: "Suessiones", typ: null },
+        { json: "admiredly", js: "admiredly", typ: null },
+        { json: "demicaponier", js: "demicaponier", typ: null },
+        { json: "epitympanic", js: "epitympanic", typ: null },
+        { json: "investitor", js: "investitor", typ: null },
+        { json: "lupiform", js: "lupiform", typ: null },
+        { json: "monoflagellate", js: "monoflagellate", typ: null },
+        { json: "paleoethnic", js: "paleoethnic", typ: null },
+        { json: "prediscountable", js: "prediscountable", typ: null },
+        { json: "rhetoricals", js: "rhetoricals", typ: null },
+        { json: "roomth", js: "roomth", typ: null },
+        { json: "saccharose", js: "saccharose", typ: null },
+        { json: "septonasal", js: "septonasal", typ: null },
+        { json: "serpenticide", js: "serpenticide", typ: null },
+        { json: "setarious", js: "setarious", typ: null },
+        { json: "spaework", js: "spaework", typ: null },
+        { json: "stylite", js: "stylite", typ: null },
+        { json: "timelily", js: "timelily", typ: null },
+        { json: "unprofaned", js: "unprofaned", typ: null },
+        { json: "vorticular", js: "vorticular", typ: null },
+    ], false),
+    "SaxtenClass": o([
+        { json: "Centaurid", js: "Centaurid", typ: u(undefined, null) },
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "algarrobilla", js: "algarrobilla", typ: u(undefined, null) },
+        { json: "bowgrace", js: "bowgrace", typ: u(undefined, null) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "flix", js: "flix", typ: u(undefined, null) },
+        { json: "germanely", js: "germanely", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "inhume", js: "inhume", typ: u(undefined, null) },
+        { json: "lepidote", js: "lepidote", typ: u(undefined, null) },
+        { json: "megalochirous", js: "megalochirous", typ: u(undefined, null) },
+        { json: "ninepenny", js: "ninepenny", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "nondeist", js: "nondeist", typ: u(undefined, null) },
+        { json: "nymphaeaceous", js: "nymphaeaceous", typ: u(undefined, null) },
+        { json: "parietofrontal", js: "parietofrontal", typ: u(undefined, null) },
+        { json: "sancyite", js: "sancyite", typ: u(undefined, null) },
+        { json: "subjectivist", js: "subjectivist", typ: u(undefined, null) },
+        { json: "tibiad", js: "tibiad", typ: u(undefined, null) },
+        { json: "transonic", js: "transonic", typ: u(undefined, null) },
+        { json: "tripetalous", js: "tripetalous", typ: u(undefined, null) },
+        { json: "trunchman", js: "trunchman", typ: u(undefined, null) },
+        { json: "urger", js: "urger", typ: u(undefined, null) },
+        { json: "withdrawnness", js: "withdrawnness", typ: u(undefined, null) },
+    ], false),
+    "Scatty": o([
+        { json: "Tabasco", js: "Tabasco", typ: null },
+        { json: "aeriferous", js: "aeriferous", typ: null },
+        { json: "antical", js: "antical", typ: null },
+        { json: "antighostism", js: "antighostism", typ: null },
+        { json: "arcanum", js: "arcanum", typ: null },
+        { json: "autotrophy", js: "autotrophy", typ: null },
+        { json: "baronial", js: "baronial", typ: null },
+        { json: "caffeine", js: "caffeine", typ: null },
+        { json: "gorgoniacean", js: "gorgoniacean", typ: null },
+        { json: "heroical", js: "heroical", typ: null },
+        { json: "hydropical", js: "hydropical", typ: null },
+        { json: "mechanology", js: "mechanology", typ: null },
+        { json: "musicopoetic", js: "musicopoetic", typ: null },
+        { json: "officiality", js: "officiality", typ: null },
+        { json: "oftentimes", js: "oftentimes", typ: null },
+        { json: "ophthalmotonometer", js: "ophthalmotonometer", typ: null },
+        { json: "reflectively", js: "reflectively", typ: null },
+        { json: "springer", js: "springer", typ: null },
+        { json: "teleianthous", js: "teleianthous", typ: null },
+        { json: "uncombated", js: "uncombated", typ: null },
+    ], false),
+    "SisteringClass": o([
+        { json: "Chianti", js: "Chianti", typ: null },
+        { json: "Haplomi", js: "Haplomi", typ: null },
+        { json: "Micropterygidae", js: "Micropterygidae", typ: null },
+        { json: "amphicarpic", js: "amphicarpic", typ: null },
+        { json: "frigorific", js: "frigorific", typ: null },
+        { json: "hyperkinesis", js: "hyperkinesis", typ: null },
+        { json: "laudable", js: "laudable", typ: null },
+        { json: "madwoman", js: "madwoman", typ: null },
+        { json: "maimedly", js: "maimedly", typ: null },
+        { json: "microrhabdus", js: "microrhabdus", typ: null },
+        { json: "nondense", js: "nondense", typ: null },
+        { json: "phlebemphraxis", js: "phlebemphraxis", typ: null },
+        { json: "redsear", js: "redsear", typ: null },
+        { json: "schismatical", js: "schismatical", typ: null },
+        { json: "tartryl", js: "tartryl", typ: null },
+        { json: "unabhorred", js: "unabhorred", typ: null },
+        { json: "undeliberateness", js: "undeliberateness", typ: null },
+        { json: "unmixable", js: "unmixable", typ: null },
+        { json: "untruckling", js: "untruckling", typ: null },
+        { json: "vineal", js: "vineal", typ: null },
+    ], false),
+    "Staghunting": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "calorimetric", js: "calorimetric", typ: u(undefined, i(0)) },
+        { json: "canid", js: "canid", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "ditriglyphic", js: "ditriglyphic", typ: u(undefined, i(0)) },
+        { json: "floriferousness", js: "floriferousness", typ: u(undefined, i(0)) },
+        { json: "gamelike", js: "gamelike", typ: u(undefined, i(0)) },
+        { json: "grig", js: "grig", typ: u(undefined, i(0)) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "interloan", js: "interloan", typ: u(undefined, i(0)) },
+        { json: "lithotomy", js: "lithotomy", typ: u(undefined, i(0)) },
+        { json: "loric", js: "loric", typ: u(undefined, i(0)) },
+        { json: "membranocoriaceous", js: "membranocoriaceous", typ: u(undefined, i(0)) },
+        { json: "membranogenic", js: "membranogenic", typ: u(undefined, i(0)) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "overtrump", js: "overtrump", typ: u(undefined, i(0)) },
+        { json: "scotino", js: "scotino", typ: u(undefined, i(0)) },
+        { json: "seasonable", js: "seasonable", typ: u(undefined, i(0)) },
+        { json: "sephen", js: "sephen", typ: u(undefined, i(0)) },
+        { json: "stigmarioid", js: "stigmarioid", typ: u(undefined, i(0)) },
+        { json: "tired", js: "tired", typ: u(undefined, i(0)) },
+        { json: "trifid", js: "trifid", typ: u(undefined, i(0)) },
+        { json: "undefeatedly", js: "undefeatedly", typ: u(undefined, i(0)) },
+        { json: "ungirlish", js: "ungirlish", typ: u(undefined, i(0)) },
+    ], false),
+    "StrenuosityClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Onopordon", js: "Onopordon", typ: u(undefined, i(0)) },
+        { json: "Sodomite", js: "Sodomite", typ: u(undefined, i(0)) },
+        { json: "Yankeeist", js: "Yankeeist", typ: u(undefined, i(0)) },
+        { json: "bliss", js: "bliss", typ: u(undefined, i(0)) },
+        { json: "buccate", js: "buccate", typ: u(undefined, i(0)) },
+        { json: "bulletproof", js: "bulletproof", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "crumblingness", js: "crumblingness", typ: u(undefined, i(0)) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "engagedly", js: "engagedly", typ: u(undefined, i(0)) },
+        { json: "fightable", js: "fightable", typ: u(undefined, i(0)) },
+        { json: "hoariness", js: "hoariness", typ: u(undefined, i(0)) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "hypopodium", js: "hypopodium", typ: u(undefined, i(0)) },
+        { json: "luxurist", js: "luxurist", typ: u(undefined, i(0)) },
+        { json: "mechanician", js: "mechanician", typ: u(undefined, i(0)) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "podgily", js: "podgily", typ: u(undefined, i(0)) },
+        { json: "reformableness", js: "reformableness", typ: u(undefined, i(0)) },
+        { json: "scatterbrains", js: "scatterbrains", typ: u(undefined, i(0)) },
+        { json: "seminuria", js: "seminuria", typ: u(undefined, i(0)) },
+        { json: "tramp", js: "tramp", typ: u(undefined, i(0)) },
+        { json: "undueness", js: "undueness", typ: u(undefined, i(0)) },
+        { json: "worthily", js: "worthily", typ: u(undefined, i(0)) },
+    ], false),
+    "TruantcyClass": o([
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Epeira", js: "Epeira", typ: u(undefined, null) },
+        { json: "Eurylaimi", js: "Eurylaimi", typ: u(undefined, null) },
+        { json: "Yuman", js: "Yuman", typ: u(undefined, null) },
+        { json: "alfiona", js: "alfiona", typ: u(undefined, null) },
+        { json: "ascaridiasis", js: "ascaridiasis", typ: u(undefined, null) },
+        { json: "bungey", js: "bungey", typ: u(undefined, null) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "ceroxyle", js: "ceroxyle", typ: u(undefined, null) },
+        { json: "chorology", js: "chorology", typ: u(undefined, null) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "enmarble", js: "enmarble", typ: u(undefined, null) },
+        { json: "germination", js: "germination", typ: u(undefined, null) },
+        { json: "hallelujah", js: "hallelujah", typ: u(undefined, null) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "lev", js: "lev", typ: u(undefined, null) },
+        { json: "mouthing", js: "mouthing", typ: u(undefined, null) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "philliloo", js: "philliloo", typ: u(undefined, null) },
+        { json: "planetal", js: "planetal", typ: u(undefined, null) },
+        { json: "poney", js: "poney", typ: u(undefined, null) },
+        { json: "punctualist", js: "punctualist", typ: u(undefined, null) },
+        { json: "returnlessly", js: "returnlessly", typ: u(undefined, null) },
+        { json: "skelder", js: "skelder", typ: u(undefined, null) },
+        { json: "windwaywardly", js: "windwaywardly", typ: u(undefined, null) },
+    ], false),
+    "UnimpeachablyClass": o([
+        { json: "Bobadil", js: "Bobadil", typ: u(undefined, i(0)) },
+        { json: "Chirotherium", js: "Chirotherium", typ: u(undefined, i(0)) },
+        { json: "Quiina", js: "Quiina", typ: u(undefined, i(0)) },
+        { json: "Robert", js: "Robert", typ: u(undefined, i(0)) },
+        { json: "acerin", js: "acerin", typ: u(undefined, i(0)) },
+        { json: "catharticalness", js: "catharticalness", typ: u(undefined, 3.14) },
+        { json: "chlorophylligenous", js: "chlorophylligenous", typ: u(undefined, i(0)) },
+        { json: "conversational", js: "conversational", typ: u(undefined, i(0)) },
+        { json: "demiowl", js: "demiowl", typ: u(undefined, i(0)) },
+        { json: "disdiapason", js: "disdiapason", typ: u(undefined, "") },
+        { json: "ectorhinal", js: "ectorhinal", typ: u(undefined, i(0)) },
+        { json: "gamblesomeness", js: "gamblesomeness", typ: u(undefined, i(0)) },
+        { json: "homocerc", js: "homocerc", typ: u(undefined, true) },
+        { json: "irrorate", js: "irrorate", typ: u(undefined, i(0)) },
+        { json: "kindergartening", js: "kindergartening", typ: u(undefined, i(0)) },
+        { json: "lateritic", js: "lateritic", typ: u(undefined, i(0)) },
+        { json: "mespil", js: "mespil", typ: u(undefined, i(0)) },
+        { json: "misconfiguration", js: "misconfiguration", typ: u(undefined, i(0)) },
+        { json: "nonbookish", js: "nonbookish", typ: u(undefined, null) },
+        { json: "planometry", js: "planometry", typ: u(undefined, i(0)) },
+        { json: "rot", js: "rot", typ: u(undefined, i(0)) },
+        { json: "subcinctorium", js: "subcinctorium", typ: u(undefined, i(0)) },
+        { json: "tussocker", js: "tussocker", typ: u(undefined, i(0)) },
+        { json: "ultraproud", js: "ultraproud", typ: u(undefined, i(0)) },
+        { json: "unsuggestedness", js: "unsuggestedness", typ: u(undefined, i(0)) },
+    ], false),
+    "UnstressedClass": o([
+        { json: "Alain", js: "Alain", typ: null },
+        { json: "Amphirhina", js: "Amphirhina", typ: null },
+        { json: "Lincolnian", js: "Lincolnian", typ: null },
+        { json: "Sarcophilus", js: "Sarcophilus", typ: null },
+        { json: "antimachinery", js: "antimachinery", typ: null },
+        { json: "coldish", js: "coldish", typ: null },
+        { json: "crantara", js: "crantara", typ: null },
+        { json: "distinguishing", js: "distinguishing", typ: null },
+        { json: "elytroposis", js: "elytroposis", typ: null },
+        { json: "gentianwort", js: "gentianwort", typ: null },
+        { json: "heliosis", js: "heliosis", typ: null },
+        { json: "instrumental", js: "instrumental", typ: null },
+        { json: "introinflection", js: "introinflection", typ: null },
+        { json: "kala", js: "kala", typ: null },
+        { json: "metad", js: "metad", typ: null },
+        { json: "swingingly", js: "swingingly", typ: null },
+        { json: "unconformity", js: "unconformity", typ: null },
+        { json: "undecreed", js: "undecreed", typ: null },
+        { json: "venerable", js: "venerable", typ: null },
+        { json: "vowellessness", js: "vowellessness", typ: null },
+    ], false),
+    "WrothyClass": o([
+        { json: "Aeschynanthus", js: "Aeschynanthus", typ: null },
+        { json: "Ephesine", js: "Ephesine", typ: null },
+        { json: "aquiferous", js: "aquiferous", typ: null },
+        { json: "cheapener", js: "cheapener", typ: null },
+        { json: "enumeration", js: "enumeration", typ: null },
+        { json: "escadrille", js: "escadrille", typ: null },
+        { json: "estrous", js: "estrous", typ: null },
+        { json: "interestedly", js: "interestedly", typ: null },
+        { json: "katakinetomer", js: "katakinetomer", typ: null },
+        { json: "mortification", js: "mortification", typ: null },
+        { json: "morula", js: "morula", typ: null },
+        { json: "orthosymmetrical", js: "orthosymmetrical", typ: null },
+        { json: "overbark", js: "overbark", typ: null },
+        { json: "politist", js: "politist", typ: null },
+        { json: "qualified", js: "qualified", typ: null },
+        { json: "sphenomalar", js: "sphenomalar", typ: null },
+        { json: "throatful", js: "throatful", typ: null },
+        { json: "transhumance", js: "transhumance", typ: null },
+        { json: "triandrian", js: "triandrian", typ: null },
+        { json: "unbooked", js: "unbooked", typ: null },
+    ], false),
+};
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/prefer-unions-false--a5053c0a486d/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
index bcc98d6..45c706b 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/prefer-unions-false--a5053c0a486d/TopLevel.ts
@@ -653,7 +653,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
index bcc98d6..45c706b 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/prefer-unknown-false--f1ab9e45d823/TopLevel.ts
@@ -653,7 +653,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/readonly-true--24da4fc107df/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/readonly-true--24da4fc107df/TopLevel.ts
index cd22bee..cae9440 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/readonly-true--24da4fc107df/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/readonly-true--24da4fc107df/TopLevel.ts
@@ -653,7 +653,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts b/head/typescript/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
index 0d84084..f7bdc7b 100644
--- a/base/typescript/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combinations4.json/runtime-typecheck-ignore-unknown-properties-true--d792c40f022e/TopLevel.ts
@@ -653,7 +653,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/combined-enum.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/combined-enum.json/default/TopLevel.ts
index 55487ec..a3b736a 100644
--- a/base/typescript/test/inputs/json/priority/combined-enum.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/combined-enum.json/default/TopLevel.ts
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/direct-recursive.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/direct-recursive.json/default/TopLevel.ts
index 4eb1ce6..c77bb4e 100644
--- a/base/typescript/test/inputs/json/priority/direct-recursive.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/direct-recursive.json/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/empty-enum.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/empty-enum.json/default/TopLevel.ts
index b55b9a5..6504ca6 100644
--- a/base/typescript/test/inputs/json/priority/empty-enum.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/empty-enum.json/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/identifiers.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/identifiers.json/default/TopLevel.ts
index bf8923e..242db77 100644
--- a/base/typescript/test/inputs/json/priority/identifiers.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/identifiers.json/default/TopLevel.ts
@@ -163,7 +163,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.ts
index 2b2615b..030d949 100644
--- a/base/typescript/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.ts
index 3330b94..d71c1cf 100644
--- a/base/typescript/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/issue2680-scalar-array.json/default/TopLevel.ts
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/keywords.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/keywords.json/default/TopLevel.ts
index 1f4c69d..061db9c 100644
--- a/base/typescript/test/inputs/json/priority/keywords.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/keywords.json/default/TopLevel.ts
@@ -73,7 +73,7 @@ export interface Obj1 {
     constructor:         Constructor;
     continue:            Continue;
     convenience:         Convenience;
-    convert:             Convert;
+    convert:             ConvertClass;
     converter:           Converter;
     date:                DateClass;
     date_parse_handling: DateParseHandling;
@@ -309,7 +309,7 @@ export interface Convenience {
     convenience: number;
 }
 
-export interface Convert {
+export interface ConvertClass {
     convert: number;
 }
 
@@ -1026,6 +1026,7 @@ export interface Obj4 {
     rethrows:         Rethrows;
     return:           Return;
     right:            Right;
+    s:                S;
     sbyte:            Sbyte;
     sealed:           Sealed;
     select:           Select;
@@ -1155,6 +1156,10 @@ export interface Right {
     right: number;
 }
 
+export interface S {
+    s: number;
+}
+
 export interface Sbyte {
     sbyte: number;
 }
@@ -1555,7 +1560,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
@@ -1683,7 +1688,7 @@ const typeMap: any = {
         { json: "constructor", js: "constructor", typ: r("Constructor") },
         { json: "continue", js: "continue", typ: r("Continue") },
         { json: "convenience", js: "convenience", typ: r("Convenience") },
-        { json: "convert", js: "convert", typ: r("Convert") },
+        { json: "convert", js: "convert", typ: r("ConvertClass") },
         { json: "converter", js: "converter", typ: r("Converter") },
         { json: "date", js: "date", typ: r("DateClass") },
         { json: "date_parse_handling", js: "date_parse_handling", typ: r("DateParseHandling") },
@@ -1862,7 +1867,7 @@ const typeMap: any = {
     "Convenience": o([
         { json: "convenience", js: "convenience", typ: i(0) },
     ], false),
-    "Convert": o([
+    "ConvertClass": o([
         { json: "convert", js: "convert", typ: i(0) },
     ], false),
     "Converter": o([
@@ -2438,6 +2443,7 @@ const typeMap: any = {
         { json: "rethrows", js: "rethrows", typ: r("Rethrows") },
         { json: "return", js: "return", typ: r("Return") },
         { json: "right", js: "right", typ: r("Right") },
+        { json: "s", js: "s", typ: r("S") },
         { json: "sbyte", js: "sbyte", typ: r("Sbyte") },
         { json: "sealed", js: "sealed", typ: r("Sealed") },
         { json: "select", js: "select", typ: r("Select") },
@@ -2545,6 +2551,9 @@ const typeMap: any = {
     "Right": o([
         { json: "right", js: "right", typ: i(0) },
     ], false),
+    "S": o([
+        { json: "s", js: "s", typ: i(0) },
+    ], false),
     "Sbyte": o([
         { json: "sbyte", js: "sbyte", typ: i(0) },
     ], false),
diff --git a/head/typescript/test/inputs/json/priority/keywords.json/prefer-types-true--df33e18681f9/TopLevel.ts b/head/typescript/test/inputs/json/priority/keywords.json/prefer-types-true--df33e18681f9/TopLevel.ts
new file mode 100644
index 0000000..5d68533
--- /dev/null
+++ b/head/typescript/test/inputs/json/priority/keywords.json/prefer-types-true--df33e18681f9/TopLevel.ts
@@ -0,0 +1,2769 @@
+// To parse this data:
+//
+//   import { Convert, TopLevel } from "./TopLevel";
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export type TopLevel = {
+    dummy: number;
+    obj1:  Obj1;
+    obj2:  Obj2;
+    obj3:  Obj3;
+    obj4:  Obj4;
+    obj5:  Obj5;
+}
+
+export type Obj1 = {
+    Any:                 Any;
+    BOOL:                Bool;
+    Class:               Class;
+    _:                   Empty;
+    _Bool:               BoolClass;
+    _Complex:            Complex;
+    _Imaginery:          Imaginery;
+    abstract:            Abstract;
+    alignas:             Alignas;
+    alignof:             Alignof;
+    and:                 And;
+    and_eq:              AndEq;
+    any:                 AnyClass;
+    array:               ArrayClass;
+    as:                  As;
+    asm:                 ASM;
+    assert:              Assert;
+    associatedtype:      Associatedtype;
+    associativity:       Associativity;
+    async:               Async;
+    atomic:              Atomic;
+    atomic_cancel:       AtomicCancel;
+    atomic_commit:       AtomicCommit;
+    atomic_noexcept:     AtomicNoexcept;
+    auto:                Auto;
+    await:               Await;
+    base:                Base;
+    bitand:              Bitand;
+    bitor:               Bitor;
+    bool:                Obj1Bool;
+    boolean:             Boolean;
+    break:               Break;
+    bycopy:              Bycopy;
+    byref:               Byref;
+    byte:                Byte;
+    case:                Case;
+    catch:               Catch;
+    chan:                Chan;
+    char:                Char;
+    char16_t:            Char16T;
+    char32_t:            Char32T;
+    checked:             Checked;
+    class:               ClassClass;
+    clone:               Clone;
+    co_await:            CoAwait;
+    co_return:           CoReturn;
+    co_yield:            CoYield;
+    compl:               Compl;
+    concept:             Concept;
+    console:             Console;
+    const:               Const;
+    const_cast:          ConstCast;
+    constexpr:           Constexpr;
+    constructor:         Constructor;
+    continue:            Continue;
+    convenience:         Convenience;
+    convert:             ConvertClass;
+    converter:           Converter;
+    date:                DateClass;
+    date_parse_handling: DateParseHandling;
+    debugger:            Debugger;
+    decimal:             Decimal;
+    declare:             Declare;
+    decltype:            Decltype;
+    decode_string:       DecodeString;
+    dummy:               number;
+}
+
+export type Any = {
+    Any: number;
+}
+
+export type Bool = {
+    BOOL: number;
+}
+
+export type Class = {
+    Class: number;
+}
+
+export type Empty = {
+    _: number;
+}
+
+export type BoolClass = {
+    _Bool: number;
+}
+
+export type Complex = {
+    _Complex: number;
+}
+
+export type Imaginery = {
+    _Imaginery: number;
+}
+
+export type Abstract = {
+    abstract: number;
+}
+
+export type Alignas = {
+    alignas: number;
+}
+
+export type Alignof = {
+    alignof: number;
+}
+
+export type And = {
+    and: number;
+}
+
+export type AndEq = {
+    and_eq: number;
+}
+
+export type AnyClass = {
+    any: number;
+}
+
+export type ArrayClass = {
+    array: number;
+}
+
+export type As = {
+    as: number;
+}
+
+export type ASM = {
+    asm: number;
+}
+
+export type Assert = {
+    assert: number;
+}
+
+export type Associatedtype = {
+    associatedtype: number;
+}
+
+export type Associativity = {
+    associativity: number;
+}
+
+export type Async = {
+    async: number;
+}
+
+export type Atomic = {
+    atomic: number;
+}
+
+export type AtomicCancel = {
+    atomic_cancel: number;
+}
+
+export type AtomicCommit = {
+    atomic_commit: number;
+}
+
+export type AtomicNoexcept = {
+    atomic_noexcept: number;
+}
+
+export type Auto = {
+    auto: number;
+}
+
+export type Await = {
+    await: number;
+}
+
+export type Base = {
+    base: number;
+}
+
+export type Bitand = {
+    bitand: number;
+}
+
+export type Bitor = {
+    bitor: number;
+}
+
+export type Obj1Bool = {
+    bool: number;
+}
+
+export type Boolean = {
+    boolean: number;
+}
+
+export type Break = {
+    break: number;
+}
+
+export type Bycopy = {
+    bycopy: number;
+}
+
+export type Byref = {
+    byref: number;
+}
+
+export type Byte = {
+    byte: number;
+}
+
+export type Case = {
+    case: number;
+}
+
+export type Catch = {
+    catch: number;
+}
+
+export type Chan = {
+    chan: number;
+}
+
+export type Char = {
+    char: number;
+}
+
+export type Char16T = {
+    char16_t: number;
+}
+
+export type Char32T = {
+    char32_t: number;
+}
+
+export type Checked = {
+    checked: number;
+}
+
+export type ClassClass = {
+    class: number;
+}
+
+export type Clone = {
+    clone: number;
+}
+
+export type CoAwait = {
+    co_await: number;
+}
+
+export type CoReturn = {
+    co_return: number;
+}
+
+export type CoYield = {
+    co_yield: number;
+}
+
+export type Compl = {
+    compl: number;
+}
+
+export type Concept = {
+    concept: number;
+}
+
+export type Console = {
+    console: number;
+}
+
+export type Const = {
+    const: number;
+}
+
+export type ConstCast = {
+    const_cast: number;
+}
+
+export type Constexpr = {
+    constexpr: number;
+}
+
+export type Constructor = {
+    constructor: number;
+}
+
+export type Continue = {
+    continue: number;
+}
+
+export type Convenience = {
+    convenience: number;
+}
+
+export type ConvertClass = {
+    convert: number;
+}
+
+export type Converter = {
+    converter: number;
+}
+
+export type DateClass = {
+    date: number;
+}
+
+export type DateParseHandling = {
+    date_parse_handling: number;
+}
+
+export type Debugger = {
+    debugger: number;
+}
+
+export type Decimal = {
+    decimal: number;
+}
+
+export type Declare = {
+    declare: number;
+}
+
+export type Decltype = {
+    decltype: number;
+}
+
+export type DecodeString = {
+    decode_string: number;
+}
+
+export type Obj2 = {
+    False:             False;
+    IMP:               Imp;
+    def:               Def;
+    default:           Default;
+    defer:             Defer;
+    deinit:            Deinit;
+    del:               Del;
+    delegate:          Delegate;
+    delete:            Delete;
+    dict:              Dict;
+    dictionary:        Dictionary;
+    didSet:            DidSet;
+    do:                Do;
+    double:            Double;
+    dummy:             number;
+    dynamic:           Dynamic;
+    dynamic_cast:      DynamicCast;
+    elif:              Elif;
+    else:              Else;
+    encode_quick_type: EncodeQuickType;
+    enum:              Enum;
+    equalityContract:  EqualityContract;
+    event:             Event;
+    except:            Except;
+    exception:         Exception;
+    explicit:          Explicit;
+    export:            Export;
+    exposing:          Exposing;
+    extends:           Extends;
+    extension:         Extension;
+    extern:            Extern;
+    fallthrough:       Fallthrough;
+    false:             FalseClass;
+    fileprivate:       Fileprivate;
+    final:             Final;
+    finally:           Finally;
+    fixed:             Fixed;
+    float:             Float;
+    for:               For;
+    foreach:           Foreach;
+    friend:            Friend;
+    from:              From;
+    from_json:         FromJSON;
+    func:              Func;
+    function:          Function;
+    get:               Get;
+    global:            Global;
+    go:                Go;
+    goto:              Goto;
+    guard:             Guard;
+    hasOwnProperty:    HasOwnProperty;
+    id:                ID;
+    if:                If;
+    implements:        Implements;
+    implicit:          Implicit;
+    import:            Import;
+    in:                In;
+    indirect:          Indirect;
+    infix:             Infix;
+    init:              Init;
+    inline:            Inline;
+    inout:             Inout;
+    instanceof:        Instanceof;
+    int:               Int;
+    interface:         Interface;
+    internal:          Internal;
+}
+
+export type False = {
+    False: number;
+}
+
+export type Imp = {
+    IMP: number;
+}
+
+export type Def = {
+    def: number;
+}
+
+export type Default = {
+    default: number;
+}
+
+export type Defer = {
+    defer: number;
+}
+
+export type Deinit = {
+    deinit: number;
+}
+
+export type Del = {
+    del: number;
+}
+
+export type Delegate = {
+    delegate: number;
+}
+
+export type Delete = {
+    delete: number;
+}
+
+export type Dict = {
+    dict: number;
+}
+
+export type Dictionary = {
+    dictionary: number;
+}
+
+export type DidSet = {
+    didSet: number;
+}
+
+export type Do = {
+    do: number;
+}
+
+export type Double = {
+    double: number;
+}
+
+export type Dynamic = {
+    dynamic: number;
+}
+
+export type DynamicCast = {
+    dynamic_cast: number;
+}
+
+export type Elif = {
+    elif: number;
+}
+
+export type Else = {
+    else: number;
+}
+
+export type EncodeQuickType = {
+    encode_quick_type: number;
+}
+
+export type Enum = {
+    enum: number;
+}
+
+export type EqualityContract = {
+    equalityContract: number;
+}
+
+export type Event = {
+    event: number;
+}
+
+export type Except = {
+    except: number;
+}
+
+export type Exception = {
+    exception: number;
+}
+
+export type Explicit = {
+    explicit: number;
+}
+
+export type Export = {
+    export: number;
+}
+
+export type Exposing = {
+    exposing: number;
+}
+
+export type Extends = {
+    extends: number;
+}
+
+export type Extension = {
+    extension: number;
+}
+
+export type Extern = {
+    extern: number;
+}
+
+export type Fallthrough = {
+    fallthrough: number;
+}
+
+export type FalseClass = {
+    false: number;
+}
+
+export type Fileprivate = {
+    fileprivate: number;
+}
+
+export type Final = {
+    final: number;
+}
+
+export type Finally = {
+    finally: number;
+}
+
+export type Fixed = {
+    fixed: number;
+}
+
+export type Float = {
+    float: number;
+}
+
+export type For = {
+    for: number;
+}
+
+export type Foreach = {
+    foreach: number;
+}
+
+export type Friend = {
+    friend: number;
+}
+
+export type From = {
+    from: number;
+}
+
+export type FromJSON = {
+    from_json: number;
+}
+
+export type Func = {
+    func: number;
+}
+
+export type Function = {
+    function: number;
+}
+
+export type Get = {
+    get: number;
+}
+
+export type Global = {
+    global: number;
+}
+
+export type Go = {
+    go: number;
+}
+
+export type Goto = {
+    goto: number;
+}
+
+export type Guard = {
+    guard: number;
+}
+
+export type HasOwnProperty = {
+    hasOwnProperty: number;
+}
+
+export type ID = {
+    id: number;
+}
+
+export type If = {
+    if: number;
+}
+
+export type Implements = {
+    implements: number;
+}
+
+export type Implicit = {
+    implicit: number;
+}
+
+export type Import = {
+    import: number;
+}
+
+export type In = {
+    in: number;
+}
+
+export type Indirect = {
+    indirect: number;
+}
+
+export type Infix = {
+    infix: number;
+}
+
+export type Init = {
+    init: number;
+}
+
+export type Inline = {
+    inline: number;
+}
+
+export type Inout = {
+    inout: number;
+}
+
+export type Instanceof = {
+    instanceof: number;
+}
+
+export type Int = {
+    int: number;
+}
+
+export type Interface = {
+    interface: number;
+}
+
+export type Internal = {
+    internal: number;
+}
+
+export type Obj3 = {
+    NO:                         No;
+    NSString:                   NSString;
+    NULL:                       Null;
+    None:                       None;
+    Protocol:                   Protocol;
+    dummy:                      number;
+    is:                         Is;
+    iterable:                   Iterable;
+    jdec:                       Jdec;
+    jenc:                       Jenc;
+    jpipe:                      Jpipe;
+    json:                       JSON;
+    json_converter:             JSONConverter;
+    json_serializer:            JSONSerializer;
+    json_token:                 JSONToken;
+    json_writer:                JSONWriter;
+    lambda:                     Lambda;
+    lazy:                       Lazy;
+    left:                       Left;
+    let:                        Let;
+    list:                       List;
+    lock:                       Lock;
+    long:                       Long;
+    map:                        Map;
+    metadata_property_handling: MetadataPropertyHandling;
+    module:                     Module;
+    mutable:                    Mutable;
+    mutating:                   Mutating;
+    namespace:                  Namespace;
+    native:                     Native;
+    new:                        New;
+    newtonsoft:                 Newtonsoft;
+    nil:                        Nil;
+    noexcept:                   Noexcept;
+    nonatomic:                  Nonatomic;
+    none:                       NoneClass;
+    nonlocal:                   Nonlocal;
+    nonmutating:                Nonmutating;
+    not:                        Not;
+    not_eq:                     NotEq;
+    null:                       NullClass;
+    nullptr:                    Nullptr;
+    number:                     Number;
+    object:                     Object;
+    of:                         Of;
+    oneway:                     Oneway;
+    open:                       Open;
+    operator:                   Operator;
+    optional:                   Optional;
+    or:                         Or;
+    or_eq:                      OrEq;
+    out:                        Out;
+    override:                   Override;
+    package:                    Package;
+    params:                     Params;
+    pass:                       Pass;
+    port:                       Port;
+    postfix:                    Postfix;
+    precedence:                 Precedence;
+    prefix:                     Prefix;
+    print:                      Print;
+    printMembers:               PrintMembers;
+    printf:                     Printf;
+    private:                    Private;
+    protected:                  Protected;
+    protocol:                   ProtocolClass;
+}
+
+export type No = {
+    NO: number;
+}
+
+export type NSString = {
+    NSString: number;
+}
+
+export type Null = {
+    NULL: number;
+}
+
+export type None = {
+    None: number;
+}
+
+export type Protocol = {
+    Protocol: number;
+}
+
+export type Is = {
+    is: number;
+}
+
+export type Iterable = {
+    iterable: number;
+}
+
+export type Jdec = {
+    jdec: number;
+}
+
+export type Jenc = {
+    jenc: number;
+}
+
+export type Jpipe = {
+    jpipe: number;
+}
+
+export type JSON = {
+    json: number;
+}
+
+export type JSONConverter = {
+    json_converter: number;
+}
+
+export type JSONSerializer = {
+    json_serializer: number;
+}
+
+export type JSONToken = {
+    json_token: number;
+}
+
+export type JSONWriter = {
+    json_writer: number;
+}
+
+export type Lambda = {
+    lambda: number;
+}
+
+export type Lazy = {
+    lazy: number;
+}
+
+export type Left = {
+    left: number;
+}
+
+export type Let = {
+    let: number;
+}
+
+export type List = {
+    list: number;
+}
+
+export type Lock = {
+    lock: number;
+}
+
+export type Long = {
+    long: number;
+}
+
+export type Map = {
+    map: number;
+}
+
+export type MetadataPropertyHandling = {
+    metadata_property_handling: number;
+}
+
+export type Module = {
+    module: number;
+}
+
+export type Mutable = {
+    mutable: number;
+}
+
+export type Mutating = {
+    mutating: number;
+}
+
+export type Namespace = {
+    namespace: number;
+}
+
+export type Native = {
+    native: number;
+}
+
+export type New = {
+    new: number;
+}
+
+export type Newtonsoft = {
+    newtonsoft: number;
+}
+
+export type Nil = {
+    nil: number;
+}
+
+export type Noexcept = {
+    noexcept: number;
+}
+
+export type Nonatomic = {
+    nonatomic: number;
+}
+
+export type NoneClass = {
+    none: number;
+}
+
+export type Nonlocal = {
+    nonlocal: number;
+}
+
+export type Nonmutating = {
+    nonmutating: number;
+}
+
+export type Not = {
+    not: number;
+}
+
+export type NotEq = {
+    not_eq: number;
+}
+
+export type NullClass = {
+    null: number;
+}
+
+export type Nullptr = {
+    nullptr: number;
+}
+
+export type Number = {
+    number: number;
+}
+
+export type Object = {
+    object: number;
+}
+
+export type Of = {
+    of: number;
+}
+
+export type Oneway = {
+    oneway: number;
+}
+
+export type Open = {
+    open: number;
+}
+
+export type Operator = {
+    operator: number;
+}
+
+export type Optional = {
+    optional: number;
+}
+
+export type Or = {
+    or: number;
+}
+
+export type OrEq = {
+    or_eq: number;
+}
+
+export type Out = {
+    out: number;
+}
+
+export type Override = {
+    override: number;
+}
+
+export type Package = {
+    package: number;
+}
+
+export type Params = {
+    params: number;
+}
+
+export type Pass = {
+    pass: number;
+}
+
+export type Port = {
+    port: number;
+}
+
+export type Postfix = {
+    postfix: number;
+}
+
+export type Precedence = {
+    precedence: number;
+}
+
+export type Prefix = {
+    prefix: number;
+}
+
+export type Print = {
+    print: number;
+}
+
+export type PrintMembers = {
+    printMembers: number;
+}
+
+export type Printf = {
+    printf: number;
+}
+
+export type Private = {
+    private: number;
+}
+
+export type Protected = {
+    protected: number;
+}
+
+export type ProtocolClass = {
+    protocol: number;
+}
+
+export type Obj4 = {
+    SEL:              Sel;
+    Self:             Self;
+    True:             True;
+    Type:             Type;
+    dummy:            number;
+    public:           Public;
+    quicktype:        Quicktype;
+    raise:            Raise;
+    range:            Range;
+    readonly:         Readonly;
+    ref:              Ref;
+    register:         Register;
+    reinterpret_cast: ReinterpretCast;
+    repeat:           Repeat;
+    require:          Require;
+    required:         Required;
+    requires:         Requires;
+    restrict:         Restrict;
+    retain:           Retain;
+    rethrows:         Rethrows;
+    return:           Return;
+    right:            Right;
+    s:                S;
+    sbyte:            Sbyte;
+    sealed:           Sealed;
+    select:           Select;
+    self:             SelfClass;
+    serialize:        Serialize;
+    set:              Set;
+    short:            Short;
+    signed:           Signed;
+    sizeof:           Sizeof;
+    stackalloc:       Stackalloc;
+    static:           Static;
+    static_assert:    StaticAssert;
+    static_cast:      StaticCast;
+    strictfp:         Strictfp;
+    string:           String;
+    struct:           Struct;
+    subscript:        Subscript;
+    super:            Super;
+    switch:           Switch;
+    symbol:           Symbol;
+    synchronized:     Synchronized;
+    system:           System;
+    template:         Template;
+    then:             Then;
+    this:             This;
+    thread_local:     ThreadLocal;
+    throw:            Throw;
+    throws:           Throws;
+    to_json:          ToJSON;
+    top_level:        TopLevelClass;
+    transient:        Transient;
+    true:             TrueClass;
+    try:              Try;
+    type:             TypeClass;
+    typealias:        Typealias;
+    typedef:          Typedef;
+    typeid:           Typeid;
+    typename:         Typename;
+    typeof:           Typeof;
+    uint:             Uint;
+    ulong:            Ulong;
+    unchecked:        Unchecked;
+    undefined:        Undefined;
+}
+
+export type Sel = {
+    SEL: number;
+}
+
+export type Self = {
+    Self: number;
+}
+
+export type True = {
+    True: number;
+}
+
+export type Type = {
+    Type: number;
+}
+
+export type Public = {
+    public: number;
+}
+
+export type Quicktype = {
+    quicktype: number;
+}
+
+export type Raise = {
+    raise: number;
+}
+
+export type Range = {
+    range: number;
+}
+
+export type Readonly = {
+    readonly: number;
+}
+
+export type Ref = {
+    ref: number;
+}
+
+export type Register = {
+    register: number;
+}
+
+export type ReinterpretCast = {
+    reinterpret_cast: number;
+}
+
+export type Repeat = {
+    repeat: number;
+}
+
+export type Require = {
+    require: number;
+}
+
+export type Required = {
+    required: number;
+}
+
+export type Requires = {
+    requires: number;
+}
+
+export type Restrict = {
+    restrict: number;
+}
+
+export type Retain = {
+    retain: number;
+}
+
+export type Rethrows = {
+    rethrows: number;
+}
+
+export type Return = {
+    return: number;
+}
+
+export type Right = {
+    right: number;
+}
+
+export type S = {
+    s: number;
+}
+
+export type Sbyte = {
+    sbyte: number;
+}
+
+export type Sealed = {
+    sealed: number;
+}
+
+export type Select = {
+    select: number;
+}
+
+export type SelfClass = {
+    self: number;
+}
+
+export type Serialize = {
+    serialize: number;
+}
+
+export type Set = {
+    set: number;
+}
+
+export type Short = {
+    short: number;
+}
+
+export type Signed = {
+    signed: number;
+}
+
+export type Sizeof = {
+    sizeof: number;
+}
+
+export type Stackalloc = {
+    stackalloc: number;
+}
+
+export type Static = {
+    static: number;
+}
+
+export type StaticAssert = {
+    static_assert: number;
+}
+
+export type StaticCast = {
+    static_cast: number;
+}
+
+export type Strictfp = {
+    strictfp: number;
+}
+
+export type String = {
+    string: number;
+}
+
+export type Struct = {
+    struct: number;
+}
+
+export type Subscript = {
+    subscript: number;
+}
+
+export type Super = {
+    super: number;
+}
+
+export type Switch = {
+    switch: number;
+}
+
+export type Symbol = {
+    symbol: number;
+}
+
+export type Synchronized = {
+    synchronized: number;
+}
+
+export type System = {
+    system: number;
+}
+
+export type Template = {
+    template: number;
+}
+
+export type Then = {
+    then: number;
+}
+
+export type This = {
+    this: number;
+}
+
+export type ThreadLocal = {
+    thread_local: number;
+}
+
+export type Throw = {
+    throw: number;
+}
+
+export type Throws = {
+    throws: number;
+}
+
+export type ToJSON = {
+    to_json: number;
+}
+
+export type TopLevelClass = {
+    top_level: number;
+}
+
+export type Transient = {
+    transient: number;
+}
+
+export type TrueClass = {
+    true: number;
+}
+
+export type Try = {
+    try: number;
+}
+
+export type TypeClass = {
+    type: number;
+}
+
+export type Typealias = {
+    typealias: number;
+}
+
+export type Typedef = {
+    typedef: number;
+}
+
+export type Typeid = {
+    typeid: number;
+}
+
+export type Typename = {
+    typename: number;
+}
+
+export type Typeof = {
+    typeof: number;
+}
+
+export type Uint = {
+    uint: number;
+}
+
+export type Ulong = {
+    ulong: number;
+}
+
+export type Unchecked = {
+    unchecked: number;
+}
+
+export type Undefined = {
+    undefined: number;
+}
+
+export type Obj5 = {
+    YES:      Yes;
+    dummy:    number;
+    union:    Union;
+    unowned:  Unowned;
+    unsafe:   Unsafe;
+    unsigned: Unsigned;
+    ushort:   Ushort;
+    using:    Using;
+    var:      Var;
+    virtual:  Virtual;
+    void:     Void;
+    volatile: Volatile;
+    wchar_t:  WcharT;
+    weak:     Weak;
+    where:    Where;
+    while:    While;
+    willSet:  WillSet;
+    with:     With;
+    xor:      Xor;
+    xor_eq:   XorEq;
+    yield:    Yield;
+}
+
+export type Yes = {
+    YES: number;
+}
+
+export type Union = {
+    union: number;
+}
+
+export type Unowned = {
+    unowned: number;
+}
+
+export type Unsafe = {
+    unsafe: number;
+}
+
+export type Unsigned = {
+    unsigned: number;
+}
+
+export type Ushort = {
+    ushort: number;
+}
+
+export type Using = {
+    using: number;
+}
+
+export type Var = {
+    var: number;
+}
+
+export type Virtual = {
+    virtual: number;
+}
+
+export type Void = {
+    void: number;
+}
+
+export type Volatile = {
+    volatile: number;
+}
+
+export type WcharT = {
+    wchar_t: number;
+}
+
+export type Weak = {
+    weak: number;
+}
+
+export type Where = {
+    where: number;
+}
+
+export type While = {
+    while: number;
+}
+
+export type WillSet = {
+    willSet: number;
+}
+
+export type With = {
+    with: number;
+}
+
+export type Xor = {
+    xor: number;
+}
+
+export type XorEq = {
+    xor_eq: number;
+}
+
+export type Yield = {
+    yield: number;
+}
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+export class Convert {
+    public static toTopLevel(json: string): TopLevel {
+        return cast(JSON.parse(json), r("TopLevel"));
+    }
+
+    public static topLevelToJson(value: TopLevel): string {
+        return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+    }
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = ''): never {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "obj1", js: "obj1", typ: r("Obj1") },
+        { json: "obj2", js: "obj2", typ: r("Obj2") },
+        { json: "obj3", js: "obj3", typ: r("Obj3") },
+        { json: "obj4", js: "obj4", typ: r("Obj4") },
+        { json: "obj5", js: "obj5", typ: r("Obj5") },
+    ], false),
+    "Obj1": o([
+        { json: "Any", js: "Any", typ: r("Any") },
+        { json: "BOOL", js: "BOOL", typ: r("Bool") },
+        { json: "Class", js: "Class", typ: r("Class") },
+        { json: "_", js: "_", typ: r("Empty") },
+        { json: "_Bool", js: "_Bool", typ: r("BoolClass") },
+        { json: "_Complex", js: "_Complex", typ: r("Complex") },
+        { json: "_Imaginery", js: "_Imaginery", typ: r("Imaginery") },
+        { json: "abstract", js: "abstract", typ: r("Abstract") },
+        { json: "alignas", js: "alignas", typ: r("Alignas") },
+        { json: "alignof", js: "alignof", typ: r("Alignof") },
+        { json: "and", js: "and", typ: r("And") },
+        { json: "and_eq", js: "and_eq", typ: r("AndEq") },
+        { json: "any", js: "any", typ: r("AnyClass") },
+        { json: "array", js: "array", typ: r("ArrayClass") },
+        { json: "as", js: "as", typ: r("As") },
+        { json: "asm", js: "asm", typ: r("ASM") },
+        { json: "assert", js: "assert", typ: r("Assert") },
+        { json: "associatedtype", js: "associatedtype", typ: r("Associatedtype") },
+        { json: "associativity", js: "associativity", typ: r("Associativity") },
+        { json: "async", js: "async", typ: r("Async") },
+        { json: "atomic", js: "atomic", typ: r("Atomic") },
+        { json: "atomic_cancel", js: "atomic_cancel", typ: r("AtomicCancel") },
+        { json: "atomic_commit", js: "atomic_commit", typ: r("AtomicCommit") },
+        { json: "atomic_noexcept", js: "atomic_noexcept", typ: r("AtomicNoexcept") },
+        { json: "auto", js: "auto", typ: r("Auto") },
+        { json: "await", js: "await", typ: r("Await") },
+        { json: "base", js: "base", typ: r("Base") },
+        { json: "bitand", js: "bitand", typ: r("Bitand") },
+        { json: "bitor", js: "bitor", typ: r("Bitor") },
+        { json: "bool", js: "bool", typ: r("Obj1Bool") },
+        { json: "boolean", js: "boolean", typ: r("Boolean") },
+        { json: "break", js: "break", typ: r("Break") },
+        { json: "bycopy", js: "bycopy", typ: r("Bycopy") },
+        { json: "byref", js: "byref", typ: r("Byref") },
+        { json: "byte", js: "byte", typ: r("Byte") },
+        { json: "case", js: "case", typ: r("Case") },
+        { json: "catch", js: "catch", typ: r("Catch") },
+        { json: "chan", js: "chan", typ: r("Chan") },
+        { json: "char", js: "char", typ: r("Char") },
+        { json: "char16_t", js: "char16_t", typ: r("Char16T") },
+        { json: "char32_t", js: "char32_t", typ: r("Char32T") },
+        { json: "checked", js: "checked", typ: r("Checked") },
+        { json: "class", js: "class", typ: r("ClassClass") },
+        { json: "clone", js: "clone", typ: r("Clone") },
+        { json: "co_await", js: "co_await", typ: r("CoAwait") },
+        { json: "co_return", js: "co_return", typ: r("CoReturn") },
+        { json: "co_yield", js: "co_yield", typ: r("CoYield") },
+        { json: "compl", js: "compl", typ: r("Compl") },
+        { json: "concept", js: "concept", typ: r("Concept") },
+        { json: "console", js: "console", typ: r("Console") },
+        { json: "const", js: "const", typ: r("Const") },
+        { json: "const_cast", js: "const_cast", typ: r("ConstCast") },
+        { json: "constexpr", js: "constexpr", typ: r("Constexpr") },
+        { json: "constructor", js: "constructor", typ: r("Constructor") },
+        { json: "continue", js: "continue", typ: r("Continue") },
+        { json: "convenience", js: "convenience", typ: r("Convenience") },
+        { json: "convert", js: "convert", typ: r("ConvertClass") },
+        { json: "converter", js: "converter", typ: r("Converter") },
+        { json: "date", js: "date", typ: r("DateClass") },
+        { json: "date_parse_handling", js: "date_parse_handling", typ: r("DateParseHandling") },
+        { json: "debugger", js: "debugger", typ: r("Debugger") },
+        { json: "decimal", js: "decimal", typ: r("Decimal") },
+        { json: "declare", js: "declare", typ: r("Declare") },
+        { json: "decltype", js: "decltype", typ: r("Decltype") },
+        { json: "decode_string", js: "decode_string", typ: r("DecodeString") },
+        { json: "dummy", js: "dummy", typ: i(0) },
+    ], false),
+    "Any": o([
+        { json: "Any", js: "Any", typ: i(0) },
+    ], false),
+    "Bool": o([
+        { json: "BOOL", js: "BOOL", typ: i(0) },
+    ], false),
+    "Class": o([
+        { json: "Class", js: "Class", typ: i(0) },
+    ], false),
+    "Empty": o([
+        { json: "_", js: "_", typ: i(0) },
+    ], false),
+    "BoolClass": o([
+        { json: "_Bool", js: "_Bool", typ: i(0) },
+    ], false),
+    "Complex": o([
+        { json: "_Complex", js: "_Complex", typ: i(0) },
+    ], false),
+    "Imaginery": o([
+        { json: "_Imaginery", js: "_Imaginery", typ: i(0) },
+    ], false),
+    "Abstract": o([
+        { json: "abstract", js: "abstract", typ: i(0) },
+    ], false),
+    "Alignas": o([
+        { json: "alignas", js: "alignas", typ: i(0) },
+    ], false),
+    "Alignof": o([
+        { json: "alignof", js: "alignof", typ: i(0) },
+    ], false),
+    "And": o([
+        { json: "and", js: "and", typ: i(0) },
+    ], false),
+    "AndEq": o([
+        { json: "and_eq", js: "and_eq", typ: i(0) },
+    ], false),
+    "AnyClass": o([
+        { json: "any", js: "any", typ: i(0) },
+    ], false),
+    "ArrayClass": o([
+        { json: "array", js: "array", typ: i(0) },
+    ], false),
+    "As": o([
+        { json: "as", js: "as", typ: i(0) },
+    ], false),
+    "ASM": o([
+        { json: "asm", js: "asm", typ: i(0) },
+    ], false),
+    "Assert": o([
+        { json: "assert", js: "assert", typ: i(0) },
+    ], false),
+    "Associatedtype": o([
+        { json: "associatedtype", js: "associatedtype", typ: i(0) },
+    ], false),
+    "Associativity": o([
+        { json: "associativity", js: "associativity", typ: i(0) },
+    ], false),
+    "Async": o([
+        { json: "async", js: "async", typ: i(0) },
+    ], false),
+    "Atomic": o([
+        { json: "atomic", js: "atomic", typ: i(0) },
+    ], false),
+    "AtomicCancel": o([
+        { json: "atomic_cancel", js: "atomic_cancel", typ: i(0) },
+    ], false),
+    "AtomicCommit": o([
+        { json: "atomic_commit", js: "atomic_commit", typ: i(0) },
+    ], false),
+    "AtomicNoexcept": o([
+        { json: "atomic_noexcept", js: "atomic_noexcept", typ: i(0) },
+    ], false),
+    "Auto": o([
+        { json: "auto", js: "auto", typ: i(0) },
+    ], false),
+    "Await": o([
+        { json: "await", js: "await", typ: i(0) },
+    ], false),
+    "Base": o([
+        { json: "base", js: "base", typ: i(0) },
+    ], false),
+    "Bitand": o([
+        { json: "bitand", js: "bitand", typ: i(0) },
+    ], false),
+    "Bitor": o([
+        { json: "bitor", js: "bitor", typ: i(0) },
+    ], false),
+    "Obj1Bool": o([
+        { json: "bool", js: "bool", typ: i(0) },
+    ], false),
+    "Boolean": o([
+        { json: "boolean", js: "boolean", typ: i(0) },
+    ], false),
+    "Break": o([
+        { json: "break", js: "break", typ: i(0) },
+    ], false),
+    "Bycopy": o([
+        { json: "bycopy", js: "bycopy", typ: i(0) },
+    ], false),
+    "Byref": o([
+        { json: "byref", js: "byref", typ: i(0) },
+    ], false),
+    "Byte": o([
+        { json: "byte", js: "byte", typ: i(0) },
+    ], false),
+    "Case": o([
+        { json: "case", js: "case", typ: i(0) },
+    ], false),
+    "Catch": o([
+        { json: "catch", js: "catch", typ: i(0) },
+    ], false),
+    "Chan": o([
+        { json: "chan", js: "chan", typ: i(0) },
+    ], false),
+    "Char": o([
+        { json: "char", js: "char", typ: i(0) },
+    ], false),
+    "Char16T": o([
+        { json: "char16_t", js: "char16_t", typ: i(0) },
+    ], false),
+    "Char32T": o([
+        { json: "char32_t", js: "char32_t", typ: i(0) },
+    ], false),
+    "Checked": o([
+        { json: "checked", js: "checked", typ: i(0) },
+    ], false),
+    "ClassClass": o([
+        { json: "class", js: "class", typ: i(0) },
+    ], false),
+    "Clone": o([
+        { json: "clone", js: "clone", typ: i(0) },
+    ], false),
+    "CoAwait": o([
+        { json: "co_await", js: "co_await", typ: i(0) },
+    ], false),
+    "CoReturn": o([
+        { json: "co_return", js: "co_return", typ: i(0) },
+    ], false),
+    "CoYield": o([
+        { json: "co_yield", js: "co_yield", typ: i(0) },
+    ], false),
+    "Compl": o([
+        { json: "compl", js: "compl", typ: i(0) },
+    ], false),
+    "Concept": o([
+        { json: "concept", js: "concept", typ: i(0) },
+    ], false),
+    "Console": o([
+        { json: "console", js: "console", typ: i(0) },
+    ], false),
+    "Const": o([
+        { json: "const", js: "const", typ: i(0) },
+    ], false),
+    "ConstCast": o([
+        { json: "const_cast", js: "const_cast", typ: i(0) },
+    ], false),
+    "Constexpr": o([
+        { json: "constexpr", js: "constexpr", typ: i(0) },
+    ], false),
+    "Constructor": o([
+        { json: "constructor", js: "constructor", typ: i(0) },
+    ], false),
+    "Continue": o([
+        { json: "continue", js: "continue", typ: i(0) },
+    ], false),
+    "Convenience": o([
+        { json: "convenience", js: "convenience", typ: i(0) },
+    ], false),
+    "ConvertClass": o([
+        { json: "convert", js: "convert", typ: i(0) },
+    ], false),
+    "Converter": o([
+        { json: "converter", js: "converter", typ: i(0) },
+    ], false),
+    "DateClass": o([
+        { json: "date", js: "date", typ: i(0) },
+    ], false),
+    "DateParseHandling": o([
+        { json: "date_parse_handling", js: "date_parse_handling", typ: i(0) },
+    ], false),
+    "Debugger": o([
+        { json: "debugger", js: "debugger", typ: i(0) },
+    ], false),
+    "Decimal": o([
+        { json: "decimal", js: "decimal", typ: i(0) },
+    ], false),
+    "Declare": o([
+        { json: "declare", js: "declare", typ: i(0) },
+    ], false),
+    "Decltype": o([
+        { json: "decltype", js: "decltype", typ: i(0) },
+    ], false),
+    "DecodeString": o([
+        { json: "decode_string", js: "decode_string", typ: i(0) },
+    ], false),
+    "Obj2": o([
+        { json: "False", js: "False", typ: r("False") },
+        { json: "IMP", js: "IMP", typ: r("Imp") },
+        { json: "def", js: "def", typ: r("Def") },
+        { json: "default", js: "default", typ: r("Default") },
+        { json: "defer", js: "defer", typ: r("Defer") },
+        { json: "deinit", js: "deinit", typ: r("Deinit") },
+        { json: "del", js: "del", typ: r("Del") },
+        { json: "delegate", js: "delegate", typ: r("Delegate") },
+        { json: "delete", js: "delete", typ: r("Delete") },
+        { json: "dict", js: "dict", typ: r("Dict") },
+        { json: "dictionary", js: "dictionary", typ: r("Dictionary") },
+        { json: "didSet", js: "didSet", typ: r("DidSet") },
+        { json: "do", js: "do", typ: r("Do") },
+        { json: "double", js: "double", typ: r("Double") },
+        { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "dynamic", js: "dynamic", typ: r("Dynamic") },
+        { json: "dynamic_cast", js: "dynamic_cast", typ: r("DynamicCast") },
+        { json: "elif", js: "elif", typ: r("Elif") },
+        { json: "else", js: "else", typ: r("Else") },
+        { json: "encode_quick_type", js: "encode_quick_type", typ: r("EncodeQuickType") },
+        { json: "enum", js: "enum", typ: r("Enum") },
+        { json: "equalityContract", js: "equalityContract", typ: r("EqualityContract") },
+        { json: "event", js: "event", typ: r("Event") },
+        { json: "except", js: "except", typ: r("Except") },
+        { json: "exception", js: "exception", typ: r("Exception") },
+        { json: "explicit", js: "explicit", typ: r("Explicit") },
+        { json: "export", js: "export", typ: r("Export") },
+        { json: "exposing", js: "exposing", typ: r("Exposing") },
+        { json: "extends", js: "extends", typ: r("Extends") },
+        { json: "extension", js: "extension", typ: r("Extension") },
+        { json: "extern", js: "extern", typ: r("Extern") },
+        { json: "fallthrough", js: "fallthrough", typ: r("Fallthrough") },
+        { json: "false", js: "false", typ: r("FalseClass") },
+        { json: "fileprivate", js: "fileprivate", typ: r("Fileprivate") },
+        { json: "final", js: "final", typ: r("Final") },
+        { json: "finally", js: "finally", typ: r("Finally") },
+        { json: "fixed", js: "fixed", typ: r("Fixed") },
+        { json: "float", js: "float", typ: r("Float") },
+        { json: "for", js: "for", typ: r("For") },
+        { json: "foreach", js: "foreach", typ: r("Foreach") },
+        { json: "friend", js: "friend", typ: r("Friend") },
+        { json: "from", js: "from", typ: r("From") },
+        { json: "from_json", js: "from_json", typ: r("FromJSON") },
+        { json: "func", js: "func", typ: r("Func") },
+        { json: "function", js: "function", typ: r("Function") },
+        { json: "get", js: "get", typ: r("Get") },
+        { json: "global", js: "global", typ: r("Global") },
+        { json: "go", js: "go", typ: r("Go") },
+        { json: "goto", js: "goto", typ: r("Goto") },
+        { json: "guard", js: "guard", typ: r("Guard") },
+        { json: "hasOwnProperty", js: "hasOwnProperty", typ: r("HasOwnProperty") },
+        { json: "id", js: "id", typ: r("ID") },
+        { json: "if", js: "if", typ: r("If") },
+        { json: "implements", js: "implements", typ: r("Implements") },
+        { json: "implicit", js: "implicit", typ: r("Implicit") },
+        { json: "import", js: "import", typ: r("Import") },
+        { json: "in", js: "in", typ: r("In") },
+        { json: "indirect", js: "indirect", typ: r("Indirect") },
+        { json: "infix", js: "infix", typ: r("Infix") },
+        { json: "init", js: "init", typ: r("Init") },
+        { json: "inline", js: "inline", typ: r("Inline") },
+        { json: "inout", js: "inout", typ: r("Inout") },
+        { json: "instanceof", js: "instanceof", typ: r("Instanceof") },
+        { json: "int", js: "int", typ: r("Int") },
+        { json: "interface", js: "interface", typ: r("Interface") },
+        { json: "internal", js: "internal", typ: r("Internal") },
+    ], false),
+    "False": o([
+        { json: "False", js: "False", typ: i(0) },
+    ], false),
+    "Imp": o([
+        { json: "IMP", js: "IMP", typ: i(0) },
+    ], false),
+    "Def": o([
+        { json: "def", js: "def", typ: i(0) },
+    ], false),
+    "Default": o([
+        { json: "default", js: "default", typ: i(0) },
+    ], false),
+    "Defer": o([
+        { json: "defer", js: "defer", typ: i(0) },
+    ], false),
+    "Deinit": o([
+        { json: "deinit", js: "deinit", typ: i(0) },
+    ], false),
+    "Del": o([
+        { json: "del", js: "del", typ: i(0) },
+    ], false),
+    "Delegate": o([
+        { json: "delegate", js: "delegate", typ: i(0) },
+    ], false),
+    "Delete": o([
+        { json: "delete", js: "delete", typ: i(0) },
+    ], false),
+    "Dict": o([
+        { json: "dict", js: "dict", typ: i(0) },
+    ], false),
+    "Dictionary": o([
+        { json: "dictionary", js: "dictionary", typ: i(0) },
+    ], false),
+    "DidSet": o([
+        { json: "didSet", js: "didSet", typ: i(0) },
+    ], false),
+    "Do": o([
+        { json: "do", js: "do", typ: i(0) },
+    ], false),
+    "Double": o([
+        { json: "double", js: "double", typ: i(0) },
+    ], false),
+    "Dynamic": o([
+        { json: "dynamic", js: "dynamic", typ: i(0) },
+    ], false),
+    "DynamicCast": o([
+        { json: "dynamic_cast", js: "dynamic_cast", typ: i(0) },
+    ], false),
+    "Elif": o([
+        { json: "elif", js: "elif", typ: i(0) },
+    ], false),
+    "Else": o([
+        { json: "else", js: "else", typ: i(0) },
+    ], false),
+    "EncodeQuickType": o([
+        { json: "encode_quick_type", js: "encode_quick_type", typ: i(0) },
+    ], false),
+    "Enum": o([
+        { json: "enum", js: "enum", typ: i(0) },
+    ], false),
+    "EqualityContract": o([
+        { json: "equalityContract", js: "equalityContract", typ: i(0) },
+    ], false),
+    "Event": o([
+        { json: "event", js: "event", typ: i(0) },
+    ], false),
+    "Except": o([
+        { json: "except", js: "except", typ: i(0) },
+    ], false),
+    "Exception": o([
+        { json: "exception", js: "exception", typ: i(0) },
+    ], false),
+    "Explicit": o([
+        { json: "explicit", js: "explicit", typ: i(0) },
+    ], false),
+    "Export": o([
+        { json: "export", js: "export", typ: i(0) },
+    ], false),
+    "Exposing": o([
+        { json: "exposing", js: "exposing", typ: i(0) },
+    ], false),
+    "Extends": o([
+        { json: "extends", js: "extends", typ: i(0) },
+    ], false),
+    "Extension": o([
+        { json: "extension", js: "extension", typ: i(0) },
+    ], false),
+    "Extern": o([
+        { json: "extern", js: "extern", typ: i(0) },
+    ], false),
+    "Fallthrough": o([
+        { json: "fallthrough", js: "fallthrough", typ: i(0) },
+    ], false),
+    "FalseClass": o([
+        { json: "false", js: "false", typ: i(0) },
+    ], false),
+    "Fileprivate": o([
+        { json: "fileprivate", js: "fileprivate", typ: i(0) },
+    ], false),
+    "Final": o([
+        { json: "final", js: "final", typ: i(0) },
+    ], false),
+    "Finally": o([
+        { json: "finally", js: "finally", typ: i(0) },
+    ], false),
+    "Fixed": o([
+        { json: "fixed", js: "fixed", typ: i(0) },
+    ], false),
+    "Float": o([
+        { json: "float", js: "float", typ: i(0) },
+    ], false),
+    "For": o([
+        { json: "for", js: "for", typ: i(0) },
+    ], false),
+    "Foreach": o([
+        { json: "foreach", js: "foreach", typ: i(0) },
+    ], false),
+    "Friend": o([
+        { json: "friend", js: "friend", typ: i(0) },
+    ], false),
+    "From": o([
+        { json: "from", js: "from", typ: i(0) },
+    ], false),
+    "FromJSON": o([
+        { json: "from_json", js: "from_json", typ: i(0) },
+    ], false),
+    "Func": o([
+        { json: "func", js: "func", typ: i(0) },
+    ], false),
+    "Function": o([
+        { json: "function", js: "function", typ: i(0) },
+    ], false),
+    "Get": o([
+        { json: "get", js: "get", typ: i(0) },
+    ], false),
+    "Global": o([
+        { json: "global", js: "global", typ: i(0) },
+    ], false),
+    "Go": o([
+        { json: "go", js: "go", typ: i(0) },
+    ], false),
+    "Goto": o([
+        { json: "goto", js: "goto", typ: i(0) },
+    ], false),
+    "Guard": o([
+        { json: "guard", js: "guard", typ: i(0) },
+    ], false),
+    "HasOwnProperty": o([
+        { json: "hasOwnProperty", js: "hasOwnProperty", typ: i(0) },
+    ], false),
+    "ID": o([
+        { json: "id", js: "id", typ: i(0) },
+    ], false),
+    "If": o([
+        { json: "if", js: "if", typ: i(0) },
+    ], false),
+    "Implements": o([
+        { json: "implements", js: "implements", typ: i(0) },
+    ], false),
+    "Implicit": o([
+        { json: "implicit", js: "implicit", typ: i(0) },
+    ], false),
+    "Import": o([
+        { json: "import", js: "import", typ: i(0) },
+    ], false),
+    "In": o([
+        { json: "in", js: "in", typ: i(0) },
+    ], false),
+    "Indirect": o([
+        { json: "indirect", js: "indirect", typ: i(0) },
+    ], false),
+    "Infix": o([
+        { json: "infix", js: "infix", typ: i(0) },
+    ], false),
+    "Init": o([
+        { json: "init", js: "init", typ: i(0) },
+    ], false),
+    "Inline": o([
+        { json: "inline", js: "inline", typ: i(0) },
+    ], false),
+    "Inout": o([
+        { json: "inout", js: "inout", typ: i(0) },
+    ], false),
+    "Instanceof": o([
+        { json: "instanceof", js: "instanceof", typ: i(0) },
+    ], false),
+    "Int": o([
+        { json: "int", js: "int", typ: i(0) },
+    ], false),
+    "Interface": o([
+        { json: "interface", js: "interface", typ: i(0) },
+    ], false),
+    "Internal": o([
+        { json: "internal", js: "internal", typ: i(0) },
+    ], false),
+    "Obj3": o([
+        { json: "NO", js: "NO", typ: r("No") },
+        { json: "NSString", js: "NSString", typ: r("NSString") },
+        { json: "NULL", js: "NULL", typ: r("Null") },
+        { json: "None", js: "None", typ: r("None") },
+        { json: "Protocol", js: "Protocol", typ: r("Protocol") },
+        { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "is", js: "is", typ: r("Is") },
+        { json: "iterable", js: "iterable", typ: r("Iterable") },
+        { json: "jdec", js: "jdec", typ: r("Jdec") },
+        { json: "jenc", js: "jenc", typ: r("Jenc") },
+        { json: "jpipe", js: "jpipe", typ: r("Jpipe") },
+        { json: "json", js: "json", typ: r("JSON") },
+        { json: "json_converter", js: "json_converter", typ: r("JSONConverter") },
+        { json: "json_serializer", js: "json_serializer", typ: r("JSONSerializer") },
+        { json: "json_token", js: "json_token", typ: r("JSONToken") },
+        { json: "json_writer", js: "json_writer", typ: r("JSONWriter") },
+        { json: "lambda", js: "lambda", typ: r("Lambda") },
+        { json: "lazy", js: "lazy", typ: r("Lazy") },
+        { json: "left", js: "left", typ: r("Left") },
+        { json: "let", js: "let", typ: r("Let") },
+        { json: "list", js: "list", typ: r("List") },
+        { json: "lock", js: "lock", typ: r("Lock") },
+        { json: "long", js: "long", typ: r("Long") },
+        { json: "map", js: "map", typ: r("Map") },
+        { json: "metadata_property_handling", js: "metadata_property_handling", typ: r("MetadataPropertyHandling") },
+        { json: "module", js: "module", typ: r("Module") },
+        { json: "mutable", js: "mutable", typ: r("Mutable") },
+        { json: "mutating", js: "mutating", typ: r("Mutating") },
+        { json: "namespace", js: "namespace", typ: r("Namespace") },
+        { json: "native", js: "native", typ: r("Native") },
+        { json: "new", js: "new", typ: r("New") },
+        { json: "newtonsoft", js: "newtonsoft", typ: r("Newtonsoft") },
+        { json: "nil", js: "nil", typ: r("Nil") },
+        { json: "noexcept", js: "noexcept", typ: r("Noexcept") },
+        { json: "nonatomic", js: "nonatomic", typ: r("Nonatomic") },
+        { json: "none", js: "none", typ: r("NoneClass") },
+        { json: "nonlocal", js: "nonlocal", typ: r("Nonlocal") },
+        { json: "nonmutating", js: "nonmutating", typ: r("Nonmutating") },
+        { json: "not", js: "not", typ: r("Not") },
+        { json: "not_eq", js: "not_eq", typ: r("NotEq") },
+        { json: "null", js: "null", typ: r("NullClass") },
+        { json: "nullptr", js: "nullptr", typ: r("Nullptr") },
+        { json: "number", js: "number", typ: r("Number") },
+        { json: "object", js: "object", typ: r("Object") },
+        { json: "of", js: "of", typ: r("Of") },
+        { json: "oneway", js: "oneway", typ: r("Oneway") },
+        { json: "open", js: "open", typ: r("Open") },
+        { json: "operator", js: "operator", typ: r("Operator") },
+        { json: "optional", js: "optional", typ: r("Optional") },
+        { json: "or", js: "or", typ: r("Or") },
+        { json: "or_eq", js: "or_eq", typ: r("OrEq") },
+        { json: "out", js: "out", typ: r("Out") },
+        { json: "override", js: "override", typ: r("Override") },
+        { json: "package", js: "package", typ: r("Package") },
+        { json: "params", js: "params", typ: r("Params") },
+        { json: "pass", js: "pass", typ: r("Pass") },
+        { json: "port", js: "port", typ: r("Port") },
+        { json: "postfix", js: "postfix", typ: r("Postfix") },
+        { json: "precedence", js: "precedence", typ: r("Precedence") },
+        { json: "prefix", js: "prefix", typ: r("Prefix") },
+        { json: "print", js: "print", typ: r("Print") },
+        { json: "printMembers", js: "printMembers", typ: r("PrintMembers") },
+        { json: "printf", js: "printf", typ: r("Printf") },
+        { json: "private", js: "private", typ: r("Private") },
+        { json: "protected", js: "protected", typ: r("Protected") },
+        { json: "protocol", js: "protocol", typ: r("ProtocolClass") },
+    ], false),
+    "No": o([
+        { json: "NO", js: "NO", typ: i(0) },
+    ], false),
+    "NSString": o([
+        { json: "NSString", js: "NSString", typ: i(0) },
+    ], false),
+    "Null": o([
+        { json: "NULL", js: "NULL", typ: i(0) },
+    ], false),
+    "None": o([
+        { json: "None", js: "None", typ: i(0) },
+    ], false),
+    "Protocol": o([
+        { json: "Protocol", js: "Protocol", typ: i(0) },
+    ], false),
+    "Is": o([
+        { json: "is", js: "is", typ: i(0) },
+    ], false),
+    "Iterable": o([
+        { json: "iterable", js: "iterable", typ: i(0) },
+    ], false),
+    "Jdec": o([
+        { json: "jdec", js: "jdec", typ: i(0) },
+    ], false),
+    "Jenc": o([
+        { json: "jenc", js: "jenc", typ: i(0) },
+    ], false),
+    "Jpipe": o([
+        { json: "jpipe", js: "jpipe", typ: i(0) },
+    ], false),
+    "JSON": o([
+        { json: "json", js: "json", typ: i(0) },
+    ], false),
+    "JSONConverter": o([
+        { json: "json_converter", js: "json_converter", typ: i(0) },
+    ], false),
+    "JSONSerializer": o([
+        { json: "json_serializer", js: "json_serializer", typ: i(0) },
+    ], false),
+    "JSONToken": o([
+        { json: "json_token", js: "json_token", typ: i(0) },
+    ], false),
+    "JSONWriter": o([
+        { json: "json_writer", js: "json_writer", typ: i(0) },
+    ], false),
+    "Lambda": o([
+        { json: "lambda", js: "lambda", typ: i(0) },
+    ], false),
+    "Lazy": o([
+        { json: "lazy", js: "lazy", typ: i(0) },
+    ], false),
+    "Left": o([
+        { json: "left", js: "left", typ: i(0) },
+    ], false),
+    "Let": o([
+        { json: "let", js: "let", typ: i(0) },
+    ], false),
+    "List": o([
+        { json: "list", js: "list", typ: i(0) },
+    ], false),
+    "Lock": o([
+        { json: "lock", js: "lock", typ: i(0) },
+    ], false),
+    "Long": o([
+        { json: "long", js: "long", typ: i(0) },
+    ], false),
+    "Map": o([
+        { json: "map", js: "map", typ: i(0) },
+    ], false),
+    "MetadataPropertyHandling": o([
+        { json: "metadata_property_handling", js: "metadata_property_handling", typ: i(0) },
+    ], false),
+    "Module": o([
+        { json: "module", js: "module", typ: i(0) },
+    ], false),
+    "Mutable": o([
+        { json: "mutable", js: "mutable", typ: i(0) },
+    ], false),
+    "Mutating": o([
+        { json: "mutating", js: "mutating", typ: i(0) },
+    ], false),
+    "Namespace": o([
+        { json: "namespace", js: "namespace", typ: i(0) },
+    ], false),
+    "Native": o([
+        { json: "native", js: "native", typ: i(0) },
+    ], false),
+    "New": o([
+        { json: "new", js: "new", typ: i(0) },
+    ], false),
+    "Newtonsoft": o([
+        { json: "newtonsoft", js: "newtonsoft", typ: i(0) },
+    ], false),
+    "Nil": o([
+        { json: "nil", js: "nil", typ: i(0) },
+    ], false),
+    "Noexcept": o([
+        { json: "noexcept", js: "noexcept", typ: i(0) },
+    ], false),
+    "Nonatomic": o([
+        { json: "nonatomic", js: "nonatomic", typ: i(0) },
+    ], false),
+    "NoneClass": o([
+        { json: "none", js: "none", typ: i(0) },
+    ], false),
+    "Nonlocal": o([
+        { json: "nonlocal", js: "nonlocal", typ: i(0) },
+    ], false),
+    "Nonmutating": o([
+        { json: "nonmutating", js: "nonmutating", typ: i(0) },
+    ], false),
+    "Not": o([
+        { json: "not", js: "not", typ: i(0) },
+    ], false),
+    "NotEq": o([
+        { json: "not_eq", js: "not_eq", typ: i(0) },
+    ], false),
+    "NullClass": o([
+        { json: "null", js: "null", typ: i(0) },
+    ], false),
+    "Nullptr": o([
+        { json: "nullptr", js: "nullptr", typ: i(0) },
+    ], false),
+    "Number": o([
+        { json: "number", js: "number", typ: i(0) },
+    ], false),
+    "Object": o([
+        { json: "object", js: "object", typ: i(0) },
+    ], false),
+    "Of": o([
+        { json: "of", js: "of", typ: i(0) },
+    ], false),
+    "Oneway": o([
+        { json: "oneway", js: "oneway", typ: i(0) },
+    ], false),
+    "Open": o([
+        { json: "open", js: "open", typ: i(0) },
+    ], false),
+    "Operator": o([
+        { json: "operator", js: "operator", typ: i(0) },
+    ], false),
+    "Optional": o([
+        { json: "optional", js: "optional", typ: i(0) },
+    ], false),
+    "Or": o([
+        { json: "or", js: "or", typ: i(0) },
+    ], false),
+    "OrEq": o([
+        { json: "or_eq", js: "or_eq", typ: i(0) },
+    ], false),
+    "Out": o([
+        { json: "out", js: "out", typ: i(0) },
+    ], false),
+    "Override": o([
+        { json: "override", js: "override", typ: i(0) },
+    ], false),
+    "Package": o([
+        { json: "package", js: "package", typ: i(0) },
+    ], false),
+    "Params": o([
+        { json: "params", js: "params", typ: i(0) },
+    ], false),
+    "Pass": o([
+        { json: "pass", js: "pass", typ: i(0) },
+    ], false),
+    "Port": o([
+        { json: "port", js: "port", typ: i(0) },
+    ], false),
+    "Postfix": o([
+        { json: "postfix", js: "postfix", typ: i(0) },
+    ], false),
+    "Precedence": o([
+        { json: "precedence", js: "precedence", typ: i(0) },
+    ], false),
+    "Prefix": o([
+        { json: "prefix", js: "prefix", typ: i(0) },
+    ], false),
+    "Print": o([
+        { json: "print", js: "print", typ: i(0) },
+    ], false),
+    "PrintMembers": o([
+        { json: "printMembers", js: "printMembers", typ: i(0) },
+    ], false),
+    "Printf": o([
+        { json: "printf", js: "printf", typ: i(0) },
+    ], false),
+    "Private": o([
+        { json: "private", js: "private", typ: i(0) },
+    ], false),
+    "Protected": o([
+        { json: "protected", js: "protected", typ: i(0) },
+    ], false),
+    "ProtocolClass": o([
+        { json: "protocol", js: "protocol", typ: i(0) },
+    ], false),
+    "Obj4": o([
+        { json: "SEL", js: "SEL", typ: r("Sel") },
+        { json: "Self", js: "Self", typ: r("Self") },
+        { json: "True", js: "True", typ: r("True") },
+        { json: "Type", js: "Type", typ: r("Type") },
+        { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "public", js: "public", typ: r("Public") },
+        { json: "quicktype", js: "quicktype", typ: r("Quicktype") },
+        { json: "raise", js: "raise", typ: r("Raise") },
+        { json: "range", js: "range", typ: r("Range") },
+        { json: "readonly", js: "readonly", typ: r("Readonly") },
+        { json: "ref", js: "ref", typ: r("Ref") },
+        { json: "register", js: "register", typ: r("Register") },
+        { json: "reinterpret_cast", js: "reinterpret_cast", typ: r("ReinterpretCast") },
+        { json: "repeat", js: "repeat", typ: r("Repeat") },
+        { json: "require", js: "require", typ: r("Require") },
+        { json: "required", js: "required", typ: r("Required") },
+        { json: "requires", js: "requires", typ: r("Requires") },
+        { json: "restrict", js: "restrict", typ: r("Restrict") },
+        { json: "retain", js: "retain", typ: r("Retain") },
+        { json: "rethrows", js: "rethrows", typ: r("Rethrows") },
+        { json: "return", js: "return", typ: r("Return") },
+        { json: "right", js: "right", typ: r("Right") },
+        { json: "s", js: "s", typ: r("S") },
+        { json: "sbyte", js: "sbyte", typ: r("Sbyte") },
+        { json: "sealed", js: "sealed", typ: r("Sealed") },
+        { json: "select", js: "select", typ: r("Select") },
+        { json: "self", js: "self", typ: r("SelfClass") },
+        { json: "serialize", js: "serialize", typ: r("Serialize") },
+        { json: "set", js: "set", typ: r("Set") },
+        { json: "short", js: "short", typ: r("Short") },
+        { json: "signed", js: "signed", typ: r("Signed") },
+        { json: "sizeof", js: "sizeof", typ: r("Sizeof") },
+        { json: "stackalloc", js: "stackalloc", typ: r("Stackalloc") },
+        { json: "static", js: "static", typ: r("Static") },
+        { json: "static_assert", js: "static_assert", typ: r("StaticAssert") },
+        { json: "static_cast", js: "static_cast", typ: r("StaticCast") },
+        { json: "strictfp", js: "strictfp", typ: r("Strictfp") },
+        { json: "string", js: "string", typ: r("String") },
+        { json: "struct", js: "struct", typ: r("Struct") },
+        { json: "subscript", js: "subscript", typ: r("Subscript") },
+        { json: "super", js: "super", typ: r("Super") },
+        { json: "switch", js: "switch", typ: r("Switch") },
+        { json: "symbol", js: "symbol", typ: r("Symbol") },
+        { json: "synchronized", js: "synchronized", typ: r("Synchronized") },
+        { json: "system", js: "system", typ: r("System") },
+        { json: "template", js: "template", typ: r("Template") },
+        { json: "then", js: "then", typ: r("Then") },
+        { json: "this", js: "this", typ: r("This") },
+        { json: "thread_local", js: "thread_local", typ: r("ThreadLocal") },
+        { json: "throw", js: "throw", typ: r("Throw") },
+        { json: "throws", js: "throws", typ: r("Throws") },
+        { json: "to_json", js: "to_json", typ: r("ToJSON") },
+        { json: "top_level", js: "top_level", typ: r("TopLevelClass") },
+        { json: "transient", js: "transient", typ: r("Transient") },
+        { json: "true", js: "true", typ: r("TrueClass") },
+        { json: "try", js: "try", typ: r("Try") },
+        { json: "type", js: "type", typ: r("TypeClass") },
+        { json: "typealias", js: "typealias", typ: r("Typealias") },
+        { json: "typedef", js: "typedef", typ: r("Typedef") },
+        { json: "typeid", js: "typeid", typ: r("Typeid") },
+        { json: "typename", js: "typename", typ: r("Typename") },
+        { json: "typeof", js: "typeof", typ: r("Typeof") },
+        { json: "uint", js: "uint", typ: r("Uint") },
+        { json: "ulong", js: "ulong", typ: r("Ulong") },
+        { json: "unchecked", js: "unchecked", typ: r("Unchecked") },
+        { json: "undefined", js: "undefined", typ: r("Undefined") },
+    ], false),
+    "Sel": o([
+        { json: "SEL", js: "SEL", typ: i(0) },
+    ], false),
+    "Self": o([
+        { json: "Self", js: "Self", typ: i(0) },
+    ], false),
+    "True": o([
+        { json: "True", js: "True", typ: i(0) },
+    ], false),
+    "Type": o([
+        { json: "Type", js: "Type", typ: i(0) },
+    ], false),
+    "Public": o([
+        { json: "public", js: "public", typ: i(0) },
+    ], false),
+    "Quicktype": o([
+        { json: "quicktype", js: "quicktype", typ: i(0) },
+    ], false),
+    "Raise": o([
+        { json: "raise", js: "raise", typ: i(0) },
+    ], false),
+    "Range": o([
+        { json: "range", js: "range", typ: i(0) },
+    ], false),
+    "Readonly": o([
+        { json: "readonly", js: "readonly", typ: i(0) },
+    ], false),
+    "Ref": o([
+        { json: "ref", js: "ref", typ: i(0) },
+    ], false),
+    "Register": o([
+        { json: "register", js: "register", typ: i(0) },
+    ], false),
+    "ReinterpretCast": o([
+        { json: "reinterpret_cast", js: "reinterpret_cast", typ: i(0) },
+    ], false),
+    "Repeat": o([
+        { json: "repeat", js: "repeat", typ: i(0) },
+    ], false),
+    "Require": o([
+        { json: "require", js: "require", typ: i(0) },
+    ], false),
+    "Required": o([
+        { json: "required", js: "required", typ: i(0) },
+    ], false),
+    "Requires": o([
+        { json: "requires", js: "requires", typ: i(0) },
+    ], false),
+    "Restrict": o([
+        { json: "restrict", js: "restrict", typ: i(0) },
+    ], false),
+    "Retain": o([
+        { json: "retain", js: "retain", typ: i(0) },
+    ], false),
+    "Rethrows": o([
+        { json: "rethrows", js: "rethrows", typ: i(0) },
+    ], false),
+    "Return": o([
+        { json: "return", js: "return", typ: i(0) },
+    ], false),
+    "Right": o([
+        { json: "right", js: "right", typ: i(0) },
+    ], false),
+    "S": o([
+        { json: "s", js: "s", typ: i(0) },
+    ], false),
+    "Sbyte": o([
+        { json: "sbyte", js: "sbyte", typ: i(0) },
+    ], false),
+    "Sealed": o([
+        { json: "sealed", js: "sealed", typ: i(0) },
+    ], false),
+    "Select": o([
+        { json: "select", js: "select", typ: i(0) },
+    ], false),
+    "SelfClass": o([
+        { json: "self", js: "self", typ: i(0) },
+    ], false),
+    "Serialize": o([
+        { json: "serialize", js: "serialize", typ: i(0) },
+    ], false),
+    "Set": o([
+        { json: "set", js: "set", typ: i(0) },
+    ], false),
+    "Short": o([
+        { json: "short", js: "short", typ: i(0) },
+    ], false),
+    "Signed": o([
+        { json: "signed", js: "signed", typ: i(0) },
+    ], false),
+    "Sizeof": o([
+        { json: "sizeof", js: "sizeof", typ: i(0) },
+    ], false),
+    "Stackalloc": o([
+        { json: "stackalloc", js: "stackalloc", typ: i(0) },
+    ], false),
+    "Static": o([
+        { json: "static", js: "static", typ: i(0) },
+    ], false),
+    "StaticAssert": o([
+        { json: "static_assert", js: "static_assert", typ: i(0) },
+    ], false),
+    "StaticCast": o([
+        { json: "static_cast", js: "static_cast", typ: i(0) },
+    ], false),
+    "Strictfp": o([
+        { json: "strictfp", js: "strictfp", typ: i(0) },
+    ], false),
+    "String": o([
+        { json: "string", js: "string", typ: i(0) },
+    ], false),
+    "Struct": o([
+        { json: "struct", js: "struct", typ: i(0) },
+    ], false),
+    "Subscript": o([
+        { json: "subscript", js: "subscript", typ: i(0) },
+    ], false),
+    "Super": o([
+        { json: "super", js: "super", typ: i(0) },
+    ], false),
+    "Switch": o([
+        { json: "switch", js: "switch", typ: i(0) },
+    ], false),
+    "Symbol": o([
+        { json: "symbol", js: "symbol", typ: i(0) },
+    ], false),
+    "Synchronized": o([
+        { json: "synchronized", js: "synchronized", typ: i(0) },
+    ], false),
+    "System": o([
+        { json: "system", js: "system", typ: i(0) },
+    ], false),
+    "Template": o([
+        { json: "template", js: "template", typ: i(0) },
+    ], false),
+    "Then": o([
+        { json: "then", js: "then", typ: i(0) },
+    ], false),
+    "This": o([
+        { json: "this", js: "this", typ: i(0) },
+    ], false),
+    "ThreadLocal": o([
+        { json: "thread_local", js: "thread_local", typ: i(0) },
+    ], false),
+    "Throw": o([
+        { json: "throw", js: "throw", typ: i(0) },
+    ], false),
+    "Throws": o([
+        { json: "throws", js: "throws", typ: i(0) },
+    ], false),
+    "ToJSON": o([
+        { json: "to_json", js: "to_json", typ: i(0) },
+    ], false),
+    "TopLevelClass": o([
+        { json: "top_level", js: "top_level", typ: i(0) },
+    ], false),
+    "Transient": o([
+        { json: "transient", js: "transient", typ: i(0) },
+    ], false),
+    "TrueClass": o([
+        { json: "true", js: "true", typ: i(0) },
+    ], false),
+    "Try": o([
+        { json: "try", js: "try", typ: i(0) },
+    ], false),
+    "TypeClass": o([
+        { json: "type", js: "type", typ: i(0) },
+    ], false),
+    "Typealias": o([
+        { json: "typealias", js: "typealias", typ: i(0) },
+    ], false),
+    "Typedef": o([
+        { json: "typedef", js: "typedef", typ: i(0) },
+    ], false),
+    "Typeid": o([
+        { json: "typeid", js: "typeid", typ: i(0) },
+    ], false),
+    "Typename": o([
+        { json: "typename", js: "typename", typ: i(0) },
+    ], false),
+    "Typeof": o([
+        { json: "typeof", js: "typeof", typ: i(0) },
+    ], false),
+    "Uint": o([
+        { json: "uint", js: "uint", typ: i(0) },
+    ], false),
+    "Ulong": o([
+        { json: "ulong", js: "ulong", typ: i(0) },
+    ], false),
+    "Unchecked": o([
+        { json: "unchecked", js: "unchecked", typ: i(0) },
+    ], false),
+    "Undefined": o([
+        { json: "undefined", js: "undefined", typ: i(0) },
+    ], false),
+    "Obj5": o([
+        { json: "YES", js: "YES", typ: r("Yes") },
+        { json: "dummy", js: "dummy", typ: i(0) },
+        { json: "union", js: "union", typ: r("Union") },
+        { json: "unowned", js: "unowned", typ: r("Unowned") },
+        { json: "unsafe", js: "unsafe", typ: r("Unsafe") },
+        { json: "unsigned", js: "unsigned", typ: r("Unsigned") },
+        { json: "ushort", js: "ushort", typ: r("Ushort") },
+        { json: "using", js: "using", typ: r("Using") },
+        { json: "var", js: "var", typ: r("Var") },
+        { json: "virtual", js: "virtual", typ: r("Virtual") },
+        { json: "void", js: "void", typ: r("Void") },
+        { json: "volatile", js: "volatile", typ: r("Volatile") },
+        { json: "wchar_t", js: "wchar_t", typ: r("WcharT") },
+        { json: "weak", js: "weak", typ: r("Weak") },
+        { json: "where", js: "where", typ: r("Where") },
+        { json: "while", js: "while", typ: r("While") },
+        { json: "willSet", js: "willSet", typ: r("WillSet") },
+        { json: "with", js: "with", typ: r("With") },
+        { json: "xor", js: "xor", typ: r("Xor") },
+        { json: "xor_eq", js: "xor_eq", typ: r("XorEq") },
+        { json: "yield", js: "yield", typ: r("Yield") },
+    ], false),
+    "Yes": o([
+        { json: "YES", js: "YES", typ: i(0) },
+    ], false),
+    "Union": o([
+        { json: "union", js: "union", typ: i(0) },
+    ], false),
+    "Unowned": o([
+        { json: "unowned", js: "unowned", typ: i(0) },
+    ], false),
+    "Unsafe": o([
+        { json: "unsafe", js: "unsafe", typ: i(0) },
+    ], false),
+    "Unsigned": o([
+        { json: "unsigned", js: "unsigned", typ: i(0) },
+    ], false),
+    "Ushort": o([
+        { json: "ushort", js: "ushort", typ: i(0) },
+    ], false),
+    "Using": o([
+        { json: "using", js: "using", typ: i(0) },
+    ], false),
+    "Var": o([
+        { json: "var", js: "var", typ: i(0) },
+    ], false),
+    "Virtual": o([
+        { json: "virtual", js: "virtual", typ: i(0) },
+    ], false),
+    "Void": o([
+        { json: "void", js: "void", typ: i(0) },
+    ], false),
+    "Volatile": o([
+        { json: "volatile", js: "volatile", typ: i(0) },
+    ], false),
+    "WcharT": o([
+        { json: "wchar_t", js: "wchar_t", typ: i(0) },
+    ], false),
+    "Weak": o([
+        { json: "weak", js: "weak", typ: i(0) },
+    ], false),
+    "Where": o([
+        { json: "where", js: "where", typ: i(0) },
+    ], false),
+    "While": o([
+        { json: "while", js: "while", typ: i(0) },
+    ], false),
+    "WillSet": o([
+        { json: "willSet", js: "willSet", typ: i(0) },
+    ], false),
+    "With": o([
+        { json: "with", js: "with", typ: i(0) },
+    ], false),
+    "Xor": o([
+        { json: "xor", js: "xor", typ: i(0) },
+    ], false),
+    "XorEq": o([
+        { json: "xor_eq", js: "xor_eq", typ: i(0) },
+    ], false),
+    "Yield": o([
+        { json: "yield", js: "yield", typ: i(0) },
+    ], false),
+};
diff --git a/base/typescript/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.ts
index fa56caf..b9b7cf4 100644
--- a/base/typescript/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/list.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/list.json/default/TopLevel.ts
index 6e41c66..d68c498 100644
--- a/base/typescript/test/inputs/json/priority/list.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/list.json/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/name-style.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/name-style.json/default/TopLevel.ts
index c0192bd..ec3fd9a 100644
--- a/base/typescript/test/inputs/json/priority/name-style.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/name-style.json/default/TopLevel.ts
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/nbl-stats.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/nbl-stats.json/default/TopLevel.ts
index 6ba8e8b..434e609 100644
--- a/base/typescript/test/inputs/json/priority/nbl-stats.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/nbl-stats.json/default/TopLevel.ts
@@ -412,7 +412,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/nested-objects.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/nested-objects.json/default/TopLevel.ts
index 781f37e..3630ec3 100644
--- a/base/typescript/test/inputs/json/priority/nested-objects.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/nested-objects.json/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/no-classes.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/no-classes.json/default/TopLevel.ts
index b927321..558bb8d 100644
--- a/base/typescript/test/inputs/json/priority/no-classes.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/no-classes.json/default/TopLevel.ts
@@ -133,7 +133,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.ts
index bf870c7..e0bdeb4 100644
--- a/base/typescript/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.ts
@@ -272,7 +272,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/number-map.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/number-map.json/default/TopLevel.ts
index e8bfc7b..5a50cb2 100644
--- a/base/typescript/test/inputs/json/priority/number-map.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/number-map.json/default/TopLevel.ts
@@ -135,7 +135,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/omit-empty.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/omit-empty.json/default/TopLevel.ts
index d74f40b..31d6ae6 100644
--- a/base/typescript/test/inputs/json/priority/omit-empty.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/omit-empty.json/default/TopLevel.ts
@@ -140,7 +140,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/optional-union.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/optional-union.json/default/TopLevel.ts
index 9b98aa0..2f321b5 100644
--- a/base/typescript/test/inputs/json/priority/optional-union.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/optional-union.json/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.ts
index bacd1fe..0b4dd1c 100644
--- a/base/typescript/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.ts
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/php-validation.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/php-validation.json/default/TopLevel.ts
index 3b3c695..ebba414 100644
--- a/base/typescript/test/inputs/json/priority/php-validation.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/php-validation.json/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/recursive.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/recursive.json/default/TopLevel.ts
index 57e92a3..3d37b3f 100644
--- a/base/typescript/test/inputs/json/priority/recursive.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/recursive.json/default/TopLevel.ts
@@ -254,7 +254,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.ts
index 8ed09f6..4d76ae1 100644
--- a/base/typescript/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.ts
@@ -143,7 +143,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.ts
index e0b99d6..aca9d66 100644
--- a/base/typescript/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.ts
@@ -142,7 +142,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/unions.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/unions.json/default/TopLevel.ts
index 6ffd8bf..cd2e7e5 100644
--- a/base/typescript/test/inputs/json/priority/unions.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/unions.json/default/TopLevel.ts
@@ -145,7 +145,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/url.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/url.json/default/TopLevel.ts
index 79dc7b9..8b1dfed 100644
--- a/base/typescript/test/inputs/json/priority/url.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/url.json/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/priority/uuids.json/default/TopLevel.ts b/head/typescript/test/inputs/json/priority/uuids.json/default/TopLevel.ts
index 7918ec2..b837ec9 100644
--- a/base/typescript/test/inputs/json/priority/uuids.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/priority/uuids.json/default/TopLevel.ts
@@ -141,7 +141,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (typeof typ === "object") {
         return typ.hasOwnProperty("uuid")         ? typeof val === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val) ? val : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.ts
index e3c3c16..c1f1880 100644
--- a/base/typescript/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.ts
@@ -139,7 +139,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/typescript/test/inputs/json/samples/copy-with-property.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/copy-with-property.json/default/TopLevel.ts
new file mode 100644
index 0000000..a5a6561
--- /dev/null
+++ b/head/typescript/test/inputs/json/samples/copy-with-property.json/default/TopLevel.ts
@@ -0,0 +1,206 @@
+// To parse this data:
+//
+//   import { Convert, TopLevel } from "./TopLevel";
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export interface TopLevel {
+    copyWith: number;
+    name:     string;
+}
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+export class Convert {
+    public static toTopLevel(json: string): TopLevel {
+        return cast(JSON.parse(json), r("TopLevel"));
+    }
+
+    public static topLevelToJson(value: TopLevel): string {
+        return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+    }
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = ''): never {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "copyWith", js: "copyWith", typ: i(0) },
+        { json: "name", js: "name", typ: "" },
+    ], false),
+};
diff --git a/base/typescript/test/inputs/json/samples/getting-started.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/getting-started.json/default/TopLevel.ts
index 257b050..89a2554 100644
--- a/base/typescript/test/inputs/json/samples/getting-started.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/getting-started.json/default/TopLevel.ts
@@ -136,7 +136,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/samples/github-events.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/github-events.json/default/TopLevel.ts
index 2ca5bb2..69facab 100644
--- a/base/typescript/test/inputs/json/samples/github-events.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/github-events.json/default/TopLevel.ts
@@ -421,7 +421,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.ts
index c81a5cf..3fd580f 100644
--- a/base/typescript/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.ts
@@ -167,7 +167,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/samples/null-safe.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/null-safe.json/default/TopLevel.ts
index e0c3010..e63816f 100644
--- a/base/typescript/test/inputs/json/samples/null-safe.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/null-safe.json/default/TopLevel.ts
@@ -148,7 +148,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/typescript/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.ts
new file mode 100644
index 0000000..1b5a8a5
--- /dev/null
+++ b/head/typescript/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.ts
@@ -0,0 +1,212 @@
+// To parse this data:
+//
+//   import { Convert, TopLevel } from "./TopLevel";
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export interface TopLevel {
+    literal: string;
+    values:  Value[];
+}
+
+export type Value = "c0\u0001\u001b\u001f" | "c1\u007f\u0080\u0085\u009f";
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+export class Convert {
+    public static toTopLevel(json: string): TopLevel {
+        return cast(JSON.parse(json), r("TopLevel"));
+    }
+
+    public static topLevelToJson(value: TopLevel): string {
+        return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+    }
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = ''): never {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "literal", js: "literal", typ: "" },
+        { json: "values", js: "values", typ: a(r("Value")) },
+    ], false),
+    "Value": [
+        "c0\u0001\u001b\u001f",
+        "c1\u007f\u0080\u0085\u009f",
+    ],
+};
diff --git a/base/typescript/test/inputs/json/samples/pokedex.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/pokedex.json/default/TopLevel.ts
index c4cb9ac..883e51c 100644
--- a/base/typescript/test/inputs/json/samples/pokedex.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/pokedex.json/default/TopLevel.ts
@@ -164,7 +164,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/samples/pokedex.json/prefer-types-true--df33e18681f9/TopLevel.ts b/head/typescript/test/inputs/json/samples/pokedex.json/prefer-types-true--df33e18681f9/TopLevel.ts
index d496091..88a7d54 100644
--- a/base/typescript/test/inputs/json/samples/pokedex.json/prefer-types-true--df33e18681f9/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/pokedex.json/prefer-types-true--df33e18681f9/TopLevel.ts
@@ -164,7 +164,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/samples/reddit.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/reddit.json/default/TopLevel.ts
index 273bdbe..31827e4 100644
--- a/base/typescript/test/inputs/json/samples/reddit.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/reddit.json/default/TopLevel.ts
@@ -261,7 +261,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/samples/simple-object.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/simple-object.json/default/TopLevel.ts
index 6485d85..c32d253 100644
--- a/base/typescript/test/inputs/json/samples/simple-object.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/simple-object.json/default/TopLevel.ts
@@ -137,7 +137,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/samples/spotify-album.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/spotify-album.json/default/TopLevel.ts
index 7015930..04f5e13 100644
--- a/base/typescript/test/inputs/json/samples/spotify-album.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/spotify-album.json/default/TopLevel.ts
@@ -205,7 +205,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.ts
index b1c5823..4324306 100644
--- a/base/typescript/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.ts
@@ -148,7 +148,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/base/typescript/test/inputs/json/samples/us-senators.json/default/TopLevel.ts b/head/typescript/test/inputs/json/samples/us-senators.json/default/TopLevel.ts
index f86c46b..abc7d58 100644
--- a/base/typescript/test/inputs/json/samples/us-senators.json/default/TopLevel.ts
+++ b/head/typescript/test/inputs/json/samples/us-senators.json/default/TopLevel.ts
@@ -217,7 +217,7 @@ function transform(val: any, typ: any, getProps: any, key: any = '', parent: any
     if (Array.isArray(typ)) return transformEnum(typ, val);
     if (typeof typ === "object") {
         return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
-            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || val.length >= typ.min) && (typ.max === undefined || val.length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
             : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
             : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
diff --git a/head/typescript-effect-schema/test/inputs/json/priority/combinations1.json/just-schema-true--8c4ca457bcba/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/combinations1.json/just-schema-true--8c4ca457bcba/TopLevel.ts
new file mode 100644
index 0000000..f1fe8ed
--- /dev/null
+++ b/head/typescript-effect-schema/test/inputs/json/priority/combinations1.json/just-schema-true--8c4ca457bcba/TopLevel.ts
@@ -0,0 +1,332 @@
+import * as S from "effect/Schema";
+
+
+export class Interacinar extends S.Class<Interacinar>("Interacinar")({
+    "assapan": S.Number,
+    "benefactorship": S.Boolean,
+    "triseriatim": S.String,
+    "tubbing": S.Int,
+    "untrimmed": S.Null,
+}) {}
+
+export class HemocoeleClass extends S.Class<HemocoeleClass>("HemocoeleClass")({
+    "acrogamy": S.optional(S.Null),
+    "amelification": S.optional(S.Null),
+    "autobiographic": S.optional(S.Null),
+    "berat": S.optional(S.Null),
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "disproportionably": S.optional(S.Null),
+    "erythrite": S.optional(S.Null),
+    "graphic": S.optional(S.Null),
+    "hepatological": S.optional(S.Null),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "incommensurably": S.optional(S.Null),
+    "misaffirm": S.optional(S.Null),
+    "nonbookish": S.optional(S.Null),
+    "pocketbook": S.optional(S.Null),
+    "sclerometric": S.optional(S.Null),
+    "stambouline": S.optional(S.Null),
+    "stickpin": S.optional(S.Null),
+    "tubulure": S.optional(S.Null),
+    "undelated": S.optional(S.Null),
+    "unsalt": S.optional(S.Null),
+    "untutelar": S.optional(S.Null),
+    "vagrant": S.optional(S.Null),
+    "Walt": S.optional(S.Null),
+}) {}
+
+export class FlagmakingClass extends S.Class<FlagmakingClass>("FlagmakingClass")({
+    "albarco": S.Null,
+    "Bunodonta": S.Null,
+    "hornify": S.Null,
+    "Hydrocorisae": S.Null,
+    "hypoglossus": S.Null,
+    "inexpiably": S.Null,
+    "ingratitude": S.Null,
+    "ladyfly": S.Null,
+    "medicament": S.Null,
+    "monogrammatic": S.Null,
+    "nobbut": S.Null,
+    "Notacanthidae": S.Null,
+    "polyplacophore": S.Null,
+    "proexercise": S.Null,
+    "protoplast": S.Null,
+    "puzzling": S.Null,
+    "splanchnoskeleton": S.Null,
+    "unloveliness": S.Null,
+    "unquarantined": S.Null,
+    "unrenounceable": S.Null,
+}) {}
+
+export class FenkClass extends S.Class<FenkClass>("FenkClass")({
+    "apoise": S.Null,
+    "astronomize": S.Null,
+    "cockhorse": S.Null,
+    "copular": S.Null,
+    "Dagomba": S.Null,
+    "draffy": S.Null,
+    "foreigner": S.Null,
+    "Guyandot": S.Null,
+    "neurogliosis": S.Null,
+    "osmious": S.Null,
+    "palpitate": S.Null,
+    "rebukeable": S.Null,
+    "Reinwardtia": S.Null,
+    "reservatory": S.Null,
+    "scalt": S.Null,
+    "scripturalize": S.Null,
+    "tintometer": S.Null,
+    "Tritoness": S.Null,
+    "undergrade": S.Null,
+    "undermountain": S.Null,
+}) {}
+
+export class FagginglyClass extends S.Class<FagginglyClass>("FagginglyClass")({
+    "abranchian": S.Null,
+    "aculeiform": S.Null,
+    "adiaphoristic": S.Null,
+    "adoptionism": S.Null,
+    "Anglic": S.Null,
+    "antrotomy": S.Null,
+    "coerciveness": S.Null,
+    "decorist": S.Null,
+    "duckhood": S.Null,
+    "Heteromeri": S.Null,
+    "hypochnose": S.Null,
+    "lochage": S.Null,
+    "melee": S.Null,
+    "nonconformitant": S.Null,
+    "Poinsettia": S.Null,
+    "putatively": S.Null,
+    "semivolatile": S.Null,
+    "soleas": S.Null,
+    "unfastenable": S.Null,
+    "unmillinered": S.Null,
+}) {}
+
+export class Encrust extends S.Class<Encrust>("Encrust")({
+    "comradely": S.Null,
+    "diacanthous": S.Null,
+    "feminineness": S.Null,
+    "gossamered": S.Null,
+    "Hibernia": S.Null,
+    "Hibiscus": S.Null,
+    "Lepidosauria": S.Null,
+    "lollingly": S.Null,
+    "manager": S.Null,
+    "mechanic": S.Null,
+    "overminuteness": S.Null,
+    "papelonne": S.Null,
+    "plebification": S.Null,
+    "pugmiller": S.Null,
+    "recoveror": S.Null,
+    "spermatoblastic": S.Null,
+    "Syllidae": S.Null,
+    "ungyved": S.Null,
+    "whirlabout": S.Null,
+    "woodenware": S.Null,
+}) {}
+
+export class DiaereseClass extends S.Class<DiaereseClass>("DiaereseClass")({
+    "Amoreuxia": S.Null,
+    "ani": S.Null,
+    "bernicle": S.Null,
+    "blackwasher": S.Null,
+    "blowhard": S.Null,
+    "broma": S.Null,
+    "closecross": S.Null,
+    "congregationalism": S.Null,
+    "grayly": S.Null,
+    "historically": S.Null,
+    "hoast": S.Null,
+    "irretentive": S.Null,
+    "parcener": S.Null,
+    "pedder": S.Null,
+    "pseudoanatomic": S.Null,
+    "rhizocarpian": S.Null,
+    "samel": S.Null,
+    "silker": S.Null,
+    "subdentated": S.Null,
+    "subobscure": S.Null,
+}) {}
+
+export class DeruralizeClass extends S.Class<DeruralizeClass>("DeruralizeClass")({
+    "bockerel": S.Null,
+    "boulder": S.Null,
+    "churrus": S.Null,
+    "counterdigged": S.Null,
+    "dialogite": S.Null,
+    "digenic": S.Null,
+    "dunbird": S.Null,
+    "ergatogyne": S.Null,
+    "fiendful": S.Null,
+    "jackrod": S.Null,
+    "Jehovistic": S.Null,
+    "Paninean": S.Null,
+    "panther": S.Null,
+    "placentigerous": S.Null,
+    "Romney": S.Null,
+    "sparm": S.Null,
+    "tocsin": S.Null,
+    "unnicked": S.Null,
+    "unstavable": S.Null,
+    "windfirm": S.Null,
+}) {}
+
+export class CredulityClass extends S.Class<CredulityClass>("CredulityClass")({
+    "ammonolytic": S.Null,
+    "bushmaster": S.Null,
+    "considering": S.Null,
+    "consuetudinary": S.Null,
+    "embarras": S.Null,
+    "fineness": S.Null,
+    "flaithship": S.Null,
+    "Flavia": S.Null,
+    "gruffly": S.Null,
+    "Hedychium": S.Null,
+    "leadwort": S.Null,
+    "overseriously": S.Null,
+    "parabola": S.Null,
+    "pectinatodenticulate": S.Null,
+    "Popean": S.Null,
+    "pornocrat": S.Null,
+    "quadrisect": S.Null,
+    "seriality": S.Null,
+    "vamphorn": S.Null,
+    "wharp": S.Null,
+}) {}
+
+export class CoadjustClass extends S.Class<CoadjustClass>("CoadjustClass")({
+    "amidosulphonal": S.optional(S.Null),
+    "Benny": S.optional(S.Null),
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "ensnare": S.optional(S.Null),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "hybridizer": S.optional(S.Null),
+    "leastwise": S.optional(S.Null),
+    "lof": S.optional(S.Null),
+    "monkhood": S.optional(S.Null),
+    "Netherlandish": S.optional(S.Null),
+    "nonbookish": S.optional(S.Null),
+    "peonism": S.optional(S.Null),
+    "Phonelescope": S.optional(S.Null),
+    "porphyrogeniture": S.optional(S.Null),
+    "preindemnify": S.optional(S.Null),
+    "rosal": S.optional(S.Null),
+    "scalenous": S.optional(S.Null),
+    "scopine": S.optional(S.Null),
+    "Sedaceae": S.optional(S.Null),
+    "suberinize": S.optional(S.Null),
+    "symbiot": S.optional(S.Null),
+    "tablefellow": S.optional(S.Null),
+    "unchargeable": S.optional(S.Null),
+}) {}
+
+export class CimeliaClass extends S.Class<CimeliaClass>("CimeliaClass")({
+    "catharticalness": S.Number,
+    "Chirotherium": S.Int,
+    "disdiapason": S.String,
+    "homocerc": S.Boolean,
+    "nonbookish": S.Null,
+}) {}
+
+export class ChemotherapeuticClass extends S.Class<ChemotherapeuticClass>("ChemotherapeuticClass")({
+    "angioneurotic": S.optional(S.Null),
+    "availment": S.optional(S.Null),
+    "bladelet": S.optional(S.Null),
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "caulis": S.optional(S.Null),
+    "chalcus": S.optional(S.Null),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "enteradenological": S.optional(S.Null),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "imporosity": S.optional(S.Null),
+    "insistently": S.optional(S.Null),
+    "intraparietal": S.optional(S.Null),
+    "ivied": S.optional(S.Null),
+    "Maureen": S.optional(S.Null),
+    "nonbookish": S.optional(S.Null),
+    "nostochine": S.optional(S.Null),
+    "nutcracker": S.optional(S.Null),
+    "ofttimes": S.optional(S.Null),
+    "phenocryst": S.optional(S.Null),
+    "precoincident": S.optional(S.Null),
+    "ramiferous": S.optional(S.Null),
+    "stagmometer": S.optional(S.Null),
+    "tetherball": S.optional(S.Null),
+    "unshy": S.optional(S.Null),
+}) {}
+
+export class CerographClass extends S.Class<CerographClass>("CerographClass")({
+    "apotropaion": S.Null,
+    "casuary": S.Null,
+    "creaker": S.Null,
+    "disqualification": S.Null,
+    "imperatorious": S.Null,
+    "impermeabilize": S.Null,
+    "metastoma": S.Null,
+    "noctidiurnal": S.Null,
+    "nonreserve": S.Null,
+    "ophthalmotonometry": S.Null,
+    "pailful": S.Null,
+    "pigfish": S.Null,
+    "pongee": S.Null,
+    "prosodical": S.Null,
+    "scrofuloderm": S.Null,
+    "storekeeping": S.Null,
+    "therologist": S.Null,
+    "Tolowa": S.Null,
+    "tradeful": S.Null,
+    "unriveting": S.Null,
+}) {}
+
+export class TopLevel extends S.Class<TopLevel>("TopLevel")({
+    "centrodesmose": S.String,
+    "cerograph": S.Array(S.Union(S.String, CerographClass, S.Null)),
+    "chemotherapeutics": S.Array(S.Union(S.Int, ChemotherapeuticClass)),
+    "cimelia": S.Array(S.Union(S.Array(S.Int), CimeliaClass, S.Null)),
+    "citrated": S.Int,
+    "clinodome": S.Array(S.Union(S.Number, S.String)),
+    "coadjust": S.Array(S.Union(S.Number, CoadjustClass)),
+    "consilience": S.Array(S.Union(S.Number, S.Record({ key: S.String, value: S.Int}))),
+    "constructor": S.Array(S.Union(S.Boolean, S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
+    "continuative": S.Array(S.Union(S.Record({ key: S.String, value: S.Int}), S.String)),
+    "credulity": S.Array(S.Union(S.Int, S.String, CredulityClass)),
+    "creviced": S.Array(S.Union(S.Boolean, S.Record({ key: S.String, value: S.Int}), S.String)),
+    "cubiculum": S.Array(S.Array(S.NullOr(S.Int))),
+    "deruralize": S.Array(S.Union(S.Array(S.Null), S.Boolean, DeruralizeClass)),
+    "diaereses": S.Array(S.Union(S.Array(S.Int), S.Boolean, DiaereseClass)),
+    "dissolution": S.Array(S.NullOr(S.Array(S.Null))),
+    "downstroke": S.Array(S.Union(S.Array(S.Null), S.Boolean, S.String)),
+    "electrotautomerism": S.Array(S.NullOr(S.Number)),
+    "eleutheromania": S.Array(S.Union(S.Number, S.Record({ key: S.String, value: S.Int}), S.String)),
+    "encrust": Encrust,
+    "entomoid": S.Array(S.Union(S.Int, CimeliaClass)),
+    "epipaleolithic": S.Array(S.Union(S.Array(S.Int), S.Number)),
+    "expropriable": S.Array(S.Union(S.Array(S.Null), S.Number, CimeliaClass)),
+    "faggingly": S.Array(S.Union(S.Number, FagginglyClass)),
+    "fenks": S.Array(S.Union(S.String, FenkClass)),
+    "flagmaking": S.Array(S.Union(S.Boolean, S.Number, FlagmakingClass)),
+    "fluorometer": S.Array(S.Union(S.Int, S.String, S.Null)),
+    "fulsome": S.Array(S.NullOr(S.Int)),
+    "fuzzy": S.Array(S.Union(S.Int, S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
+    "gardenwards": S.Array(S.Union(S.Array(S.Int), S.Boolean, S.String)),
+    "generalissimo": S.Array(S.Union(S.Boolean, S.Record({ key: S.String, value: S.Int}), S.Null)),
+    "habeas": S.Array(S.NullOr(S.Record({ key: S.String, value: S.Int}))),
+    "hemicrystalline": S.Array(S.Union(S.String, CimeliaClass)),
+    "hemocoele": S.Array(S.Union(S.Array(S.Int), HemocoeleClass)),
+    "hoister": S.Array(S.Union(S.String, CimeliaClass, S.Null)),
+    "hyperpiesis": S.Array(S.Union(S.Array(S.Null), CimeliaClass, S.Null)),
+    "hyppish": S.Array(S.Union(S.Boolean, S.String, S.Null)),
+    "idealizer": S.Array(S.Union(S.Array(S.Null), S.Int, CimeliaClass)),
+    "incrustator": S.Array(S.Union(S.Array(S.Int), S.Int, S.String)),
+    "intentiveness": S.Array(S.Union(S.Number, S.String, CimeliaClass)),
+    "interacinar": Interacinar,
+    "intercorrelation": S.Array(S.NullOr(S.Array(S.Int))),
+    "jacutinga": S.Array(S.Union(S.Array(S.Int), S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
+}) {}
diff --git a/head/typescript-effect-schema/test/inputs/json/priority/combinations2.json/just-schema-true--8c4ca457bcba/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/combinations2.json/just-schema-true--8c4ca457bcba/TopLevel.ts
new file mode 100644
index 0000000..659fe2e
--- /dev/null
+++ b/head/typescript-effect-schema/test/inputs/json/priority/combinations2.json/just-schema-true--8c4ca457bcba/TopLevel.ts
@@ -0,0 +1,280 @@
+import * as S from "effect/Schema";
+
+
+export class OskarClass extends S.Class<OskarClass>("OskarClass")({
+    "Acrobates": S.Null,
+    "beanshooter": S.Null,
+    "bearhound": S.Null,
+    "Cayuga": S.Null,
+    "guarneri": S.Null,
+    "hypochondriacism": S.Null,
+    "indication": S.Null,
+    "jaculative": S.Null,
+    "nagana": S.Null,
+    "Netherlandish": S.Null,
+    "noctivagous": S.Null,
+    "nonphysiological": S.Null,
+    "praxis": S.Null,
+    "provision": S.Null,
+    "subterhuman": S.Null,
+    "sunlit": S.Null,
+    "syncraniate": S.Null,
+    "teachment": S.Null,
+    "unmutinous": S.Null,
+    "unstoppable": S.Null,
+}) {}
+
+export class LaviniaClass extends S.Class<LaviniaClass>("LaviniaClass")({
+    "agitable": S.optional(S.NullOr(S.Int)),
+    "asininity": S.optional(S.NullOr(S.Int)),
+    "benefiter": S.optional(S.NullOr(S.Int)),
+    "bronzelike": S.optional(S.NullOr(S.Int)),
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "cholesteatomatous": S.optional(S.NullOr(S.Int)),
+    "deprivement": S.optional(S.NullOr(S.Int)),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "flippantness": S.optional(S.NullOr(S.Int)),
+    "fogproof": S.optional(S.NullOr(S.Int)),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "merrymeeting": S.optional(S.NullOr(S.Int)),
+    "nonbookish": S.optional(S.Null),
+    "overcareful": S.optional(S.NullOr(S.Int)),
+    "panaris": S.optional(S.NullOr(S.Int)),
+    "preacceptance": S.optional(S.NullOr(S.Int)),
+    "quinoxaline": S.optional(S.NullOr(S.Int)),
+    "sig": S.optional(S.NullOr(S.Int)),
+    "superconfusion": S.optional(S.NullOr(S.Int)),
+    "Tacana": S.optional(S.NullOr(S.Int)),
+    "tillotter": S.optional(S.NullOr(S.Int)),
+    "tranquillize": S.optional(S.NullOr(S.Int)),
+    "unquestionable": S.optional(S.NullOr(S.Int)),
+    "uproute": S.optional(S.NullOr(S.Int)),
+}) {}
+
+export class GryphosaurusClass extends S.Class<GryphosaurusClass>("GryphosaurusClass")({
+    "amissibility": S.Null,
+    "Burushaski": S.Null,
+    "citronin": S.Null,
+    "coplaintiff": S.Null,
+    "disquisitionary": S.Null,
+    "enoplan": S.Null,
+    "faintness": S.Null,
+    "hebetomy": S.Null,
+    "islandry": S.Null,
+    "lameduck": S.Null,
+    "overbattle": S.Null,
+    "overinterested": S.Null,
+    "phrenologic": S.Null,
+    "rainband": S.Null,
+    "shiningly": S.Null,
+    "stamineous": S.Null,
+    "subscapularis": S.Null,
+    "Tahami": S.Null,
+    "undaubed": S.Null,
+    "underntime": S.Null,
+}) {}
+
+export class DiscordiaClass extends S.Class<DiscordiaClass>("DiscordiaClass")({
+    "Altaic": S.optional(S.NullOr(S.Int)),
+    "amoristic": S.optional(S.NullOr(S.Int)),
+    "blennophthalmia": S.optional(S.NullOr(S.Int)),
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "disciplinability": S.optional(S.NullOr(S.Int)),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "goofer": S.optional(S.NullOr(S.Int)),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "laryngograph": S.optional(S.NullOr(S.Int)),
+    "leucitis": S.optional(S.NullOr(S.Int)),
+    "lymphocyst": S.optional(S.NullOr(S.Int)),
+    "microcosmology": S.optional(S.NullOr(S.Int)),
+    "nauseation": S.optional(S.NullOr(S.Int)),
+    "nonbookish": S.optional(S.Null),
+    "Patarin": S.optional(S.NullOr(S.Int)),
+    "preliberal": S.optional(S.NullOr(S.Int)),
+    "prettifier": S.optional(S.NullOr(S.Int)),
+    "rangework": S.optional(S.NullOr(S.Int)),
+    "redient": S.optional(S.NullOr(S.Int)),
+    "subfusiform": S.optional(S.NullOr(S.Int)),
+    "suicidical": S.optional(S.NullOr(S.Int)),
+    "swow": S.optional(S.NullOr(S.Int)),
+    "wastrel": S.optional(S.NullOr(S.Int)),
+    "wingle": S.optional(S.NullOr(S.Int)),
+}) {}
+
+export class ChytridiaceaeClass extends S.Class<ChytridiaceaeClass>("ChytridiaceaeClass")({
+    "Batidaceae": S.Null,
+    "Brechites": S.Null,
+    "codespairer": S.Null,
+    "Emery": S.Null,
+    "enervative": S.Null,
+    "excriminate": S.Null,
+    "goshenite": S.Null,
+    "grime": S.Null,
+    "gritten": S.Null,
+    "hectorly": S.Null,
+    "intermediation": S.Null,
+    "meeterly": S.Null,
+    "Narraganset": S.Null,
+    "onymatic": S.Null,
+    "paddlecock": S.Null,
+    "thana": S.Null,
+    "thornily": S.Null,
+    "uckia": S.Null,
+    "unmettle": S.Null,
+    "vorticellid": S.Null,
+}) {}
+
+export class AnsarieClass extends S.Class<AnsarieClass>("AnsarieClass")({
+    "accension": S.Null,
+    "Alida": S.Null,
+    "asteria": S.Null,
+    "beriberic": S.Null,
+    "edgebone": S.Null,
+    "gastrodialysis": S.Null,
+    "geographic": S.Null,
+    "Ictonyx": S.Null,
+    "metrocele": S.Null,
+    "misgraft": S.Null,
+    "monteith": S.Null,
+    "notcher": S.Null,
+    "prorestriction": S.Null,
+    "Ramist": S.Null,
+    "throatlet": S.Null,
+    "unfair": S.Null,
+    "unsynonymous": S.Null,
+    "water": S.Null,
+    "zestfully": S.Null,
+    "zincic": S.Null,
+}) {}
+
+export class AnkeeClass extends S.Class<AnkeeClass>("AnkeeClass")({
+    "Anomoean": S.Null,
+    "barleyhood": S.Null,
+    "befriender": S.Null,
+    "brutishness": S.Null,
+    "cephalalgy": S.Null,
+    "cirurgian": S.Null,
+    "conventionally": S.Null,
+    "jackshay": S.Null,
+    "milammeter": S.Null,
+    "Naja": S.Null,
+    "ombrological": S.Null,
+    "phonasthenia": S.Null,
+    "retrievableness": S.Null,
+    "snakily": S.Null,
+    "swot": S.Null,
+    "tartlet": S.Null,
+    "thiofuran": S.Null,
+    "tracheophone": S.Null,
+    "tuglike": S.Null,
+    "unscratchingly": S.Null,
+}) {}
+
+export class Amphithyron extends S.Class<Amphithyron>("Amphithyron")({
+    "akroasis": S.optional(S.NullOr(S.Int)),
+    "antiphonical": S.optional(S.NullOr(S.Int)),
+    "basebred": S.optional(S.NullOr(S.Int)),
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "conductometric": S.optional(S.NullOr(S.Int)),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "ensilation": S.optional(S.NullOr(S.Int)),
+    "eyebolt": S.optional(S.NullOr(S.Int)),
+    "fistulated": S.optional(S.NullOr(S.Int)),
+    "heteropod": S.optional(S.NullOr(S.Int)),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "Juniperus": S.optional(S.NullOr(S.Int)),
+    "labyrinthically": S.optional(S.NullOr(S.Int)),
+    "martyrization": S.optional(S.NullOr(S.Int)),
+    "mispolicy": S.optional(S.NullOr(S.Int)),
+    "multipara": S.optional(S.NullOr(S.Int)),
+    "Nazirite": S.optional(S.NullOr(S.Int)),
+    "nonbookish": S.optional(S.Null),
+    "possessorial": S.optional(S.NullOr(S.Int)),
+    "shamed": S.optional(S.NullOr(S.Int)),
+    "shelfworn": S.optional(S.NullOr(S.Int)),
+    "stagnum": S.optional(S.NullOr(S.Int)),
+    "Those": S.optional(S.NullOr(S.Int)),
+    "undecimal": S.optional(S.NullOr(S.Int)),
+}) {}
+
+export class Rebecca extends S.Class<Rebecca>("Rebecca")({
+    "catharticalness": S.Number,
+    "Chirotherium": S.Int,
+    "disdiapason": S.String,
+    "homocerc": S.Boolean,
+    "nonbookish": S.Null,
+}) {}
+
+export class AlleviateClass extends S.Class<AlleviateClass>("AlleviateClass")({
+    "apriori": S.Null,
+    "beggarer": S.Null,
+    "brokenheartedly": S.Null,
+    "debilitation": S.Null,
+    "frike": S.Null,
+    "gastrolith": S.Null,
+    "Hulsean": S.Null,
+    "orthocentric": S.Null,
+    "petaly": S.Null,
+    "probudgeting": S.Null,
+    "reacquire": S.Null,
+    "scow": S.Null,
+    "shutoff": S.Null,
+    "subcontiguous": S.Null,
+    "suffumigate": S.Null,
+    "transformable": S.Null,
+    "uncoroneted": S.Null,
+    "unparking": S.Null,
+    "unvarnishedness": S.Null,
+    "wherewithal": S.Null,
+}) {}
+
+export class TopLevel extends S.Class<TopLevel>("TopLevel")({
+    "Abranchiata": S.Array(S.Union(S.Array(S.Int), S.Int, S.Null)),
+    "academe": S.Array(S.Union(S.Array(S.Int), S.Int, S.Record({ key: S.String, value: S.Int}))),
+    "acquirable": S.Array(S.Union(S.Array(S.NullOr(S.Int)), S.Record({ key: S.String, value: S.Int}))),
+    "aerometry": S.Array(S.Union(S.Boolean, S.Number)),
+    "alexin": S.Array(S.Union(S.Array(S.Int), S.Boolean)),
+    "alleviate": S.Array(S.Union(S.Array(S.NullOr(S.Int)), AlleviateClass)),
+    "amaas": S.Array(S.Union(S.Boolean, S.Int, Rebecca)),
+    "ambassage": S.Array(S.Union(S.Array(S.Null), S.String)),
+    "amphithyron": S.Array(S.NullOr(Amphithyron)),
+    "Andriana": S.Array(S.NullOr(S.String)),
+    "ankee": S.Array(S.Union(S.Array(S.Int), S.Int, AnkeeClass)),
+    "annihilator": S.Array(S.NullOr(S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
+    "annulose": S.Null,
+    "Ansarie": S.Array(S.Union(S.Array(S.Int), AnsarieClass, S.Null)),
+    "aphasia": S.Array(S.Union(S.Array(S.Int), S.Int)),
+    "asprawl": S.Array(S.Union(S.Number, S.String)),
+    "attractive": S.Array(S.NullOr(S.Boolean)),
+    "barksome": S.Record({ key: S.String, value: S.Int}),
+    "bedesman": S.Array(S.Union(S.Boolean, S.Number, S.String)),
+    "belard": S.Array(S.Union(S.Array(S.Int), S.Number, Rebecca)),
+    "bocking": S.Array(S.Union(S.Array(S.Int), S.Boolean, S.Record({ key: S.String, value: S.Int}))),
+    "brawlingly": S.Array(S.Union(S.Array(S.Null), S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
+    "brookie": S.Array(S.Union(S.Array(S.Int), Rebecca)),
+    "bumboatman": S.Array(S.Union(S.Array(S.Null), S.String, S.Null)),
+    "bystreet": S.Array(S.Null),
+    "calaverite": S.Array(S.Union(S.Array(S.Int), S.String)),
+    "catallactic": S.Array(S.Union(S.Array(S.Null), S.Boolean, S.Record({ key: S.String, value: S.Int}))),
+    "cemental": S.Array(S.Union(S.Array(S.Int), S.Number, S.Record({ key: S.String, value: S.Int}))),
+    "Chytridiaceae": S.Array(S.Union(S.Boolean, ChytridiaceaeClass, S.Null)),
+    "Discordia": S.Array(S.Union(S.Array(S.Int), DiscordiaClass)),
+    "Endomyces": S.Array(S.Union(S.Int, S.String)),
+    "Epinephelidae": S.Array(S.Union(S.Boolean, S.Int, S.String)),
+    "Eupatorium": S.Array(S.Union(S.Array(S.Null), S.Record({ key: S.String, value: S.Int}))),
+    "Gryphosaurus": S.Array(S.Union(S.Array(S.Int), S.String, GryphosaurusClass)),
+    "Koryak": S.Array(S.Union(S.Record({ key: S.String, value: S.NullOr(S.Int)}), S.String)),
+    "Lavinia": S.Array(S.Union(S.String, LaviniaClass)),
+    "Oskar": S.Array(S.Union(S.Array(S.Int), OskarClass)),
+    "Rebecca": S.Array(S.Union(S.Int, S.String, Rebecca)),
+    "Rhomboganoidei": S.Array(S.Union(S.Array(S.Int), S.String, Rebecca)),
+    "Rigsmal": S.Boolean,
+    "Ruellia": S.Array(S.Union(S.Boolean, S.String, Rebecca)),
+    "School": S.Array(S.Union(S.Int, S.Record({ key: S.String, value: S.Int}), S.Null)),
+    "Shakespearolater": S.Array(S.Union(S.Array(S.Int), S.Number, S.String)),
+    "Svan": S.Array(S.Number),
+    "Wayao": S.Record({ key: S.String, value: S.Number}),
+}) {}
diff --git a/head/typescript-effect-schema/test/inputs/json/priority/combinations3.json/just-schema-true--8c4ca457bcba/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/combinations3.json/just-schema-true--8c4ca457bcba/TopLevel.ts
new file mode 100644
index 0000000..02be4a5
--- /dev/null
+++ b/head/typescript-effect-schema/test/inputs/json/priority/combinations3.json/just-schema-true--8c4ca457bcba/TopLevel.ts
@@ -0,0 +1,384 @@
+import * as S from "effect/Schema";
+
+
+export class PrefreshmanClass extends S.Class<PrefreshmanClass>("PrefreshmanClass")({
+    "azorubine": S.Null,
+    "choroiditis": S.Null,
+    "coagulatory": S.Null,
+    "cyclorama": S.Null,
+    "Dolphus": S.Null,
+    "duckhearted": S.Null,
+    "Ficus": S.Null,
+    "Gemaric": S.Null,
+    "jugation": S.Null,
+    "myoliposis": S.Null,
+    "nonnomination": S.Null,
+    "palay": S.Null,
+    "pentactinal": S.Null,
+    "Phaet": S.Null,
+    "piquant": S.Null,
+    "registration": S.Null,
+    "remancipation": S.Null,
+    "scutatiform": S.Null,
+    "theodolite": S.Null,
+    "underward": S.Null,
+}) {}
+
+export class PotwhiskyClass extends S.Class<PotwhiskyClass>("PotwhiskyClass")({
+    "arciform": S.Null,
+    "cresolin": S.Null,
+    "disheartener": S.Null,
+    "disproportionable": S.Null,
+    "Euchorda": S.Null,
+    "ferryway": S.Null,
+    "filamentiferous": S.Null,
+    "flemish": S.Null,
+    "forgainst": S.Null,
+    "grainering": S.Null,
+    "irrevoluble": S.Null,
+    "kindredship": S.Null,
+    "pinguitudinous": S.Null,
+    "simpletonic": S.Null,
+    "singsong": S.Null,
+    "submergement": S.Null,
+    "supraoesophagal": S.Null,
+    "thrashel": S.Null,
+    "tyremesis": S.Null,
+    "Yoruba": S.Null,
+}) {}
+
+export class Pneumocele extends S.Class<Pneumocele>("Pneumocele")({
+    "Carbonarism": S.optional(S.Null),
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "cineolic": S.optional(S.Null),
+    "cobbly": S.optional(S.Null),
+    "conchyliferous": S.optional(S.Null),
+    "congregation": S.optional(S.Null),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "enterotomy": S.optional(S.Null),
+    "entophytal": S.optional(S.Null),
+    "fewtrils": S.optional(S.Null),
+    "herem": S.optional(S.Null),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "Koniga": S.optional(S.Null),
+    "meticulosity": S.optional(S.Null),
+    "Micky": S.optional(S.Null),
+    "mismarriage": S.optional(S.Null),
+    "neurotrophic": S.optional(S.Null),
+    "nonbookish": S.optional(S.Null),
+    "persuasively": S.optional(S.Null),
+    "replaceable": S.optional(S.Null),
+    "silex": S.optional(S.Null),
+    "taillight": S.optional(S.Null),
+    "unjealous": S.optional(S.Null),
+    "visitorial": S.optional(S.Null),
+}) {}
+
+export class PiaculumClass extends S.Class<PiaculumClass>("PiaculumClass")({
+    "alada": S.optional(S.NullOr(S.Int)),
+    "amphistomous": S.optional(S.NullOr(S.Int)),
+    "boysenberry": S.optional(S.NullOr(S.Int)),
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "decardinalize": S.optional(S.NullOr(S.Int)),
+    "discouragement": S.optional(S.NullOr(S.Int)),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "doitrified": S.optional(S.NullOr(S.Int)),
+    "hexaspermous": S.optional(S.NullOr(S.Int)),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "insinking": S.optional(S.NullOr(S.Int)),
+    "loathfulness": S.optional(S.NullOr(S.Int)),
+    "miasmatical": S.optional(S.NullOr(S.Int)),
+    "neurofibril": S.optional(S.NullOr(S.Int)),
+    "nonbookish": S.optional(S.Null),
+    "phonendoscope": S.optional(S.NullOr(S.Int)),
+    "pilferment": S.optional(S.NullOr(S.Int)),
+    "predismissory": S.optional(S.NullOr(S.Int)),
+    "preinscription": S.optional(S.NullOr(S.Int)),
+    "quotative": S.optional(S.NullOr(S.Int)),
+    "sienna": S.optional(S.NullOr(S.Int)),
+    "thorax": S.optional(S.NullOr(S.Int)),
+    "yachting": S.optional(S.NullOr(S.Int)),
+    "Zipper": S.optional(S.NullOr(S.Int)),
+}) {}
+
+export class OutrivalClass extends S.Class<OutrivalClass>("OutrivalClass")({
+    "adroitly": S.Null,
+    "bridehood": S.Null,
+    "Castoroides": S.Null,
+    "Czechoslovak": S.Null,
+    "diagenesis": S.Null,
+    "dihexahedron": S.Null,
+    "dopester": S.Null,
+    "eumerism": S.Null,
+    "flyness": S.Null,
+    "fouler": S.Null,
+    "laudanosine": S.Null,
+    "Lingulidae": S.Null,
+    "minutary": S.Null,
+    "mitra": S.Null,
+    "opisthorchiasis": S.Null,
+    "pensively": S.Null,
+    "pubigerous": S.Null,
+    "rebellious": S.Null,
+    "recodify": S.Null,
+    "unpaced": S.Null,
+}) {}
+
+export class OccupationalistClass extends S.Class<OccupationalistClass>("OccupationalistClass")({
+    "beholdable": S.Null,
+    "brotuliform": S.Null,
+    "Chimakum": S.Null,
+    "doodler": S.Null,
+    "emulsin": S.Null,
+    "Fin": S.Null,
+    "flourishing": S.Null,
+    "flueless": S.Null,
+    "furtively": S.Null,
+    "gritter": S.Null,
+    "interwish": S.Null,
+    "monoxylic": S.Null,
+    "myristic": S.Null,
+    "nightwear": S.Null,
+    "peruser": S.Null,
+    "theoastrological": S.Null,
+    "thumby": S.Null,
+    "tingitid": S.Null,
+    "trailless": S.Null,
+    "unpocketed": S.Null,
+}) {}
+
+export class Noncontributing extends S.Class<Noncontributing>("Noncontributing")({
+    "estevin": S.String,
+    "jolterhead": S.Number,
+    "sauternes": S.Int,
+    "sparsely": S.Boolean,
+    "unrequested": S.Null,
+}) {}
+
+export class MonotheisticallyClass extends S.Class<MonotheisticallyClass>("MonotheisticallyClass")({
+    "blaspheme": S.optional(S.Null),
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "celiosalpingectomy": S.optional(S.Null),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "consummativeness": S.optional(S.Null),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "egestive": S.optional(S.Null),
+    "enchylema": S.optional(S.Null),
+    "gasconade": S.optional(S.Null),
+    "holidayer": S.optional(S.Null),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "intuitionalism": S.optional(S.Null),
+    "lophiostomate": S.optional(S.Null),
+    "nonbookish": S.optional(S.Null),
+    "nonvolition": S.optional(S.Null),
+    "palatableness": S.optional(S.Null),
+    "pimpery": S.optional(S.Null),
+    "previolation": S.optional(S.Null),
+    "reconveyance": S.optional(S.Null),
+    "registership": S.optional(S.Null),
+    "rhyacolite": S.optional(S.Null),
+    "smithereens": S.optional(S.Null),
+    "superedification": S.optional(S.Null),
+    "trust": S.optional(S.Null),
+    "whitestone": S.optional(S.Null),
+}) {}
+
+export class MonaziteClass extends S.Class<MonaziteClass>("MonaziteClass")({
+    "catharticalness": S.Number,
+    "Chirotherium": S.Int,
+    "disdiapason": S.String,
+    "homocerc": S.Boolean,
+    "nonbookish": S.Null,
+}) {}
+
+export class Maslin extends S.Class<Maslin>("Maslin")({
+    "Alicant": S.optional(S.NullOr(S.Int)),
+    "antiatonement": S.optional(S.Null),
+    "anticorrosive": S.optional(S.NullOr(S.Int)),
+    "aphidozer": S.optional(S.Null),
+    "Bakuninist": S.optional(S.Null),
+    "be": S.optional(S.NullOr(S.Int)),
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "chub": S.optional(S.NullOr(S.Int)),
+    "cuprosilicon": S.optional(S.NullOr(S.Int)),
+    "curtailedly": S.optional(S.NullOr(S.Int)),
+    "dellenite": S.optional(S.NullOr(S.Int)),
+    "Dimitry": S.optional(S.NullOr(S.Int)),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "edifying": S.optional(S.Null),
+    "ethmoiditis": S.optional(S.NullOr(S.Int)),
+    "gastralgy": S.optional(S.Null),
+    "goatherd": S.optional(S.NullOr(S.Int)),
+    "hammerdress": S.optional(S.NullOr(S.Int)),
+    "hangfire": S.optional(S.Null),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "lacunosity": S.optional(S.NullOr(S.Int)),
+    "longiloquence": S.optional(S.Null),
+    "mameliere": S.optional(S.NullOr(S.Int)),
+    "motherless": S.optional(S.Null),
+    "nonbookish": S.optional(S.Null),
+    "noncorrodible": S.optional(S.Null),
+    "nonsensicality": S.optional(S.Null),
+    "oafishly": S.optional(S.NullOr(S.Int)),
+    "pfund": S.optional(S.Null),
+    "preadvisory": S.optional(S.Null),
+    "retroflexed": S.optional(S.Null),
+    "saccharulmic": S.optional(S.NullOr(S.Int)),
+    "scowlful": S.optional(S.NullOr(S.Int)),
+    "secluded": S.optional(S.Null),
+    "slackage": S.optional(S.Null),
+    "sphaeridial": S.optional(S.NullOr(S.Int)),
+    "spondulics": S.optional(S.Null),
+    "subsecive": S.optional(S.NullOr(S.Int)),
+    "swellmobsman": S.optional(S.Null),
+    "trachyglossate": S.optional(S.NullOr(S.Int)),
+    "trialogue": S.optional(S.Null),
+    "unassuaged": S.optional(S.NullOr(S.Int)),
+    "ungross": S.optional(S.Null),
+    "unjudiciously": S.optional(S.Null),
+}) {}
+
+export class LupusClass extends S.Class<LupusClass>("LupusClass")({
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "Chlorioninae": S.optional(S.NullOr(S.Int)),
+    "Corvinae": S.optional(S.NullOr(S.Int)),
+    "Crassina": S.optional(S.NullOr(S.Int)),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "exiguity": S.optional(S.NullOr(S.Int)),
+    "farcist": S.optional(S.NullOr(S.Int)),
+    "holographical": S.optional(S.NullOr(S.Int)),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "ichthyophagan": S.optional(S.NullOr(S.Int)),
+    "implacable": S.optional(S.NullOr(S.Int)),
+    "nonbookish": S.optional(S.Null),
+    "outshiner": S.optional(S.NullOr(S.Int)),
+    "overweather": S.optional(S.NullOr(S.Int)),
+    "protonegroid": S.optional(S.NullOr(S.Int)),
+    "shallowish": S.optional(S.NullOr(S.Int)),
+    "snoke": S.optional(S.NullOr(S.Int)),
+    "snout": S.optional(S.NullOr(S.Int)),
+    "surveillance": S.optional(S.NullOr(S.Int)),
+    "threshingtime": S.optional(S.NullOr(S.Int)),
+    "Thysanocarpus": S.optional(S.NullOr(S.Int)),
+    "unsignificantly": S.optional(S.NullOr(S.Int)),
+    "unsnap": S.optional(S.NullOr(S.Int)),
+    "vendible": S.optional(S.NullOr(S.Int)),
+}) {}
+
+export class LandlubberlyClass extends S.Class<LandlubberlyClass>("LandlubberlyClass")({
+    "acropoleis": S.Null,
+    "aminate": S.Null,
+    "Amyraldism": S.Null,
+    "bipenniform": S.Null,
+    "bugre": S.Null,
+    "calycule": S.Null,
+    "caoutchouc": S.Null,
+    "disprover": S.Null,
+    "fitroot": S.Null,
+    "fulgently": S.Null,
+    "kickup": S.Null,
+    "laevoversion": S.Null,
+    "moter": S.Null,
+    "objectivity": S.Null,
+    "posterity": S.Null,
+    "postnuptial": S.Null,
+    "precedentary": S.Null,
+    "saddling": S.Null,
+    "subcurrent": S.Null,
+    "unrecriminative": S.Null,
+}) {}
+
+export class LadronismClass extends S.Class<LadronismClass>("LadronismClass")({
+    "acclaimer": S.Null,
+    "achree": S.Null,
+    "base": S.Null,
+    "conundrumize": S.Null,
+    "degerminator": S.Null,
+    "describable": S.Null,
+    "exasperatedly": S.Null,
+    "heroine": S.Null,
+    "indazin": S.Null,
+    "luteous": S.Null,
+    "papular": S.Null,
+    "pritch": S.Null,
+    "Prodenia": S.Null,
+    "seege": S.Null,
+    "shopgirl": S.Null,
+    "tragedietta": S.Null,
+    "unsparse": S.Null,
+    "uplook": S.Null,
+    "vermiformis": S.Null,
+    "whafabout": S.Null,
+}) {}
+
+export class JurorClass extends S.Class<JurorClass>("JurorClass")({
+    "adipsy": S.Null,
+    "auxiliator": S.Null,
+    "benda": S.Null,
+    "benjamin": S.Null,
+    "brandling": S.Null,
+    "epicurishly": S.Null,
+    "eremochaetous": S.Null,
+    "marten": S.Null,
+    "monocline": S.Null,
+    "Olea": S.Null,
+    "palgat": S.Null,
+    "pennyworth": S.Null,
+    "pioury": S.Null,
+    "pragmatistic": S.Null,
+    "stylelessness": S.Null,
+    "systematical": S.Null,
+    "thready": S.Null,
+    "uncontemporary": S.Null,
+    "uncouched": S.Null,
+    "uninhabitedness": S.Null,
+}) {}
+
+export class TopLevel extends S.Class<TopLevel>("TopLevel")({
+    "juror": S.Array(S.Union(S.Boolean, JurorClass)),
+    "kongoni": S.Array(S.Union(S.Array(S.Int), S.Record({ key: S.String, value: S.Int}))),
+    "ladronism": S.Array(S.Union(S.Number, S.String, LadronismClass)),
+    "landlubberly": S.Array(S.Union(S.Boolean, S.Int, LandlubberlyClass)),
+    "listener": S.Array(S.Union(S.Array(S.Null), S.Int)),
+    "lupus": S.Array(S.Union(S.Int, LupusClass)),
+    "maslin": S.Array(Maslin),
+    "monazite": S.Array(S.Union(S.Number, MonaziteClass)),
+    "monoliteral": S.Array(S.Union(S.Array(S.Null), S.Boolean)),
+    "monotheistically": S.Array(S.Union(S.Array(S.Null), MonotheisticallyClass)),
+    "montage": S.Array(S.Union(S.Array(S.Null), S.Number, S.String)),
+    "moralness": S.Array(S.Union(S.Array(S.Null), S.Number, S.Null)),
+    "mowra": S.Array(S.NullOr(MonaziteClass)),
+    "mulishly": S.Array(S.Union(S.Array(S.Int), S.Number, S.Null)),
+    "myoscope": S.Array(S.Union(S.Array(S.Null), S.Boolean, S.Int)),
+    "nach": S.Array(S.NullOr(S.Array(S.NullOr(S.Int)))),
+    "neuromastic": S.Array(S.Union(S.Array(S.Null), S.Number)),
+    "noncontributing": S.Array(Noncontributing),
+    "nonnervous": S.Array(S.Union(S.Boolean, S.Int)),
+    "nonvaluation": S.Array(S.Union(S.Array(S.Null), S.Boolean, S.Number)),
+    "occupationalist": S.Array(S.Union(S.Array(S.Null), OccupationalistClass, S.Null)),
+    "outrival": S.Array(S.Union(S.Number, OutrivalClass, S.Null)),
+    "paleographically": S.Array(S.Union(S.Number, S.Record({ key: S.String, value: S.NullOr(S.Int)}))),
+    "pamphletwise": S.Array(S.Union(S.Int, S.Record({ key: S.String, value: S.Int}), S.String)),
+    "pediatrics": S.Array(S.Union(S.Boolean, S.Number, S.Null)),
+    "perceptive": S.Array(S.Boolean),
+    "piaculum": S.Array(S.Union(S.Number, PiaculumClass)),
+    "piccadilly": S.Array(S.Union(S.Number, S.String, S.Null)),
+    "piffler": S.Array(S.Union(S.Array(S.Null), MonaziteClass)),
+    "pithful": S.Array(S.Union(S.Boolean, S.Int, S.Null)),
+    "placuntitis": S.Array(S.Union(S.Int, S.Record({ key: S.String, value: S.Int}))),
+    "plectopterous": S.Array(S.Union(S.Number, S.Record({ key: S.String, value: S.Int}))),
+    "pneumocele": S.Array(S.NullOr(Pneumocele)),
+    "poliorcetic": S.Array(S.Union(S.Boolean, MonaziteClass)),
+    "poormaster": S.Array(S.Union(S.Array(S.Int), S.Record({ key: S.String, value: S.Int}), S.Null)),
+    "potwhisky": S.Array(S.Union(S.Int, PotwhiskyClass, S.Null)),
+    "practicalizer": S.Array(S.Union(S.Array(S.Null), S.String, MonaziteClass)),
+    "prefreshman": S.Array(S.Union(S.Array(S.Null), S.String, PrefreshmanClass)),
+    "prehensility": S.Array(S.Union(S.Array(S.Null), S.Boolean, MonaziteClass)),
+    "prevoidance": S.Array(S.Union(S.Array(S.Int), S.Int, MonaziteClass)),
+    "probant": S.Array(S.Record({ key: S.String, value: S.NullOr(S.Int)})),
+    "protext": S.Array(S.Union(S.Array(S.Int), S.Boolean, MonaziteClass)),
+}) {}
diff --git a/head/typescript-effect-schema/test/inputs/json/priority/combinations4.json/just-schema-true--8c4ca457bcba/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/combinations4.json/just-schema-true--8c4ca457bcba/TopLevel.ts
new file mode 100644
index 0000000..3a1909c
--- /dev/null
+++ b/head/typescript-effect-schema/test/inputs/json/priority/combinations4.json/just-schema-true--8c4ca457bcba/TopLevel.ts
@@ -0,0 +1,440 @@
+import * as S from "effect/Schema";
+
+
+export class WrothyClass extends S.Class<WrothyClass>("WrothyClass")({
+    "Aeschynanthus": S.Null,
+    "aquiferous": S.Null,
+    "cheapener": S.Null,
+    "enumeration": S.Null,
+    "Ephesine": S.Null,
+    "escadrille": S.Null,
+    "estrous": S.Null,
+    "interestedly": S.Null,
+    "katakinetomer": S.Null,
+    "mortification": S.Null,
+    "morula": S.Null,
+    "orthosymmetrical": S.Null,
+    "overbark": S.Null,
+    "politist": S.Null,
+    "qualified": S.Null,
+    "sphenomalar": S.Null,
+    "throatful": S.Null,
+    "transhumance": S.Null,
+    "triandrian": S.Null,
+    "unbooked": S.Null,
+}) {}
+
+export class UnstressedClass extends S.Class<UnstressedClass>("UnstressedClass")({
+    "Alain": S.Null,
+    "Amphirhina": S.Null,
+    "antimachinery": S.Null,
+    "coldish": S.Null,
+    "crantara": S.Null,
+    "distinguishing": S.Null,
+    "elytroposis": S.Null,
+    "gentianwort": S.Null,
+    "heliosis": S.Null,
+    "instrumental": S.Null,
+    "introinflection": S.Null,
+    "kala": S.Null,
+    "Lincolnian": S.Null,
+    "metad": S.Null,
+    "Sarcophilus": S.Null,
+    "swingingly": S.Null,
+    "unconformity": S.Null,
+    "undecreed": S.Null,
+    "venerable": S.Null,
+    "vowellessness": S.Null,
+}) {}
+
+export class UnimpeachablyClass extends S.Class<UnimpeachablyClass>("UnimpeachablyClass")({
+    "acerin": S.optional(S.NullOr(S.Int)),
+    "Bobadil": S.optional(S.NullOr(S.Int)),
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "chlorophylligenous": S.optional(S.NullOr(S.Int)),
+    "conversational": S.optional(S.NullOr(S.Int)),
+    "demiowl": S.optional(S.NullOr(S.Int)),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "ectorhinal": S.optional(S.NullOr(S.Int)),
+    "gamblesomeness": S.optional(S.NullOr(S.Int)),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "irrorate": S.optional(S.NullOr(S.Int)),
+    "kindergartening": S.optional(S.NullOr(S.Int)),
+    "lateritic": S.optional(S.NullOr(S.Int)),
+    "mespil": S.optional(S.NullOr(S.Int)),
+    "misconfiguration": S.optional(S.NullOr(S.Int)),
+    "nonbookish": S.optional(S.Null),
+    "planometry": S.optional(S.NullOr(S.Int)),
+    "Quiina": S.optional(S.NullOr(S.Int)),
+    "Robert": S.optional(S.NullOr(S.Int)),
+    "rot": S.optional(S.NullOr(S.Int)),
+    "subcinctorium": S.optional(S.NullOr(S.Int)),
+    "tussocker": S.optional(S.NullOr(S.Int)),
+    "ultraproud": S.optional(S.NullOr(S.Int)),
+    "unsuggestedness": S.optional(S.NullOr(S.Int)),
+}) {}
+
+export class TruantcyClass extends S.Class<TruantcyClass>("TruantcyClass")({
+    "alfiona": S.optional(S.Null),
+    "ascaridiasis": S.optional(S.Null),
+    "bungey": S.optional(S.Null),
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "ceroxyle": S.optional(S.Null),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "chorology": S.optional(S.Null),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "enmarble": S.optional(S.Null),
+    "Epeira": S.optional(S.Null),
+    "Eurylaimi": S.optional(S.Null),
+    "germination": S.optional(S.Null),
+    "hallelujah": S.optional(S.Null),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "lev": S.optional(S.Null),
+    "mouthing": S.optional(S.Null),
+    "nonbookish": S.optional(S.Null),
+    "philliloo": S.optional(S.Null),
+    "planetal": S.optional(S.Null),
+    "poney": S.optional(S.Null),
+    "punctualist": S.optional(S.Null),
+    "returnlessly": S.optional(S.Null),
+    "skelder": S.optional(S.Null),
+    "windwaywardly": S.optional(S.Null),
+    "Yuman": S.optional(S.Null),
+}) {}
+
+export class StrenuosityClass extends S.Class<StrenuosityClass>("StrenuosityClass")({
+    "bliss": S.optional(S.NullOr(S.Int)),
+    "buccate": S.optional(S.NullOr(S.Int)),
+    "bulletproof": S.optional(S.NullOr(S.Int)),
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "crumblingness": S.optional(S.NullOr(S.Int)),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "engagedly": S.optional(S.NullOr(S.Int)),
+    "fightable": S.optional(S.NullOr(S.Int)),
+    "hoariness": S.optional(S.NullOr(S.Int)),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "hypopodium": S.optional(S.NullOr(S.Int)),
+    "luxurist": S.optional(S.NullOr(S.Int)),
+    "mechanician": S.optional(S.NullOr(S.Int)),
+    "nonbookish": S.optional(S.Null),
+    "Onopordon": S.optional(S.NullOr(S.Int)),
+    "podgily": S.optional(S.NullOr(S.Int)),
+    "reformableness": S.optional(S.NullOr(S.Int)),
+    "scatterbrains": S.optional(S.NullOr(S.Int)),
+    "seminuria": S.optional(S.NullOr(S.Int)),
+    "Sodomite": S.optional(S.NullOr(S.Int)),
+    "tramp": S.optional(S.NullOr(S.Int)),
+    "undueness": S.optional(S.NullOr(S.Int)),
+    "worthily": S.optional(S.NullOr(S.Int)),
+    "Yankeeist": S.optional(S.NullOr(S.Int)),
+}) {}
+
+export class Staghunting extends S.Class<Staghunting>("Staghunting")({
+    "calorimetric": S.optional(S.NullOr(S.Int)),
+    "canid": S.optional(S.NullOr(S.Int)),
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "ditriglyphic": S.optional(S.NullOr(S.Int)),
+    "floriferousness": S.optional(S.NullOr(S.Int)),
+    "gamelike": S.optional(S.NullOr(S.Int)),
+    "grig": S.optional(S.NullOr(S.Int)),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "interloan": S.optional(S.NullOr(S.Int)),
+    "lithotomy": S.optional(S.NullOr(S.Int)),
+    "loric": S.optional(S.NullOr(S.Int)),
+    "membranocoriaceous": S.optional(S.NullOr(S.Int)),
+    "membranogenic": S.optional(S.NullOr(S.Int)),
+    "nonbookish": S.optional(S.Null),
+    "overtrump": S.optional(S.NullOr(S.Int)),
+    "scotino": S.optional(S.NullOr(S.Int)),
+    "seasonable": S.optional(S.NullOr(S.Int)),
+    "sephen": S.optional(S.NullOr(S.Int)),
+    "stigmarioid": S.optional(S.NullOr(S.Int)),
+    "tired": S.optional(S.NullOr(S.Int)),
+    "trifid": S.optional(S.NullOr(S.Int)),
+    "undefeatedly": S.optional(S.NullOr(S.Int)),
+    "ungirlish": S.optional(S.NullOr(S.Int)),
+}) {}
+
+export class SisteringClass extends S.Class<SisteringClass>("SisteringClass")({
+    "amphicarpic": S.Null,
+    "Chianti": S.Null,
+    "frigorific": S.Null,
+    "Haplomi": S.Null,
+    "hyperkinesis": S.Null,
+    "laudable": S.Null,
+    "madwoman": S.Null,
+    "maimedly": S.Null,
+    "Micropterygidae": S.Null,
+    "microrhabdus": S.Null,
+    "nondense": S.Null,
+    "phlebemphraxis": S.Null,
+    "redsear": S.Null,
+    "schismatical": S.Null,
+    "tartryl": S.Null,
+    "unabhorred": S.Null,
+    "undeliberateness": S.Null,
+    "unmixable": S.Null,
+    "untruckling": S.Null,
+    "vineal": S.Null,
+}) {}
+
+export class Scatty extends S.Class<Scatty>("Scatty")({
+    "aeriferous": S.Null,
+    "antical": S.Null,
+    "antighostism": S.Null,
+    "arcanum": S.Null,
+    "autotrophy": S.Null,
+    "baronial": S.Null,
+    "caffeine": S.Null,
+    "gorgoniacean": S.Null,
+    "heroical": S.Null,
+    "hydropical": S.Null,
+    "mechanology": S.Null,
+    "musicopoetic": S.Null,
+    "officiality": S.Null,
+    "oftentimes": S.Null,
+    "ophthalmotonometer": S.Null,
+    "reflectively": S.Null,
+    "springer": S.Null,
+    "Tabasco": S.Null,
+    "teleianthous": S.Null,
+    "uncombated": S.Null,
+}) {}
+
+export class SaxtenClass extends S.Class<SaxtenClass>("SaxtenClass")({
+    "algarrobilla": S.optional(S.Null),
+    "bowgrace": S.optional(S.Null),
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "Centaurid": S.optional(S.Null),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "flix": S.optional(S.Null),
+    "germanely": S.optional(S.Null),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "inhume": S.optional(S.Null),
+    "lepidote": S.optional(S.Null),
+    "megalochirous": S.optional(S.Null),
+    "ninepenny": S.optional(S.Null),
+    "nonbookish": S.optional(S.Null),
+    "nondeist": S.optional(S.Null),
+    "nymphaeaceous": S.optional(S.Null),
+    "parietofrontal": S.optional(S.Null),
+    "sancyite": S.optional(S.Null),
+    "subjectivist": S.optional(S.Null),
+    "tibiad": S.optional(S.Null),
+    "transonic": S.optional(S.Null),
+    "tripetalous": S.optional(S.Null),
+    "trunchman": S.optional(S.Null),
+    "urger": S.optional(S.Null),
+    "withdrawnness": S.optional(S.Null),
+}) {}
+
+export class SantirClass extends S.Class<SantirClass>("SantirClass")({
+    "admiredly": S.Null,
+    "demicaponier": S.Null,
+    "epitympanic": S.Null,
+    "investitor": S.Null,
+    "lupiform": S.Null,
+    "monoflagellate": S.Null,
+    "paleoethnic": S.Null,
+    "prediscountable": S.Null,
+    "rhetoricals": S.Null,
+    "roomth": S.Null,
+    "saccharose": S.Null,
+    "septonasal": S.Null,
+    "serpenticide": S.Null,
+    "setarious": S.Null,
+    "spaework": S.Null,
+    "stylite": S.Null,
+    "Suessiones": S.Null,
+    "timelily": S.Null,
+    "unprofaned": S.Null,
+    "vorticular": S.Null,
+}) {}
+
+export class RewriteClass extends S.Class<RewriteClass>("RewriteClass")({
+    "accountancy": S.Null,
+    "cacotrophic": S.Null,
+    "contest": S.Null,
+    "couthily": S.Null,
+    "falculate": S.Null,
+    "foreseize": S.Null,
+    "Hyades": S.Null,
+    "lemnad": S.Null,
+    "monotheistically": S.Null,
+    "nonflying": S.Null,
+    "Ptenoglossa": S.Null,
+    "repatch": S.Null,
+    "rodman": S.Null,
+    "strung": S.Null,
+    "titmal": S.Null,
+    "twalpennyworth": S.Null,
+    "unblamable": S.Null,
+    "vertical": S.Null,
+    "Whiggification": S.Null,
+    "yardman": S.Null,
+}) {}
+
+export class Ressaut extends S.Class<Ressaut>("Ressaut")({
+    "apperceptive": S.String,
+    "cuttoo": S.String,
+    "douser": S.String,
+    "drinkproof": S.String,
+    "forementioned": S.String,
+    "Freesia": S.String,
+    "Genevieve": S.String,
+    "hyperdiabolical": S.String,
+    "hypocone": S.String,
+    "irreverentially": S.String,
+    "jumart": S.String,
+    "Mimosaceae": S.String,
+    "mollicrush": S.String,
+    "nedder": S.String,
+    "retinasphalt": S.String,
+    "sough": S.String,
+    "steading": S.String,
+    "Theopaschitism": S.String,
+    "undurableness": S.String,
+    "unmingleable": S.String,
+}) {}
+
+export class Reimagine extends S.Class<Reimagine>("Reimagine")({
+    "adducible": S.optional(S.Null),
+    "anabolin": S.optional(S.Null),
+    "brainy": S.optional(S.Null),
+    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "chrysamine": S.optional(S.Null),
+    "disdiapason": S.optional(S.NullOr(S.String)),
+    "fluxweed": S.optional(S.Null),
+    "glaucine": S.optional(S.Null),
+    "grobianism": S.optional(S.Null),
+    "Hermo": S.optional(S.Null),
+    "hieroglyphist": S.optional(S.Null),
+    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "icteroid": S.optional(S.Null),
+    "immortal": S.optional(S.Null),
+    "impetulant": S.optional(S.Null),
+    "irrigate": S.optional(S.Null),
+    "myxedema": S.optional(S.Null),
+    "nonbookish": S.optional(S.Null),
+    "onyx": S.optional(S.Null),
+    "repasser": S.optional(S.Null),
+    "septomarginal": S.optional(S.Null),
+    "subdie": S.optional(S.Null),
+    "tibiometatarsal": S.optional(S.Null),
+    "waltzlike": S.optional(S.Null),
+}) {}
+
+export class QuebrachineClass extends S.Class<QuebrachineClass>("QuebrachineClass")({
+    "catharticalness": S.Number,
+    "Chirotherium": S.Int,
+    "disdiapason": S.String,
+    "homocerc": S.Boolean,
+    "nonbookish": S.Null,
+}) {}
+
+export class PyodermiaClass extends S.Class<PyodermiaClass>("PyodermiaClass")({
+    "aphoristically": S.Null,
+    "apophyllous": S.Null,
+    "cognize": S.Null,
+    "dermonosology": S.Null,
+    "Gyppo": S.Null,
+    "ither": S.Null,
+    "juglandaceous": S.Null,
+    "litho": S.Null,
+    "macropterous": S.Null,
+    "photographer": S.Null,
+    "romancing": S.Null,
+    "rumness": S.Null,
+    "somniloquist": S.Null,
+    "stressfully": S.Null,
+    "tactically": S.Null,
+    "tracheophony": S.Null,
+    "unappositely": S.Null,
+    "unclothedly": S.Null,
+    "unimplied": S.Null,
+    "unsyncopated": S.Null,
+}) {}
+
+export class PulpitismClass extends S.Class<PulpitismClass>("PulpitismClass")({
+    "abnet": S.Null,
+    "buckhorn": S.Null,
+    "calciform": S.Null,
+    "chelophore": S.Null,
+    "cogitation": S.Null,
+    "decreeable": S.Null,
+    "despicable": S.Null,
+    "isodiazo": S.Null,
+    "jadedly": S.Null,
+    "leptochlorite": S.Null,
+    "nursling": S.Null,
+    "palamedean": S.Null,
+    "photoheliograph": S.Null,
+    "pipewood": S.Null,
+    "roberd": S.Null,
+    "statable": S.Null,
+    "superassume": S.Null,
+    "syllabe": S.Null,
+    "toughhead": S.Null,
+    "underburn": S.Null,
+}) {}
+
+export class TopLevel extends S.Class<TopLevel>("TopLevel")({
+    "protrusive": S.Array(S.Union(S.Array(S.NullOr(S.Int)), S.Number)),
+    "pulpitism": S.Array(S.Union(S.Array(S.Int), S.Number, PulpitismClass)),
+    "pyodermia": S.Array(S.Union(S.Int, PyodermiaClass)),
+    "quebrachine": S.Array(S.Union(S.Boolean, QuebrachineClass, S.Null)),
+    "querier": S.Array(S.Union(S.Boolean, S.Record({ key: S.String, value: S.Int}))),
+    "rebarbative": S.Array(S.Union(S.Array(S.Int), S.Boolean, S.Number)),
+    "reimagine": S.Array(Reimagine),
+    "ressaut": Ressaut,
+    "retrocervical": S.Array(S.Union(S.Array(S.NullOr(S.Int)), S.Int)),
+    "revert": S.Array(S.Union(S.Boolean, S.String)),
+    "rewrite": S.Array(S.Union(S.Array(S.Null), S.Number, RewriteClass)),
+    "saccoderm": S.Array(S.Union(S.Array(S.Int), S.String, S.Null)),
+    "santir": S.Array(S.Union(S.Number, SantirClass)),
+    "saprophilous": S.Array(S.Union(S.Record({ key: S.String, value: S.Int}), S.String, S.Null)),
+    "saxten": S.Array(S.Union(S.String, SaxtenClass)),
+    "scatty": S.Array(S.NullOr(Scatty)),
+    "scoffer": S.Array(S.Union(S.Array(S.Null), S.Record({ key: S.String, value: S.Int}), S.Null)),
+    "scrampum": S.Array(S.Union(S.Array(S.Int), S.Boolean, S.Null)),
+    "semantic": S.Number,
+    "serpentinic": S.Array(S.Union(S.Array(S.Int), S.Number)),
+    "shadowable": S.Array(S.Union(S.Array(S.NullOr(S.Int)), S.Boolean)),
+    "sistering": S.Array(S.Union(S.Array(S.Null), S.Int, SisteringClass)),
+    "staghunting": S.Array(Staghunting),
+    "stagmometer": S.Array(S.Union(S.Array(S.NullOr(S.Int)), S.String)),
+    "stimulability": S.Array(S.Union(S.Boolean, S.Int, S.Record({ key: S.String, value: S.Int}))),
+    "strangleable": S.Array(S.Union(S.Array(S.Null), S.Number)),
+    "strenuosity": S.Array(S.Union(S.Array(S.Null), StrenuosityClass)),
+    "tabaxir": S.Array(S.Union(S.Boolean, S.Number)),
+    "talpiform": S.Array(S.Union(S.Number, QuebrachineClass, S.Null)),
+    "thwack": S.Array(S.Union(S.Boolean, S.Number, QuebrachineClass)),
+    "to": S.Array(S.NullOr(S.Number)),
+    "tortricine": S.Array(S.Union(S.Array(S.NullOr(S.Int)), QuebrachineClass)),
+    "truantcy": S.Array(S.Union(S.Boolean, TruantcyClass)),
+    "turgesce": S.Array(S.String),
+    "unbeginning": S.Array(S.Union(S.Array(S.Null), S.Record({ key: S.String, value: S.Int}), S.String)),
+    "underdunged": S.Array(S.Number),
+    "undesirability": S.Array(S.Union(S.Array(S.Int), S.Record({ key: S.String, value: S.Int}), S.String)),
+    "unerasing": S.Array(S.Union(S.Array(S.Null), S.Int, S.Record({ key: S.String, value: S.Int}))),
+    "unguentarium": S.Array(S.Union(S.Array(S.Null), S.Int, S.Null)),
+    "unimpeachably": S.Array(S.Union(S.Boolean, UnimpeachablyClass)),
+    "unmortgaged": S.Array(S.Union(S.Number, S.Record({ key: S.String, value: S.Int}), S.Null)),
+    "unobstructed": S.Array(S.Union(S.Int, QuebrachineClass, S.Null)),
+    "unreceptivity": S.Array(S.Union(S.Array(S.Null), S.Int, S.String)),
+    "unsatisfactoriness": S.Array(S.Union(S.Array(S.Int), S.Boolean, S.Int)),
+    "unsecurity": S.Array(S.Int),
+    "unstressed": S.Array(S.Union(S.Boolean, S.String, UnstressedClass)),
+    "untasked": S.Array(S.Union(S.Array(S.Null), S.Number, S.Record({ key: S.String, value: S.Int}))),
+    "unvarying": S.Array(S.Union(S.Boolean, S.Number, S.Record({ key: S.String, value: S.Int}))),
+    "vehemently": S.Array(S.Union(S.Array(S.Null), S.Boolean, S.Null)),
+    "warriorship": S.Record({ key: S.String, value: S.Boolean}),
+    "whitepot": S.Array(S.Union(S.Number, QuebrachineClass)),
+    "wrothy": S.Array(S.Union(S.Array(S.Null), WrothyClass)),
+}) {}
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/keywords.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/keywords.json/default/TopLevel.ts
index e8faeb6..0f915b5 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/keywords.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/keywords.json/default/TopLevel.ts
@@ -281,6 +281,10 @@ export class Sbyte extends S.Class<Sbyte>("Sbyte")({
     "sbyte": S.Int,
 }) {}
 
+export class SClass extends S.Class<SClass>("SClass")({
+    "s": S.Int,
+}) {}
+
 export class Right extends S.Class<Right>("Right")({
     "right": S.Int,
 }) {}
@@ -383,6 +387,7 @@ export class Obj4 extends S.Class<Obj4>("Obj4")({
     "rethrows": Rethrows,
     "return": Return,
     "right": Right,
+    "s": SClass,
     "sbyte": Sbyte,
     "sealed": Sealed,
     "SEL": Sel,
diff --git a/head/typescript-effect-schema/test/inputs/json/samples/copy-with-property.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/samples/copy-with-property.json/default/TopLevel.ts
new file mode 100644
index 0000000..e1f230b
--- /dev/null
+++ b/head/typescript-effect-schema/test/inputs/json/samples/copy-with-property.json/default/TopLevel.ts
@@ -0,0 +1,7 @@
+import * as S from "effect/Schema";
+
+
+export class TopLevel extends S.Class<TopLevel>("TopLevel")({
+    "copyWith": S.Int,
+    "name": S.String,
+}) {}
diff --git a/head/typescript-effect-schema/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.ts
new file mode 100644
index 0000000..9da055b
--- /dev/null
+++ b/head/typescript-effect-schema/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.ts
@@ -0,0 +1,13 @@
+import * as S from "effect/Schema";
+
+
+export const Value = S.Literal(
+    "c0\u0001\u001b\u001f",
+    "c1\u007f\u0080\u0085\u009f",
+);
+export type Value = S.Schema.Type<typeof Value>;
+
+export class TopLevel extends S.Class<TopLevel>("TopLevel")({
+    "literal": S.String,
+    "values": S.Array(Value),
+}) {}
diff --git a/head/typescript-zod/test/inputs/json/priority/combinations1.json/just-schema-true--8c4ca457bcba/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/combinations1.json/just-schema-true--8c4ca457bcba/TopLevel.ts
new file mode 100644
index 0000000..d06391f
--- /dev/null
+++ b/head/typescript-zod/test/inputs/json/priority/combinations1.json/just-schema-true--8c4ca457bcba/TopLevel.ts
@@ -0,0 +1,332 @@
+import * as z from "zod";
+
+
+export const CerographClassSchema = z.object({
+    "apotropaion": z.null(),
+    "casuary": z.null(),
+    "creaker": z.null(),
+    "disqualification": z.null(),
+    "imperatorious": z.null(),
+    "impermeabilize": z.null(),
+    "metastoma": z.null(),
+    "noctidiurnal": z.null(),
+    "nonreserve": z.null(),
+    "ophthalmotonometry": z.null(),
+    "pailful": z.null(),
+    "pigfish": z.null(),
+    "pongee": z.null(),
+    "prosodical": z.null(),
+    "scrofuloderm": z.null(),
+    "storekeeping": z.null(),
+    "therologist": z.null(),
+    "Tolowa": z.null(),
+    "tradeful": z.null(),
+    "unriveting": z.null(),
+});
+
+export const ChemotherapeuticClassSchema = z.object({
+    "angioneurotic": z.null().optional(),
+    "availment": z.null().optional(),
+    "bladelet": z.null().optional(),
+    "catharticalness": z.number().optional(),
+    "caulis": z.null().optional(),
+    "chalcus": z.null().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "disdiapason": z.string().optional(),
+    "enteradenological": z.null().optional(),
+    "homocerc": z.boolean().optional(),
+    "imporosity": z.null().optional(),
+    "insistently": z.null().optional(),
+    "intraparietal": z.null().optional(),
+    "ivied": z.null().optional(),
+    "Maureen": z.null().optional(),
+    "nonbookish": z.null().optional(),
+    "nostochine": z.null().optional(),
+    "nutcracker": z.null().optional(),
+    "ofttimes": z.null().optional(),
+    "phenocryst": z.null().optional(),
+    "precoincident": z.null().optional(),
+    "ramiferous": z.null().optional(),
+    "stagmometer": z.null().optional(),
+    "tetherball": z.null().optional(),
+    "unshy": z.null().optional(),
+});
+
+export const CimeliaClassSchema = z.object({
+    "catharticalness": z.number(),
+    "Chirotherium": z.number().int(),
+    "disdiapason": z.string(),
+    "homocerc": z.boolean(),
+    "nonbookish": z.null(),
+});
+
+export const CoadjustClassSchema = z.object({
+    "amidosulphonal": z.null().optional(),
+    "Benny": z.null().optional(),
+    "catharticalness": z.number().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "disdiapason": z.string().optional(),
+    "ensnare": z.null().optional(),
+    "homocerc": z.boolean().optional(),
+    "hybridizer": z.null().optional(),
+    "leastwise": z.null().optional(),
+    "lof": z.null().optional(),
+    "monkhood": z.null().optional(),
+    "Netherlandish": z.null().optional(),
+    "nonbookish": z.null().optional(),
+    "peonism": z.null().optional(),
+    "Phonelescope": z.null().optional(),
+    "porphyrogeniture": z.null().optional(),
+    "preindemnify": z.null().optional(),
+    "rosal": z.null().optional(),
+    "scalenous": z.null().optional(),
+    "scopine": z.null().optional(),
+    "Sedaceae": z.null().optional(),
+    "suberinize": z.null().optional(),
+    "symbiot": z.null().optional(),
+    "tablefellow": z.null().optional(),
+    "unchargeable": z.null().optional(),
+});
+
+export const CredulityClassSchema = z.object({
+    "ammonolytic": z.null(),
+    "bushmaster": z.null(),
+    "considering": z.null(),
+    "consuetudinary": z.null(),
+    "embarras": z.null(),
+    "fineness": z.null(),
+    "flaithship": z.null(),
+    "Flavia": z.null(),
+    "gruffly": z.null(),
+    "Hedychium": z.null(),
+    "leadwort": z.null(),
+    "overseriously": z.null(),
+    "parabola": z.null(),
+    "pectinatodenticulate": z.null(),
+    "Popean": z.null(),
+    "pornocrat": z.null(),
+    "quadrisect": z.null(),
+    "seriality": z.null(),
+    "vamphorn": z.null(),
+    "wharp": z.null(),
+});
+
+export const DeruralizeClassSchema = z.object({
+    "bockerel": z.null(),
+    "boulder": z.null(),
+    "churrus": z.null(),
+    "counterdigged": z.null(),
+    "dialogite": z.null(),
+    "digenic": z.null(),
+    "dunbird": z.null(),
+    "ergatogyne": z.null(),
+    "fiendful": z.null(),
+    "jackrod": z.null(),
+    "Jehovistic": z.null(),
+    "Paninean": z.null(),
+    "panther": z.null(),
+    "placentigerous": z.null(),
+    "Romney": z.null(),
+    "sparm": z.null(),
+    "tocsin": z.null(),
+    "unnicked": z.null(),
+    "unstavable": z.null(),
+    "windfirm": z.null(),
+});
+
+export const DiaereseClassSchema = z.object({
+    "Amoreuxia": z.null(),
+    "ani": z.null(),
+    "bernicle": z.null(),
+    "blackwasher": z.null(),
+    "blowhard": z.null(),
+    "broma": z.null(),
+    "closecross": z.null(),
+    "congregationalism": z.null(),
+    "grayly": z.null(),
+    "historically": z.null(),
+    "hoast": z.null(),
+    "irretentive": z.null(),
+    "parcener": z.null(),
+    "pedder": z.null(),
+    "pseudoanatomic": z.null(),
+    "rhizocarpian": z.null(),
+    "samel": z.null(),
+    "silker": z.null(),
+    "subdentated": z.null(),
+    "subobscure": z.null(),
+});
+
+export const EncrustSchema = z.object({
+    "comradely": z.null(),
+    "diacanthous": z.null(),
+    "feminineness": z.null(),
+    "gossamered": z.null(),
+    "Hibernia": z.null(),
+    "Hibiscus": z.null(),
+    "Lepidosauria": z.null(),
+    "lollingly": z.null(),
+    "manager": z.null(),
+    "mechanic": z.null(),
+    "overminuteness": z.null(),
+    "papelonne": z.null(),
+    "plebification": z.null(),
+    "pugmiller": z.null(),
+    "recoveror": z.null(),
+    "spermatoblastic": z.null(),
+    "Syllidae": z.null(),
+    "ungyved": z.null(),
+    "whirlabout": z.null(),
+    "woodenware": z.null(),
+});
+
+export const FagginglyClassSchema = z.object({
+    "abranchian": z.null(),
+    "aculeiform": z.null(),
+    "adiaphoristic": z.null(),
+    "adoptionism": z.null(),
+    "Anglic": z.null(),
+    "antrotomy": z.null(),
+    "coerciveness": z.null(),
+    "decorist": z.null(),
+    "duckhood": z.null(),
+    "Heteromeri": z.null(),
+    "hypochnose": z.null(),
+    "lochage": z.null(),
+    "melee": z.null(),
+    "nonconformitant": z.null(),
+    "Poinsettia": z.null(),
+    "putatively": z.null(),
+    "semivolatile": z.null(),
+    "soleas": z.null(),
+    "unfastenable": z.null(),
+    "unmillinered": z.null(),
+});
+
+export const FenkClassSchema = z.object({
+    "apoise": z.null(),
+    "astronomize": z.null(),
+    "cockhorse": z.null(),
+    "copular": z.null(),
+    "Dagomba": z.null(),
+    "draffy": z.null(),
+    "foreigner": z.null(),
+    "Guyandot": z.null(),
+    "neurogliosis": z.null(),
+    "osmious": z.null(),
+    "palpitate": z.null(),
+    "rebukeable": z.null(),
+    "Reinwardtia": z.null(),
+    "reservatory": z.null(),
+    "scalt": z.null(),
+    "scripturalize": z.null(),
+    "tintometer": z.null(),
+    "Tritoness": z.null(),
+    "undergrade": z.null(),
+    "undermountain": z.null(),
+});
+
+export const FlagmakingClassSchema = z.object({
+    "albarco": z.null(),
+    "Bunodonta": z.null(),
+    "hornify": z.null(),
+    "Hydrocorisae": z.null(),
+    "hypoglossus": z.null(),
+    "inexpiably": z.null(),
+    "ingratitude": z.null(),
+    "ladyfly": z.null(),
+    "medicament": z.null(),
+    "monogrammatic": z.null(),
+    "nobbut": z.null(),
+    "Notacanthidae": z.null(),
+    "polyplacophore": z.null(),
+    "proexercise": z.null(),
+    "protoplast": z.null(),
+    "puzzling": z.null(),
+    "splanchnoskeleton": z.null(),
+    "unloveliness": z.null(),
+    "unquarantined": z.null(),
+    "unrenounceable": z.null(),
+});
+
+export const HemocoeleClassSchema = z.object({
+    "acrogamy": z.null().optional(),
+    "amelification": z.null().optional(),
+    "autobiographic": z.null().optional(),
+    "berat": z.null().optional(),
+    "catharticalness": z.number().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "disdiapason": z.string().optional(),
+    "disproportionably": z.null().optional(),
+    "erythrite": z.null().optional(),
+    "graphic": z.null().optional(),
+    "hepatological": z.null().optional(),
+    "homocerc": z.boolean().optional(),
+    "incommensurably": z.null().optional(),
+    "misaffirm": z.null().optional(),
+    "nonbookish": z.null().optional(),
+    "pocketbook": z.null().optional(),
+    "sclerometric": z.null().optional(),
+    "stambouline": z.null().optional(),
+    "stickpin": z.null().optional(),
+    "tubulure": z.null().optional(),
+    "undelated": z.null().optional(),
+    "unsalt": z.null().optional(),
+    "untutelar": z.null().optional(),
+    "vagrant": z.null().optional(),
+    "Walt": z.null().optional(),
+});
+
+export const InteracinarSchema = z.object({
+    "assapan": z.number(),
+    "benefactorship": z.boolean(),
+    "triseriatim": z.string(),
+    "tubbing": z.number().int(),
+    "untrimmed": z.null(),
+});
+
+export const TopLevelSchema = z.object({
+    "centrodesmose": z.string(),
+    "cerograph": z.array(z.union([z.null(), CerographClassSchema, z.string()])),
+    "chemotherapeutics": z.array(z.union([ChemotherapeuticClassSchema, z.number().int()])),
+    "cimelia": z.array(z.union([z.null(), z.array(z.number().int()), CimeliaClassSchema])),
+    "citrated": z.number().int(),
+    "clinodome": z.array(z.union([z.number(), z.string()])),
+    "coadjust": z.array(z.union([CoadjustClassSchema, z.number()])),
+    "consilience": z.array(z.union([z.number(), z.record(z.string(), z.number().int())])),
+    "constructor": z.array(z.union([z.boolean(), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
+    "continuative": z.array(z.union([z.record(z.string(), z.number().int()), z.string()])),
+    "credulity": z.array(z.union([CredulityClassSchema, z.number().int(), z.string()])),
+    "creviced": z.array(z.union([z.boolean(), z.record(z.string(), z.number().int()), z.string()])),
+    "cubiculum": z.array(z.array(z.union([z.null(), z.number().int()]))),
+    "deruralize": z.array(z.union([z.array(z.null()), z.boolean(), DeruralizeClassSchema])),
+    "diaereses": z.array(z.union([z.array(z.number().int()), z.boolean(), DiaereseClassSchema])),
+    "dissolution": z.array(z.union([z.null(), z.array(z.null())])),
+    "downstroke": z.array(z.union([z.array(z.null()), z.boolean(), z.string()])),
+    "electrotautomerism": z.array(z.union([z.null(), z.number()])),
+    "eleutheromania": z.array(z.union([z.number(), z.record(z.string(), z.number().int()), z.string()])),
+    "encrust": EncrustSchema,
+    "entomoid": z.array(z.union([CimeliaClassSchema, z.number().int()])),
+    "epipaleolithic": z.array(z.union([z.array(z.number().int()), z.number()])),
+    "expropriable": z.array(z.union([z.array(z.null()), CimeliaClassSchema, z.number()])),
+    "faggingly": z.array(z.union([FagginglyClassSchema, z.number()])),
+    "fenks": z.array(z.union([FenkClassSchema, z.string()])),
+    "flagmaking": z.array(z.union([z.boolean(), FlagmakingClassSchema, z.number()])),
+    "fluorometer": z.array(z.union([z.null(), z.number().int(), z.string()])),
+    "fulsome": z.array(z.union([z.null(), z.number().int()])),
+    "fuzzy": z.array(z.union([z.number().int(), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
+    "gardenwards": z.array(z.union([z.array(z.number().int()), z.boolean(), z.string()])),
+    "generalissimo": z.array(z.union([z.null(), z.boolean(), z.record(z.string(), z.number().int())])),
+    "habeas": z.array(z.union([z.null(), z.record(z.string(), z.number().int())])),
+    "hemicrystalline": z.array(z.union([CimeliaClassSchema, z.string()])),
+    "hemocoele": z.array(z.union([z.array(z.number().int()), HemocoeleClassSchema])),
+    "hoister": z.array(z.union([z.null(), CimeliaClassSchema, z.string()])),
+    "hyperpiesis": z.array(z.union([z.null(), z.array(z.null()), CimeliaClassSchema])),
+    "hyppish": z.array(z.union([z.null(), z.boolean(), z.string()])),
+    "idealizer": z.array(z.union([z.array(z.null()), CimeliaClassSchema, z.number().int()])),
+    "incrustator": z.array(z.union([z.array(z.number().int()), z.number().int(), z.string()])),
+    "intentiveness": z.array(z.union([CimeliaClassSchema, z.number(), z.string()])),
+    "interacinar": InteracinarSchema,
+    "intercorrelation": z.array(z.union([z.null(), z.array(z.number().int())])),
+    "jacutinga": z.array(z.union([z.array(z.number().int()), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
+});
diff --git a/head/typescript-zod/test/inputs/json/priority/combinations2.json/just-schema-true--8c4ca457bcba/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/combinations2.json/just-schema-true--8c4ca457bcba/TopLevel.ts
new file mode 100644
index 0000000..8244ab1
--- /dev/null
+++ b/head/typescript-zod/test/inputs/json/priority/combinations2.json/just-schema-true--8c4ca457bcba/TopLevel.ts
@@ -0,0 +1,280 @@
+import * as z from "zod";
+
+
+export const AlleviateClassSchema = z.object({
+    "apriori": z.null(),
+    "beggarer": z.null(),
+    "brokenheartedly": z.null(),
+    "debilitation": z.null(),
+    "frike": z.null(),
+    "gastrolith": z.null(),
+    "Hulsean": z.null(),
+    "orthocentric": z.null(),
+    "petaly": z.null(),
+    "probudgeting": z.null(),
+    "reacquire": z.null(),
+    "scow": z.null(),
+    "shutoff": z.null(),
+    "subcontiguous": z.null(),
+    "suffumigate": z.null(),
+    "transformable": z.null(),
+    "uncoroneted": z.null(),
+    "unparking": z.null(),
+    "unvarnishedness": z.null(),
+    "wherewithal": z.null(),
+});
+
+export const RebeccaSchema = z.object({
+    "catharticalness": z.number(),
+    "Chirotherium": z.number().int(),
+    "disdiapason": z.string(),
+    "homocerc": z.boolean(),
+    "nonbookish": z.null(),
+});
+
+export const AmphithyronSchema = z.object({
+    "akroasis": z.number().int().optional(),
+    "antiphonical": z.number().int().optional(),
+    "basebred": z.number().int().optional(),
+    "catharticalness": z.number().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "conductometric": z.number().int().optional(),
+    "disdiapason": z.string().optional(),
+    "ensilation": z.number().int().optional(),
+    "eyebolt": z.number().int().optional(),
+    "fistulated": z.number().int().optional(),
+    "heteropod": z.number().int().optional(),
+    "homocerc": z.boolean().optional(),
+    "Juniperus": z.number().int().optional(),
+    "labyrinthically": z.number().int().optional(),
+    "martyrization": z.number().int().optional(),
+    "mispolicy": z.number().int().optional(),
+    "multipara": z.number().int().optional(),
+    "Nazirite": z.number().int().optional(),
+    "nonbookish": z.null().optional(),
+    "possessorial": z.number().int().optional(),
+    "shamed": z.number().int().optional(),
+    "shelfworn": z.number().int().optional(),
+    "stagnum": z.number().int().optional(),
+    "Those": z.number().int().optional(),
+    "undecimal": z.number().int().optional(),
+});
+
+export const AnkeeClassSchema = z.object({
+    "Anomoean": z.null(),
+    "barleyhood": z.null(),
+    "befriender": z.null(),
+    "brutishness": z.null(),
+    "cephalalgy": z.null(),
+    "cirurgian": z.null(),
+    "conventionally": z.null(),
+    "jackshay": z.null(),
+    "milammeter": z.null(),
+    "Naja": z.null(),
+    "ombrological": z.null(),
+    "phonasthenia": z.null(),
+    "retrievableness": z.null(),
+    "snakily": z.null(),
+    "swot": z.null(),
+    "tartlet": z.null(),
+    "thiofuran": z.null(),
+    "tracheophone": z.null(),
+    "tuglike": z.null(),
+    "unscratchingly": z.null(),
+});
+
+export const AnsarieClassSchema = z.object({
+    "accension": z.null(),
+    "Alida": z.null(),
+    "asteria": z.null(),
+    "beriberic": z.null(),
+    "edgebone": z.null(),
+    "gastrodialysis": z.null(),
+    "geographic": z.null(),
+    "Ictonyx": z.null(),
+    "metrocele": z.null(),
+    "misgraft": z.null(),
+    "monteith": z.null(),
+    "notcher": z.null(),
+    "prorestriction": z.null(),
+    "Ramist": z.null(),
+    "throatlet": z.null(),
+    "unfair": z.null(),
+    "unsynonymous": z.null(),
+    "water": z.null(),
+    "zestfully": z.null(),
+    "zincic": z.null(),
+});
+
+export const ChytridiaceaeClassSchema = z.object({
+    "Batidaceae": z.null(),
+    "Brechites": z.null(),
+    "codespairer": z.null(),
+    "Emery": z.null(),
+    "enervative": z.null(),
+    "excriminate": z.null(),
+    "goshenite": z.null(),
+    "grime": z.null(),
+    "gritten": z.null(),
+    "hectorly": z.null(),
+    "intermediation": z.null(),
+    "meeterly": z.null(),
+    "Narraganset": z.null(),
+    "onymatic": z.null(),
+    "paddlecock": z.null(),
+    "thana": z.null(),
+    "thornily": z.null(),
+    "uckia": z.null(),
+    "unmettle": z.null(),
+    "vorticellid": z.null(),
+});
+
+export const DiscordiaClassSchema = z.object({
+    "Altaic": z.number().int().optional(),
+    "amoristic": z.number().int().optional(),
+    "blennophthalmia": z.number().int().optional(),
+    "catharticalness": z.number().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "disciplinability": z.number().int().optional(),
+    "disdiapason": z.string().optional(),
+    "goofer": z.number().int().optional(),
+    "homocerc": z.boolean().optional(),
+    "laryngograph": z.number().int().optional(),
+    "leucitis": z.number().int().optional(),
+    "lymphocyst": z.number().int().optional(),
+    "microcosmology": z.number().int().optional(),
+    "nauseation": z.number().int().optional(),
+    "nonbookish": z.null().optional(),
+    "Patarin": z.number().int().optional(),
+    "preliberal": z.number().int().optional(),
+    "prettifier": z.number().int().optional(),
+    "rangework": z.number().int().optional(),
+    "redient": z.number().int().optional(),
+    "subfusiform": z.number().int().optional(),
+    "suicidical": z.number().int().optional(),
+    "swow": z.number().int().optional(),
+    "wastrel": z.number().int().optional(),
+    "wingle": z.number().int().optional(),
+});
+
+export const GryphosaurusClassSchema = z.object({
+    "amissibility": z.null(),
+    "Burushaski": z.null(),
+    "citronin": z.null(),
+    "coplaintiff": z.null(),
+    "disquisitionary": z.null(),
+    "enoplan": z.null(),
+    "faintness": z.null(),
+    "hebetomy": z.null(),
+    "islandry": z.null(),
+    "lameduck": z.null(),
+    "overbattle": z.null(),
+    "overinterested": z.null(),
+    "phrenologic": z.null(),
+    "rainband": z.null(),
+    "shiningly": z.null(),
+    "stamineous": z.null(),
+    "subscapularis": z.null(),
+    "Tahami": z.null(),
+    "undaubed": z.null(),
+    "underntime": z.null(),
+});
+
+export const LaviniaClassSchema = z.object({
+    "agitable": z.number().int().optional(),
+    "asininity": z.number().int().optional(),
+    "benefiter": z.number().int().optional(),
+    "bronzelike": z.number().int().optional(),
+    "catharticalness": z.number().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "cholesteatomatous": z.number().int().optional(),
+    "deprivement": z.number().int().optional(),
+    "disdiapason": z.string().optional(),
+    "flippantness": z.number().int().optional(),
+    "fogproof": z.number().int().optional(),
+    "homocerc": z.boolean().optional(),
+    "merrymeeting": z.number().int().optional(),
+    "nonbookish": z.null().optional(),
+    "overcareful": z.number().int().optional(),
+    "panaris": z.number().int().optional(),
+    "preacceptance": z.number().int().optional(),
+    "quinoxaline": z.number().int().optional(),
+    "sig": z.number().int().optional(),
+    "superconfusion": z.number().int().optional(),
+    "Tacana": z.number().int().optional(),
+    "tillotter": z.number().int().optional(),
+    "tranquillize": z.number().int().optional(),
+    "unquestionable": z.number().int().optional(),
+    "uproute": z.number().int().optional(),
+});
+
+export const OskarClassSchema = z.object({
+    "Acrobates": z.null(),
+    "beanshooter": z.null(),
+    "bearhound": z.null(),
+    "Cayuga": z.null(),
+    "guarneri": z.null(),
+    "hypochondriacism": z.null(),
+    "indication": z.null(),
+    "jaculative": z.null(),
+    "nagana": z.null(),
+    "Netherlandish": z.null(),
+    "noctivagous": z.null(),
+    "nonphysiological": z.null(),
+    "praxis": z.null(),
+    "provision": z.null(),
+    "subterhuman": z.null(),
+    "sunlit": z.null(),
+    "syncraniate": z.null(),
+    "teachment": z.null(),
+    "unmutinous": z.null(),
+    "unstoppable": z.null(),
+});
+
+export const TopLevelSchema = z.object({
+    "Abranchiata": z.array(z.union([z.null(), z.array(z.number().int()), z.number().int()])),
+    "academe": z.array(z.union([z.array(z.number().int()), z.number().int(), z.record(z.string(), z.number().int())])),
+    "acquirable": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), z.record(z.string(), z.number().int())])),
+    "aerometry": z.array(z.union([z.boolean(), z.number()])),
+    "alexin": z.array(z.union([z.array(z.number().int()), z.boolean()])),
+    "alleviate": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), AlleviateClassSchema])),
+    "amaas": z.array(z.union([z.boolean(), RebeccaSchema, z.number().int()])),
+    "ambassage": z.array(z.union([z.array(z.null()), z.string()])),
+    "amphithyron": z.array(z.union([z.null(), AmphithyronSchema])),
+    "Andriana": z.array(z.union([z.null(), z.string()])),
+    "ankee": z.array(z.union([z.array(z.number().int()), AnkeeClassSchema, z.number().int()])),
+    "annihilator": z.array(z.union([z.null(), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
+    "annulose": z.null(),
+    "Ansarie": z.array(z.union([z.null(), z.array(z.number().int()), AnsarieClassSchema])),
+    "aphasia": z.array(z.union([z.array(z.number().int()), z.number().int()])),
+    "asprawl": z.array(z.union([z.number(), z.string()])),
+    "attractive": z.array(z.union([z.null(), z.boolean()])),
+    "barksome": z.record(z.string(), z.number().int()),
+    "bedesman": z.array(z.union([z.boolean(), z.number(), z.string()])),
+    "belard": z.array(z.union([z.array(z.number().int()), RebeccaSchema, z.number()])),
+    "bocking": z.array(z.union([z.array(z.number().int()), z.boolean(), z.record(z.string(), z.number().int())])),
+    "brawlingly": z.array(z.union([z.array(z.null()), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
+    "brookie": z.array(z.union([z.array(z.number().int()), RebeccaSchema])),
+    "bumboatman": z.array(z.union([z.null(), z.array(z.null()), z.string()])),
+    "bystreet": z.array(z.null()),
+    "calaverite": z.array(z.union([z.array(z.number().int()), z.string()])),
+    "catallactic": z.array(z.union([z.array(z.null()), z.boolean(), z.record(z.string(), z.number().int())])),
+    "cemental": z.array(z.union([z.array(z.number().int()), z.number(), z.record(z.string(), z.number().int())])),
+    "Chytridiaceae": z.array(z.union([z.null(), z.boolean(), ChytridiaceaeClassSchema])),
+    "Discordia": z.array(z.union([z.array(z.number().int()), DiscordiaClassSchema])),
+    "Endomyces": z.array(z.union([z.number().int(), z.string()])),
+    "Epinephelidae": z.array(z.union([z.boolean(), z.number().int(), z.string()])),
+    "Eupatorium": z.array(z.union([z.array(z.null()), z.record(z.string(), z.number().int())])),
+    "Gryphosaurus": z.array(z.union([z.array(z.number().int()), GryphosaurusClassSchema, z.string()])),
+    "Koryak": z.array(z.union([z.record(z.string(), z.union([z.null(), z.number().int()])), z.string()])),
+    "Lavinia": z.array(z.union([LaviniaClassSchema, z.string()])),
+    "Oskar": z.array(z.union([z.array(z.number().int()), OskarClassSchema])),
+    "Rebecca": z.array(z.union([RebeccaSchema, z.number().int(), z.string()])),
+    "Rhomboganoidei": z.array(z.union([z.array(z.number().int()), RebeccaSchema, z.string()])),
+    "Rigsmal": z.boolean(),
+    "Ruellia": z.array(z.union([z.boolean(), RebeccaSchema, z.string()])),
+    "School": z.array(z.union([z.null(), z.number().int(), z.record(z.string(), z.number().int())])),
+    "Shakespearolater": z.array(z.union([z.array(z.number().int()), z.number(), z.string()])),
+    "Svan": z.array(z.number()),
+    "Wayao": z.record(z.string(), z.number()),
+});
diff --git a/head/typescript-zod/test/inputs/json/priority/combinations3.json/just-schema-true--8c4ca457bcba/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/combinations3.json/just-schema-true--8c4ca457bcba/TopLevel.ts
new file mode 100644
index 0000000..02c5d53
--- /dev/null
+++ b/head/typescript-zod/test/inputs/json/priority/combinations3.json/just-schema-true--8c4ca457bcba/TopLevel.ts
@@ -0,0 +1,384 @@
+import * as z from "zod";
+
+
+export const JurorClassSchema = z.object({
+    "adipsy": z.null(),
+    "auxiliator": z.null(),
+    "benda": z.null(),
+    "benjamin": z.null(),
+    "brandling": z.null(),
+    "epicurishly": z.null(),
+    "eremochaetous": z.null(),
+    "marten": z.null(),
+    "monocline": z.null(),
+    "Olea": z.null(),
+    "palgat": z.null(),
+    "pennyworth": z.null(),
+    "pioury": z.null(),
+    "pragmatistic": z.null(),
+    "stylelessness": z.null(),
+    "systematical": z.null(),
+    "thready": z.null(),
+    "uncontemporary": z.null(),
+    "uncouched": z.null(),
+    "uninhabitedness": z.null(),
+});
+
+export const LadronismClassSchema = z.object({
+    "acclaimer": z.null(),
+    "achree": z.null(),
+    "base": z.null(),
+    "conundrumize": z.null(),
+    "degerminator": z.null(),
+    "describable": z.null(),
+    "exasperatedly": z.null(),
+    "heroine": z.null(),
+    "indazin": z.null(),
+    "luteous": z.null(),
+    "papular": z.null(),
+    "pritch": z.null(),
+    "Prodenia": z.null(),
+    "seege": z.null(),
+    "shopgirl": z.null(),
+    "tragedietta": z.null(),
+    "unsparse": z.null(),
+    "uplook": z.null(),
+    "vermiformis": z.null(),
+    "whafabout": z.null(),
+});
+
+export const LandlubberlyClassSchema = z.object({
+    "acropoleis": z.null(),
+    "aminate": z.null(),
+    "Amyraldism": z.null(),
+    "bipenniform": z.null(),
+    "bugre": z.null(),
+    "calycule": z.null(),
+    "caoutchouc": z.null(),
+    "disprover": z.null(),
+    "fitroot": z.null(),
+    "fulgently": z.null(),
+    "kickup": z.null(),
+    "laevoversion": z.null(),
+    "moter": z.null(),
+    "objectivity": z.null(),
+    "posterity": z.null(),
+    "postnuptial": z.null(),
+    "precedentary": z.null(),
+    "saddling": z.null(),
+    "subcurrent": z.null(),
+    "unrecriminative": z.null(),
+});
+
+export const LupusClassSchema = z.object({
+    "catharticalness": z.number().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "Chlorioninae": z.number().int().optional(),
+    "Corvinae": z.number().int().optional(),
+    "Crassina": z.number().int().optional(),
+    "disdiapason": z.string().optional(),
+    "exiguity": z.number().int().optional(),
+    "farcist": z.number().int().optional(),
+    "holographical": z.number().int().optional(),
+    "homocerc": z.boolean().optional(),
+    "ichthyophagan": z.number().int().optional(),
+    "implacable": z.number().int().optional(),
+    "nonbookish": z.null().optional(),
+    "outshiner": z.number().int().optional(),
+    "overweather": z.number().int().optional(),
+    "protonegroid": z.number().int().optional(),
+    "shallowish": z.number().int().optional(),
+    "snoke": z.number().int().optional(),
+    "snout": z.number().int().optional(),
+    "surveillance": z.number().int().optional(),
+    "threshingtime": z.number().int().optional(),
+    "Thysanocarpus": z.number().int().optional(),
+    "unsignificantly": z.number().int().optional(),
+    "unsnap": z.number().int().optional(),
+    "vendible": z.number().int().optional(),
+});
+
+export const MaslinSchema = z.object({
+    "Alicant": z.number().int().optional(),
+    "antiatonement": z.null().optional(),
+    "anticorrosive": z.number().int().optional(),
+    "aphidozer": z.null().optional(),
+    "Bakuninist": z.null().optional(),
+    "be": z.number().int().optional(),
+    "catharticalness": z.number().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "chub": z.number().int().optional(),
+    "cuprosilicon": z.number().int().optional(),
+    "curtailedly": z.number().int().optional(),
+    "dellenite": z.number().int().optional(),
+    "Dimitry": z.number().int().optional(),
+    "disdiapason": z.string().optional(),
+    "edifying": z.null().optional(),
+    "ethmoiditis": z.number().int().optional(),
+    "gastralgy": z.null().optional(),
+    "goatherd": z.number().int().optional(),
+    "hammerdress": z.number().int().optional(),
+    "hangfire": z.null().optional(),
+    "homocerc": z.boolean().optional(),
+    "lacunosity": z.number().int().optional(),
+    "longiloquence": z.null().optional(),
+    "mameliere": z.number().int().optional(),
+    "motherless": z.null().optional(),
+    "nonbookish": z.null().optional(),
+    "noncorrodible": z.null().optional(),
+    "nonsensicality": z.null().optional(),
+    "oafishly": z.number().int().optional(),
+    "pfund": z.null().optional(),
+    "preadvisory": z.null().optional(),
+    "retroflexed": z.null().optional(),
+    "saccharulmic": z.number().int().optional(),
+    "scowlful": z.number().int().optional(),
+    "secluded": z.null().optional(),
+    "slackage": z.null().optional(),
+    "sphaeridial": z.number().int().optional(),
+    "spondulics": z.null().optional(),
+    "subsecive": z.number().int().optional(),
+    "swellmobsman": z.null().optional(),
+    "trachyglossate": z.number().int().optional(),
+    "trialogue": z.null().optional(),
+    "unassuaged": z.number().int().optional(),
+    "ungross": z.null().optional(),
+    "unjudiciously": z.null().optional(),
+});
+
+export const MonaziteClassSchema = z.object({
+    "catharticalness": z.number(),
+    "Chirotherium": z.number().int(),
+    "disdiapason": z.string(),
+    "homocerc": z.boolean(),
+    "nonbookish": z.null(),
+});
+
+export const MonotheisticallyClassSchema = z.object({
+    "blaspheme": z.null().optional(),
+    "catharticalness": z.number().optional(),
+    "celiosalpingectomy": z.null().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "consummativeness": z.null().optional(),
+    "disdiapason": z.string().optional(),
+    "egestive": z.null().optional(),
+    "enchylema": z.null().optional(),
+    "gasconade": z.null().optional(),
+    "holidayer": z.null().optional(),
+    "homocerc": z.boolean().optional(),
+    "intuitionalism": z.null().optional(),
+    "lophiostomate": z.null().optional(),
+    "nonbookish": z.null().optional(),
+    "nonvolition": z.null().optional(),
+    "palatableness": z.null().optional(),
+    "pimpery": z.null().optional(),
+    "previolation": z.null().optional(),
+    "reconveyance": z.null().optional(),
+    "registership": z.null().optional(),
+    "rhyacolite": z.null().optional(),
+    "smithereens": z.null().optional(),
+    "superedification": z.null().optional(),
+    "trust": z.null().optional(),
+    "whitestone": z.null().optional(),
+});
+
+export const NoncontributingSchema = z.object({
+    "estevin": z.string(),
+    "jolterhead": z.number(),
+    "sauternes": z.number().int(),
+    "sparsely": z.boolean(),
+    "unrequested": z.null(),
+});
+
+export const OccupationalistClassSchema = z.object({
+    "beholdable": z.null(),
+    "brotuliform": z.null(),
+    "Chimakum": z.null(),
+    "doodler": z.null(),
+    "emulsin": z.null(),
+    "Fin": z.null(),
+    "flourishing": z.null(),
+    "flueless": z.null(),
+    "furtively": z.null(),
+    "gritter": z.null(),
+    "interwish": z.null(),
+    "monoxylic": z.null(),
+    "myristic": z.null(),
+    "nightwear": z.null(),
+    "peruser": z.null(),
+    "theoastrological": z.null(),
+    "thumby": z.null(),
+    "tingitid": z.null(),
+    "trailless": z.null(),
+    "unpocketed": z.null(),
+});
+
+export const OutrivalClassSchema = z.object({
+    "adroitly": z.null(),
+    "bridehood": z.null(),
+    "Castoroides": z.null(),
+    "Czechoslovak": z.null(),
+    "diagenesis": z.null(),
+    "dihexahedron": z.null(),
+    "dopester": z.null(),
+    "eumerism": z.null(),
+    "flyness": z.null(),
+    "fouler": z.null(),
+    "laudanosine": z.null(),
+    "Lingulidae": z.null(),
+    "minutary": z.null(),
+    "mitra": z.null(),
+    "opisthorchiasis": z.null(),
+    "pensively": z.null(),
+    "pubigerous": z.null(),
+    "rebellious": z.null(),
+    "recodify": z.null(),
+    "unpaced": z.null(),
+});
+
+export const PiaculumClassSchema = z.object({
+    "alada": z.number().int().optional(),
+    "amphistomous": z.number().int().optional(),
+    "boysenberry": z.number().int().optional(),
+    "catharticalness": z.number().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "decardinalize": z.number().int().optional(),
+    "discouragement": z.number().int().optional(),
+    "disdiapason": z.string().optional(),
+    "doitrified": z.number().int().optional(),
+    "hexaspermous": z.number().int().optional(),
+    "homocerc": z.boolean().optional(),
+    "insinking": z.number().int().optional(),
+    "loathfulness": z.number().int().optional(),
+    "miasmatical": z.number().int().optional(),
+    "neurofibril": z.number().int().optional(),
+    "nonbookish": z.null().optional(),
+    "phonendoscope": z.number().int().optional(),
+    "pilferment": z.number().int().optional(),
+    "predismissory": z.number().int().optional(),
+    "preinscription": z.number().int().optional(),
+    "quotative": z.number().int().optional(),
+    "sienna": z.number().int().optional(),
+    "thorax": z.number().int().optional(),
+    "yachting": z.number().int().optional(),
+    "Zipper": z.number().int().optional(),
+});
+
+export const PneumoceleSchema = z.object({
+    "Carbonarism": z.null().optional(),
+    "catharticalness": z.number().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "cineolic": z.null().optional(),
+    "cobbly": z.null().optional(),
+    "conchyliferous": z.null().optional(),
+    "congregation": z.null().optional(),
+    "disdiapason": z.string().optional(),
+    "enterotomy": z.null().optional(),
+    "entophytal": z.null().optional(),
+    "fewtrils": z.null().optional(),
+    "herem": z.null().optional(),
+    "homocerc": z.boolean().optional(),
+    "Koniga": z.null().optional(),
+    "meticulosity": z.null().optional(),
+    "Micky": z.null().optional(),
+    "mismarriage": z.null().optional(),
+    "neurotrophic": z.null().optional(),
+    "nonbookish": z.null().optional(),
+    "persuasively": z.null().optional(),
+    "replaceable": z.null().optional(),
+    "silex": z.null().optional(),
+    "taillight": z.null().optional(),
+    "unjealous": z.null().optional(),
+    "visitorial": z.null().optional(),
+});
+
+export const PotwhiskyClassSchema = z.object({
+    "arciform": z.null(),
+    "cresolin": z.null(),
+    "disheartener": z.null(),
+    "disproportionable": z.null(),
+    "Euchorda": z.null(),
+    "ferryway": z.null(),
+    "filamentiferous": z.null(),
+    "flemish": z.null(),
+    "forgainst": z.null(),
+    "grainering": z.null(),
+    "irrevoluble": z.null(),
+    "kindredship": z.null(),
+    "pinguitudinous": z.null(),
+    "simpletonic": z.null(),
+    "singsong": z.null(),
+    "submergement": z.null(),
+    "supraoesophagal": z.null(),
+    "thrashel": z.null(),
+    "tyremesis": z.null(),
+    "Yoruba": z.null(),
+});
+
+export const PrefreshmanClassSchema = z.object({
+    "azorubine": z.null(),
+    "choroiditis": z.null(),
+    "coagulatory": z.null(),
+    "cyclorama": z.null(),
+    "Dolphus": z.null(),
+    "duckhearted": z.null(),
+    "Ficus": z.null(),
+    "Gemaric": z.null(),
+    "jugation": z.null(),
+    "myoliposis": z.null(),
+    "nonnomination": z.null(),
+    "palay": z.null(),
+    "pentactinal": z.null(),
+    "Phaet": z.null(),
+    "piquant": z.null(),
+    "registration": z.null(),
+    "remancipation": z.null(),
+    "scutatiform": z.null(),
+    "theodolite": z.null(),
+    "underward": z.null(),
+});
+
+export const TopLevelSchema = z.object({
+    "juror": z.array(z.union([z.boolean(), JurorClassSchema])),
+    "kongoni": z.array(z.union([z.array(z.number().int()), z.record(z.string(), z.number().int())])),
+    "ladronism": z.array(z.union([LadronismClassSchema, z.number(), z.string()])),
+    "landlubberly": z.array(z.union([z.boolean(), LandlubberlyClassSchema, z.number().int()])),
+    "listener": z.array(z.union([z.array(z.null()), z.number().int()])),
+    "lupus": z.array(z.union([LupusClassSchema, z.number().int()])),
+    "maslin": z.array(MaslinSchema),
+    "monazite": z.array(z.union([MonaziteClassSchema, z.number()])),
+    "monoliteral": z.array(z.union([z.array(z.null()), z.boolean()])),
+    "monotheistically": z.array(z.union([z.array(z.null()), MonotheisticallyClassSchema])),
+    "montage": z.array(z.union([z.array(z.null()), z.number(), z.string()])),
+    "moralness": z.array(z.union([z.null(), z.array(z.null()), z.number()])),
+    "mowra": z.array(z.union([z.null(), MonaziteClassSchema])),
+    "mulishly": z.array(z.union([z.null(), z.array(z.number().int()), z.number()])),
+    "myoscope": z.array(z.union([z.array(z.null()), z.boolean(), z.number().int()])),
+    "nach": z.array(z.union([z.null(), z.array(z.union([z.null(), z.number().int()]))])),
+    "neuromastic": z.array(z.union([z.array(z.null()), z.number()])),
+    "noncontributing": z.array(NoncontributingSchema),
+    "nonnervous": z.array(z.union([z.boolean(), z.number().int()])),
+    "nonvaluation": z.array(z.union([z.array(z.null()), z.boolean(), z.number()])),
+    "occupationalist": z.array(z.union([z.null(), z.array(z.null()), OccupationalistClassSchema])),
+    "outrival": z.array(z.union([z.null(), OutrivalClassSchema, z.number()])),
+    "paleographically": z.array(z.union([z.number(), z.record(z.string(), z.union([z.null(), z.number().int()]))])),
+    "pamphletwise": z.array(z.union([z.number().int(), z.record(z.string(), z.number().int()), z.string()])),
+    "pediatrics": z.array(z.union([z.null(), z.boolean(), z.number()])),
+    "perceptive": z.array(z.boolean()),
+    "piaculum": z.array(z.union([PiaculumClassSchema, z.number()])),
+    "piccadilly": z.array(z.union([z.null(), z.number(), z.string()])),
+    "piffler": z.array(z.union([z.array(z.null()), MonaziteClassSchema])),
+    "pithful": z.array(z.union([z.null(), z.boolean(), z.number().int()])),
+    "placuntitis": z.array(z.union([z.number().int(), z.record(z.string(), z.number().int())])),
+    "plectopterous": z.array(z.union([z.number(), z.record(z.string(), z.number().int())])),
+    "pneumocele": z.array(z.union([z.null(), PneumoceleSchema])),
+    "poliorcetic": z.array(z.union([z.boolean(), MonaziteClassSchema])),
+    "poormaster": z.array(z.union([z.null(), z.array(z.number().int()), z.record(z.string(), z.number().int())])),
+    "potwhisky": z.array(z.union([z.null(), PotwhiskyClassSchema, z.number().int()])),
+    "practicalizer": z.array(z.union([z.array(z.null()), MonaziteClassSchema, z.string()])),
+    "prefreshman": z.array(z.union([z.array(z.null()), PrefreshmanClassSchema, z.string()])),
+    "prehensility": z.array(z.union([z.array(z.null()), z.boolean(), MonaziteClassSchema])),
+    "prevoidance": z.array(z.union([z.array(z.number().int()), MonaziteClassSchema, z.number().int()])),
+    "probant": z.array(z.record(z.string(), z.union([z.null(), z.number().int()]))),
+    "protext": z.array(z.union([z.array(z.number().int()), z.boolean(), MonaziteClassSchema])),
+});
diff --git a/head/typescript-zod/test/inputs/json/priority/combinations4.json/just-schema-true--8c4ca457bcba/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/combinations4.json/just-schema-true--8c4ca457bcba/TopLevel.ts
new file mode 100644
index 0000000..0c08975
--- /dev/null
+++ b/head/typescript-zod/test/inputs/json/priority/combinations4.json/just-schema-true--8c4ca457bcba/TopLevel.ts
@@ -0,0 +1,440 @@
+import * as z from "zod";
+
+
+export const PulpitismClassSchema = z.object({
+    "abnet": z.null(),
+    "buckhorn": z.null(),
+    "calciform": z.null(),
+    "chelophore": z.null(),
+    "cogitation": z.null(),
+    "decreeable": z.null(),
+    "despicable": z.null(),
+    "isodiazo": z.null(),
+    "jadedly": z.null(),
+    "leptochlorite": z.null(),
+    "nursling": z.null(),
+    "palamedean": z.null(),
+    "photoheliograph": z.null(),
+    "pipewood": z.null(),
+    "roberd": z.null(),
+    "statable": z.null(),
+    "superassume": z.null(),
+    "syllabe": z.null(),
+    "toughhead": z.null(),
+    "underburn": z.null(),
+});
+
+export const PyodermiaClassSchema = z.object({
+    "aphoristically": z.null(),
+    "apophyllous": z.null(),
+    "cognize": z.null(),
+    "dermonosology": z.null(),
+    "Gyppo": z.null(),
+    "ither": z.null(),
+    "juglandaceous": z.null(),
+    "litho": z.null(),
+    "macropterous": z.null(),
+    "photographer": z.null(),
+    "romancing": z.null(),
+    "rumness": z.null(),
+    "somniloquist": z.null(),
+    "stressfully": z.null(),
+    "tactically": z.null(),
+    "tracheophony": z.null(),
+    "unappositely": z.null(),
+    "unclothedly": z.null(),
+    "unimplied": z.null(),
+    "unsyncopated": z.null(),
+});
+
+export const QuebrachineClassSchema = z.object({
+    "catharticalness": z.number(),
+    "Chirotherium": z.number().int(),
+    "disdiapason": z.string(),
+    "homocerc": z.boolean(),
+    "nonbookish": z.null(),
+});
+
+export const ReimagineSchema = z.object({
+    "adducible": z.null().optional(),
+    "anabolin": z.null().optional(),
+    "brainy": z.null().optional(),
+    "catharticalness": z.number().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "chrysamine": z.null().optional(),
+    "disdiapason": z.string().optional(),
+    "fluxweed": z.null().optional(),
+    "glaucine": z.null().optional(),
+    "grobianism": z.null().optional(),
+    "Hermo": z.null().optional(),
+    "hieroglyphist": z.null().optional(),
+    "homocerc": z.boolean().optional(),
+    "icteroid": z.null().optional(),
+    "immortal": z.null().optional(),
+    "impetulant": z.null().optional(),
+    "irrigate": z.null().optional(),
+    "myxedema": z.null().optional(),
+    "nonbookish": z.null().optional(),
+    "onyx": z.null().optional(),
+    "repasser": z.null().optional(),
+    "septomarginal": z.null().optional(),
+    "subdie": z.null().optional(),
+    "tibiometatarsal": z.null().optional(),
+    "waltzlike": z.null().optional(),
+});
+
+export const RessautSchema = z.object({
+    "apperceptive": z.string(),
+    "cuttoo": z.string(),
+    "douser": z.string(),
+    "drinkproof": z.string(),
+    "forementioned": z.string(),
+    "Freesia": z.string(),
+    "Genevieve": z.string(),
+    "hyperdiabolical": z.string(),
+    "hypocone": z.string(),
+    "irreverentially": z.string(),
+    "jumart": z.string(),
+    "Mimosaceae": z.string(),
+    "mollicrush": z.string(),
+    "nedder": z.string(),
+    "retinasphalt": z.string(),
+    "sough": z.string(),
+    "steading": z.string(),
+    "Theopaschitism": z.string(),
+    "undurableness": z.string(),
+    "unmingleable": z.string(),
+});
+
+export const RewriteClassSchema = z.object({
+    "accountancy": z.null(),
+    "cacotrophic": z.null(),
+    "contest": z.null(),
+    "couthily": z.null(),
+    "falculate": z.null(),
+    "foreseize": z.null(),
+    "Hyades": z.null(),
+    "lemnad": z.null(),
+    "monotheistically": z.null(),
+    "nonflying": z.null(),
+    "Ptenoglossa": z.null(),
+    "repatch": z.null(),
+    "rodman": z.null(),
+    "strung": z.null(),
+    "titmal": z.null(),
+    "twalpennyworth": z.null(),
+    "unblamable": z.null(),
+    "vertical": z.null(),
+    "Whiggification": z.null(),
+    "yardman": z.null(),
+});
+
+export const SantirClassSchema = z.object({
+    "admiredly": z.null(),
+    "demicaponier": z.null(),
+    "epitympanic": z.null(),
+    "investitor": z.null(),
+    "lupiform": z.null(),
+    "monoflagellate": z.null(),
+    "paleoethnic": z.null(),
+    "prediscountable": z.null(),
+    "rhetoricals": z.null(),
+    "roomth": z.null(),
+    "saccharose": z.null(),
+    "septonasal": z.null(),
+    "serpenticide": z.null(),
+    "setarious": z.null(),
+    "spaework": z.null(),
+    "stylite": z.null(),
+    "Suessiones": z.null(),
+    "timelily": z.null(),
+    "unprofaned": z.null(),
+    "vorticular": z.null(),
+});
+
+export const SaxtenClassSchema = z.object({
+    "algarrobilla": z.null().optional(),
+    "bowgrace": z.null().optional(),
+    "catharticalness": z.number().optional(),
+    "Centaurid": z.null().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "disdiapason": z.string().optional(),
+    "flix": z.null().optional(),
+    "germanely": z.null().optional(),
+    "homocerc": z.boolean().optional(),
+    "inhume": z.null().optional(),
+    "lepidote": z.null().optional(),
+    "megalochirous": z.null().optional(),
+    "ninepenny": z.null().optional(),
+    "nonbookish": z.null().optional(),
+    "nondeist": z.null().optional(),
+    "nymphaeaceous": z.null().optional(),
+    "parietofrontal": z.null().optional(),
+    "sancyite": z.null().optional(),
+    "subjectivist": z.null().optional(),
+    "tibiad": z.null().optional(),
+    "transonic": z.null().optional(),
+    "tripetalous": z.null().optional(),
+    "trunchman": z.null().optional(),
+    "urger": z.null().optional(),
+    "withdrawnness": z.null().optional(),
+});
+
+export const ScattySchema = z.object({
+    "aeriferous": z.null(),
+    "antical": z.null(),
+    "antighostism": z.null(),
+    "arcanum": z.null(),
+    "autotrophy": z.null(),
+    "baronial": z.null(),
+    "caffeine": z.null(),
+    "gorgoniacean": z.null(),
+    "heroical": z.null(),
+    "hydropical": z.null(),
+    "mechanology": z.null(),
+    "musicopoetic": z.null(),
+    "officiality": z.null(),
+    "oftentimes": z.null(),
+    "ophthalmotonometer": z.null(),
+    "reflectively": z.null(),
+    "springer": z.null(),
+    "Tabasco": z.null(),
+    "teleianthous": z.null(),
+    "uncombated": z.null(),
+});
+
+export const SisteringClassSchema = z.object({
+    "amphicarpic": z.null(),
+    "Chianti": z.null(),
+    "frigorific": z.null(),
+    "Haplomi": z.null(),
+    "hyperkinesis": z.null(),
+    "laudable": z.null(),
+    "madwoman": z.null(),
+    "maimedly": z.null(),
+    "Micropterygidae": z.null(),
+    "microrhabdus": z.null(),
+    "nondense": z.null(),
+    "phlebemphraxis": z.null(),
+    "redsear": z.null(),
+    "schismatical": z.null(),
+    "tartryl": z.null(),
+    "unabhorred": z.null(),
+    "undeliberateness": z.null(),
+    "unmixable": z.null(),
+    "untruckling": z.null(),
+    "vineal": z.null(),
+});
+
+export const StaghuntingSchema = z.object({
+    "calorimetric": z.number().int().optional(),
+    "canid": z.number().int().optional(),
+    "catharticalness": z.number().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "disdiapason": z.string().optional(),
+    "ditriglyphic": z.number().int().optional(),
+    "floriferousness": z.number().int().optional(),
+    "gamelike": z.number().int().optional(),
+    "grig": z.number().int().optional(),
+    "homocerc": z.boolean().optional(),
+    "interloan": z.number().int().optional(),
+    "lithotomy": z.number().int().optional(),
+    "loric": z.number().int().optional(),
+    "membranocoriaceous": z.number().int().optional(),
+    "membranogenic": z.number().int().optional(),
+    "nonbookish": z.null().optional(),
+    "overtrump": z.number().int().optional(),
+    "scotino": z.number().int().optional(),
+    "seasonable": z.number().int().optional(),
+    "sephen": z.number().int().optional(),
+    "stigmarioid": z.number().int().optional(),
+    "tired": z.number().int().optional(),
+    "trifid": z.number().int().optional(),
+    "undefeatedly": z.number().int().optional(),
+    "ungirlish": z.number().int().optional(),
+});
+
+export const StrenuosityClassSchema = z.object({
+    "bliss": z.number().int().optional(),
+    "buccate": z.number().int().optional(),
+    "bulletproof": z.number().int().optional(),
+    "catharticalness": z.number().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "crumblingness": z.number().int().optional(),
+    "disdiapason": z.string().optional(),
+    "engagedly": z.number().int().optional(),
+    "fightable": z.number().int().optional(),
+    "hoariness": z.number().int().optional(),
+    "homocerc": z.boolean().optional(),
+    "hypopodium": z.number().int().optional(),
+    "luxurist": z.number().int().optional(),
+    "mechanician": z.number().int().optional(),
+    "nonbookish": z.null().optional(),
+    "Onopordon": z.number().int().optional(),
+    "podgily": z.number().int().optional(),
+    "reformableness": z.number().int().optional(),
+    "scatterbrains": z.number().int().optional(),
+    "seminuria": z.number().int().optional(),
+    "Sodomite": z.number().int().optional(),
+    "tramp": z.number().int().optional(),
+    "undueness": z.number().int().optional(),
+    "worthily": z.number().int().optional(),
+    "Yankeeist": z.number().int().optional(),
+});
+
+export const TruantcyClassSchema = z.object({
+    "alfiona": z.null().optional(),
+    "ascaridiasis": z.null().optional(),
+    "bungey": z.null().optional(),
+    "catharticalness": z.number().optional(),
+    "ceroxyle": z.null().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "chorology": z.null().optional(),
+    "disdiapason": z.string().optional(),
+    "enmarble": z.null().optional(),
+    "Epeira": z.null().optional(),
+    "Eurylaimi": z.null().optional(),
+    "germination": z.null().optional(),
+    "hallelujah": z.null().optional(),
+    "homocerc": z.boolean().optional(),
+    "lev": z.null().optional(),
+    "mouthing": z.null().optional(),
+    "nonbookish": z.null().optional(),
+    "philliloo": z.null().optional(),
+    "planetal": z.null().optional(),
+    "poney": z.null().optional(),
+    "punctualist": z.null().optional(),
+    "returnlessly": z.null().optional(),
+    "skelder": z.null().optional(),
+    "windwaywardly": z.null().optional(),
+    "Yuman": z.null().optional(),
+});
+
+export const UnimpeachablyClassSchema = z.object({
+    "acerin": z.number().int().optional(),
+    "Bobadil": z.number().int().optional(),
+    "catharticalness": z.number().optional(),
+    "Chirotherium": z.number().int().optional(),
+    "chlorophylligenous": z.number().int().optional(),
+    "conversational": z.number().int().optional(),
+    "demiowl": z.number().int().optional(),
+    "disdiapason": z.string().optional(),
+    "ectorhinal": z.number().int().optional(),
+    "gamblesomeness": z.number().int().optional(),
+    "homocerc": z.boolean().optional(),
+    "irrorate": z.number().int().optional(),
+    "kindergartening": z.number().int().optional(),
+    "lateritic": z.number().int().optional(),
+    "mespil": z.number().int().optional(),
+    "misconfiguration": z.number().int().optional(),
+    "nonbookish": z.null().optional(),
+    "planometry": z.number().int().optional(),
+    "Quiina": z.number().int().optional(),
+    "Robert": z.number().int().optional(),
+    "rot": z.number().int().optional(),
+    "subcinctorium": z.number().int().optional(),
+    "tussocker": z.number().int().optional(),
+    "ultraproud": z.number().int().optional(),
+    "unsuggestedness": z.number().int().optional(),
+});
+
+export const UnstressedClassSchema = z.object({
+    "Alain": z.null(),
+    "Amphirhina": z.null(),
+    "antimachinery": z.null(),
+    "coldish": z.null(),
+    "crantara": z.null(),
+    "distinguishing": z.null(),
+    "elytroposis": z.null(),
+    "gentianwort": z.null(),
+    "heliosis": z.null(),
+    "instrumental": z.null(),
+    "introinflection": z.null(),
+    "kala": z.null(),
+    "Lincolnian": z.null(),
+    "metad": z.null(),
+    "Sarcophilus": z.null(),
+    "swingingly": z.null(),
+    "unconformity": z.null(),
+    "undecreed": z.null(),
+    "venerable": z.null(),
+    "vowellessness": z.null(),
+});
+
+export const WrothyClassSchema = z.object({
+    "Aeschynanthus": z.null(),
+    "aquiferous": z.null(),
+    "cheapener": z.null(),
+    "enumeration": z.null(),
+    "Ephesine": z.null(),
+    "escadrille": z.null(),
+    "estrous": z.null(),
+    "interestedly": z.null(),
+    "katakinetomer": z.null(),
+    "mortification": z.null(),
+    "morula": z.null(),
+    "orthosymmetrical": z.null(),
+    "overbark": z.null(),
+    "politist": z.null(),
+    "qualified": z.null(),
+    "sphenomalar": z.null(),
+    "throatful": z.null(),
+    "transhumance": z.null(),
+    "triandrian": z.null(),
+    "unbooked": z.null(),
+});
+
+export const TopLevelSchema = z.object({
+    "protrusive": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), z.number()])),
+    "pulpitism": z.array(z.union([z.array(z.number().int()), PulpitismClassSchema, z.number()])),
+    "pyodermia": z.array(z.union([PyodermiaClassSchema, z.number().int()])),
+    "quebrachine": z.array(z.union([z.null(), z.boolean(), QuebrachineClassSchema])),
+    "querier": z.array(z.union([z.boolean(), z.record(z.string(), z.number().int())])),
+    "rebarbative": z.array(z.union([z.array(z.number().int()), z.boolean(), z.number()])),
+    "reimagine": z.array(ReimagineSchema),
+    "ressaut": RessautSchema,
+    "retrocervical": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), z.number().int()])),
+    "revert": z.array(z.union([z.boolean(), z.string()])),
+    "rewrite": z.array(z.union([z.array(z.null()), RewriteClassSchema, z.number()])),
+    "saccoderm": z.array(z.union([z.null(), z.array(z.number().int()), z.string()])),
+    "santir": z.array(z.union([SantirClassSchema, z.number()])),
+    "saprophilous": z.array(z.union([z.null(), z.record(z.string(), z.number().int()), z.string()])),
+    "saxten": z.array(z.union([SaxtenClassSchema, z.string()])),
+    "scatty": z.array(z.union([z.null(), ScattySchema])),
+    "scoffer": z.array(z.union([z.null(), z.array(z.null()), z.record(z.string(), z.number().int())])),
+    "scrampum": z.array(z.union([z.null(), z.array(z.number().int()), z.boolean()])),
+    "semantic": z.number(),
+    "serpentinic": z.array(z.union([z.array(z.number().int()), z.number()])),
+    "shadowable": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), z.boolean()])),
+    "sistering": z.array(z.union([z.array(z.null()), SisteringClassSchema, z.number().int()])),
+    "staghunting": z.array(StaghuntingSchema),
+    "stagmometer": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), z.string()])),
+    "stimulability": z.array(z.union([z.boolean(), z.number().int(), z.record(z.string(), z.number().int())])),
+    "strangleable": z.array(z.union([z.array(z.null()), z.number()])),
+    "strenuosity": z.array(z.union([z.array(z.null()), StrenuosityClassSchema])),
+    "tabaxir": z.array(z.union([z.boolean(), z.number()])),
+    "talpiform": z.array(z.union([z.null(), QuebrachineClassSchema, z.number()])),
+    "thwack": z.array(z.union([z.boolean(), QuebrachineClassSchema, z.number()])),
+    "to": z.array(z.union([z.null(), z.number()])),
+    "tortricine": z.array(z.union([z.array(z.union([z.null(), z.number().int()])), QuebrachineClassSchema])),
+    "truantcy": z.array(z.union([z.boolean(), TruantcyClassSchema])),
+    "turgesce": z.array(z.string()),
+    "unbeginning": z.array(z.union([z.array(z.null()), z.record(z.string(), z.number().int()), z.string()])),
+    "underdunged": z.array(z.number()),
+    "undesirability": z.array(z.union([z.array(z.number().int()), z.record(z.string(), z.number().int()), z.string()])),
+    "unerasing": z.array(z.union([z.array(z.null()), z.number().int(), z.record(z.string(), z.number().int())])),
+    "unguentarium": z.array(z.union([z.null(), z.array(z.null()), z.number().int()])),
+    "unimpeachably": z.array(z.union([z.boolean(), UnimpeachablyClassSchema])),
+    "unmortgaged": z.array(z.union([z.null(), z.number(), z.record(z.string(), z.number().int())])),
+    "unobstructed": z.array(z.union([z.null(), QuebrachineClassSchema, z.number().int()])),
+    "unreceptivity": z.array(z.union([z.array(z.null()), z.number().int(), z.string()])),
+    "unsatisfactoriness": z.array(z.union([z.array(z.number().int()), z.boolean(), z.number().int()])),
+    "unsecurity": z.array(z.number().int()),
+    "unstressed": z.array(z.union([z.boolean(), UnstressedClassSchema, z.string()])),
+    "untasked": z.array(z.union([z.array(z.null()), z.number(), z.record(z.string(), z.number().int())])),
+    "unvarying": z.array(z.union([z.boolean(), z.number(), z.record(z.string(), z.number().int())])),
+    "vehemently": z.array(z.union([z.null(), z.array(z.null()), z.boolean()])),
+    "warriorship": z.record(z.string(), z.boolean()),
+    "whitepot": z.array(z.union([QuebrachineClassSchema, z.number()])),
+    "wrothy": z.array(z.union([z.array(z.null()), WrothyClassSchema])),
+});
diff --git a/base/typescript-zod/test/inputs/json/priority/keywords.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/priority/keywords.json/default/TopLevel.ts
index 2950ede..dd2c523 100644
--- a/base/typescript-zod/test/inputs/json/priority/keywords.json/default/TopLevel.ts
+++ b/head/typescript-zod/test/inputs/json/priority/keywords.json/default/TopLevel.ts
@@ -1076,6 +1076,11 @@ export const RightSchema = z.object({
 });
 export type Right = z.infer<typeof RightSchema>;
 
+export const SSchema = z.object({
+    "s": z.number().int(),
+});
+export type S = z.infer<typeof SSchema>;
+
 export const SbyteSchema = z.object({
     "sbyte": z.number().int(),
 });
@@ -1628,6 +1633,7 @@ export const Obj4Schema = z.object({
     "rethrows": RethrowsSchema,
     "return": ReturnSchema,
     "right": RightSchema,
+    "s": SSchema,
     "sbyte": SbyteSchema,
     "sealed": SealedSchema,
     "SEL": SelSchema,
diff --git a/head/typescript-zod/test/inputs/json/samples/copy-with-property.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/samples/copy-with-property.json/default/TopLevel.ts
new file mode 100644
index 0000000..dd8d8bd
--- /dev/null
+++ b/head/typescript-zod/test/inputs/json/samples/copy-with-property.json/default/TopLevel.ts
@@ -0,0 +1,8 @@
+import * as z from "zod";
+
+
+export const TopLevelSchema = z.object({
+    "copyWith": z.number().int(),
+    "name": z.string(),
+});
+export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/head/typescript-zod/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.ts b/head/typescript-zod/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.ts
new file mode 100644
index 0000000..ce1712c
--- /dev/null
+++ b/head/typescript-zod/test/inputs/json/samples/objc-control-characters.json/default/TopLevel.ts
@@ -0,0 +1,14 @@
+import * as z from "zod";
+
+
+export const ValueSchema = z.enum([
+    "c0\u0001\u001b\u001f",
+    "c1\u007f\u0080\u0085\u009f",
+]);
+export type Value = z.infer<typeof ValueSchema>;
+
+export const TopLevelSchema = z.object({
+    "literal": z.string(),
+    "values": z.array(ValueSchema),
+});
+export type TopLevel = z.infer<typeof TopLevelSchema>;
