diff --git a/base/kotlin-jackson/test/inputs/json/misc/29f47.json/default/TopLevel.kt b/head/kotlin-jackson/test/inputs/json/misc/29f47.json/default/TopLevel.kt
index a1a2465..e113e5e 100644
--- a/base/kotlin-jackson/test/inputs/json/misc/29f47.json/default/TopLevel.kt
+++ b/head/kotlin-jackson/test/inputs/json/misc/29f47.json/default/TopLevel.kt
@@ -299,9 +299,9 @@ sealed class Edited {
 
     companion object {
         fun fromJson(jn: JsonNode): Edited = when (jn) {
-            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
-            is DoubleNode  -> DoubleValue(mapper.treeToValue(jn))
-            else           -> throw IllegalArgumentException()
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
diff --git a/base/kotlin-jackson/test/inputs/json/misc/a0496.json/default/TopLevel.kt b/head/kotlin-jackson/test/inputs/json/misc/a0496.json/default/TopLevel.kt
index d14c162..e22cee3 100644
--- a/base/kotlin-jackson/test/inputs/json/misc/a0496.json/default/TopLevel.kt
+++ b/head/kotlin-jackson/test/inputs/json/misc/a0496.json/default/TopLevel.kt
@@ -107,10 +107,10 @@ sealed class Datum {
 
     companion object {
         fun fromJson(jn: JsonNode): Datum = when (jn) {
-            is TextNode   -> DateValue(mapper.treeToValue(jn))
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            null          -> NullValue()
-            else          -> throw IllegalArgumentException()
+            is TextNode                            -> DateValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            null                                   -> NullValue()
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
diff --git a/base/kotlin-jackson/test/inputs/json/priority/combinations1.json/default/TopLevel.kt b/head/kotlin-jackson/test/inputs/json/priority/combinations1.json/default/TopLevel.kt
index aa0bbdc..a8dc548 100644
--- a/base/kotlin-jackson/test/inputs/json/priority/combinations1.json/default/TopLevel.kt
+++ b/head/kotlin-jackson/test/inputs/json/priority/combinations1.json/default/TopLevel.kt
@@ -346,9 +346,9 @@ sealed class Clinodome {
 
     companion object {
         fun fromJson(jn: JsonNode): Clinodome = when (jn) {
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            is TextNode   -> StringValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -364,9 +364,9 @@ sealed class CoadjustElement {
 
     companion object {
         fun fromJson(jn: JsonNode): CoadjustElement = when (jn) {
-            is ObjectNode -> CoadjustClassValue(mapper.treeToValue(jn))
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is ObjectNode                          -> CoadjustClassValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -425,9 +425,9 @@ sealed class Consilience {
 
     companion object {
         fun fromJson(jn: JsonNode): Consilience = when (jn) {
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            is ObjectNode -> IntegerMapValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> IntegerMapValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -674,10 +674,10 @@ sealed class Eleutheromania {
 
     companion object {
         fun fromJson(jn: JsonNode): Eleutheromania = when (jn) {
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            is ObjectNode -> IntegerMapValue(mapper.treeToValue(jn))
-            is TextNode   -> StringValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> IntegerMapValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -744,9 +744,9 @@ sealed class Epipaleolithic {
 
     companion object {
         fun fromJson(jn: JsonNode): Epipaleolithic = when (jn) {
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            is ArrayNode  -> IntegerArrayValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> IntegerArrayValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -764,10 +764,10 @@ sealed class Expropriable {
 
     companion object {
         fun fromJson(jn: JsonNode): Expropriable = when (jn) {
-            is ObjectNode -> CimeliaClassValue(mapper.treeToValue(jn))
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            is ArrayNode  -> NullArrayValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is ObjectNode                          -> CimeliaClassValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> NullArrayValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -783,9 +783,9 @@ sealed class FagginglyElement {
 
     companion object {
         fun fromJson(jn: JsonNode): FagginglyElement = when (jn) {
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            is ObjectNode -> FagginglyClassValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> FagginglyClassValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -888,10 +888,10 @@ sealed class FlagmakingElement {
 
     companion object {
         fun fromJson(jn: JsonNode): FlagmakingElement = when (jn) {
-            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
-            is DoubleNode  -> DoubleValue(mapper.treeToValue(jn))
-            is ObjectNode  -> FlagmakingClassValue(mapper.treeToValue(jn))
-            else           -> throw IllegalArgumentException()
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> FlagmakingClassValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -1196,10 +1196,10 @@ sealed class Intentiveness {
 
     companion object {
         fun fromJson(jn: JsonNode): Intentiveness = when (jn) {
-            is ObjectNode -> CimeliaClassValue(mapper.treeToValue(jn))
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            is TextNode   -> StringValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is ObjectNode                          -> CimeliaClassValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
diff --git a/head/kotlin-jackson/test/inputs/json/priority/combinations2.json/default/TopLevel.kt b/head/kotlin-jackson/test/inputs/json/priority/combinations2.json/default/TopLevel.kt
new file mode 100644
index 0000000..847d774
--- /dev/null
+++ b/head/kotlin-jackson/test/inputs/json/priority/combinations2.json/default/TopLevel.kt
@@ -0,0 +1,1202 @@
+// 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.*
+
+
+@Suppress("UNCHECKED_CAST")
+private fun <T> ObjectMapper.convert(k: kotlin.reflect.KClass<*>, fromJson: (JsonNode) -> T, toJson: (T) -> String, isUnion: Boolean = false) = registerModule(SimpleModule().apply {
+    addSerializer(k.java as Class<T>, object : StdSerializer<T>(k.java as Class<T>) {
+            override fun serialize(value: T, gen: JsonGenerator, provider: SerializerProvider) = gen.writeRawValue(toJson(value))
+    })
+    addDeserializer(k.java as Class<T>, object : StdDeserializer<T>(k.java as Class<T>) {
+            override fun deserialize(p: JsonParser, ctxt: DeserializationContext) = fromJson(p.readValueAsTree())
+    })
+})
+
+val mapper = jacksonObjectMapper().apply {
+    propertyNamingStrategy = PropertyNamingStrategy.LOWER_CAMEL_CASE
+    setSerializationInclusion(JsonInclude.Include.NON_NULL)
+    convert(Abranchiata::class,          { Abranchiata.fromJson(it) },          { it.toJson() }, true)
+    convert(Academe::class,              { Academe.fromJson(it) },              { it.toJson() }, true)
+    convert(Acquirable::class,           { Acquirable.fromJson(it) },           { it.toJson() }, true)
+    convert(Aerometry::class,            { Aerometry.fromJson(it) },            { it.toJson() }, true)
+    convert(Alexin::class,               { Alexin.fromJson(it) },               { it.toJson() }, true)
+    convert(AlleviateElement::class,     { AlleviateElement.fromJson(it) },     { it.toJson() }, true)
+    convert(Amaa::class,                 { Amaa.fromJson(it) },                 { it.toJson() }, true)
+    convert(Ambassage::class,            { Ambassage.fromJson(it) },            { it.toJson() }, true)
+    convert(AnkeeElement::class,         { AnkeeElement.fromJson(it) },         { it.toJson() }, true)
+    convert(AnsarieElement::class,       { AnsarieElement.fromJson(it) },       { it.toJson() }, true)
+    convert(Aphasia::class,              { Aphasia.fromJson(it) },              { it.toJson() }, true)
+    convert(Asprawl::class,              { Asprawl.fromJson(it) },              { it.toJson() }, true)
+    convert(Bedesman::class,             { Bedesman.fromJson(it) },             { it.toJson() }, true)
+    convert(Belard::class,               { Belard.fromJson(it) },               { it.toJson() }, true)
+    convert(Bocking::class,              { Bocking.fromJson(it) },              { it.toJson() }, true)
+    convert(Brawlingly::class,           { Brawlingly.fromJson(it) },           { it.toJson() }, true)
+    convert(Brookie::class,              { Brookie.fromJson(it) },              { it.toJson() }, true)
+    convert(Bumboatman::class,           { Bumboatman.fromJson(it) },           { it.toJson() }, true)
+    convert(Calaverite::class,           { Calaverite.fromJson(it) },           { it.toJson() }, true)
+    convert(Catallactic::class,          { Catallactic.fromJson(it) },          { it.toJson() }, true)
+    convert(Cemental::class,             { Cemental.fromJson(it) },             { it.toJson() }, true)
+    convert(ChytridiaceaeElement::class, { ChytridiaceaeElement.fromJson(it) }, { it.toJson() }, true)
+    convert(DiscordiaElement::class,     { DiscordiaElement.fromJson(it) },     { it.toJson() }, true)
+    convert(Endomyce::class,             { Endomyce.fromJson(it) },             { it.toJson() }, true)
+    convert(Epinephelidae::class,        { Epinephelidae.fromJson(it) },        { it.toJson() }, true)
+    convert(Eupatorium::class,           { Eupatorium.fromJson(it) },           { it.toJson() }, true)
+    convert(GryphosaurusElement::class,  { GryphosaurusElement.fromJson(it) },  { it.toJson() }, true)
+    convert(Koryak::class,               { Koryak.fromJson(it) },               { it.toJson() }, true)
+    convert(LaviniaElement::class,       { LaviniaElement.fromJson(it) },       { it.toJson() }, true)
+    convert(OskarElement::class,         { OskarElement.fromJson(it) },         { it.toJson() }, true)
+    convert(RebeccaElement::class,       { RebeccaElement.fromJson(it) },       { it.toJson() }, true)
+    convert(Rhomboganoidei::class,       { Rhomboganoidei.fromJson(it) },       { it.toJson() }, true)
+    convert(Ruellia::class,              { Ruellia.fromJson(it) },              { it.toJson() }, true)
+    convert(School::class,               { School.fromJson(it) },               { it.toJson() }, true)
+    convert(Shakespearolater::class,     { Shakespearolater.fromJson(it) },     { it.toJson() }, true)
+}
+
+data class TopLevel (
+    @get:JsonProperty("Abranchiata", required=true)@field:JsonProperty("Abranchiata", required=true)
+    val abranchiata: List<Abranchiata>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val academe: List<Academe>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val acquirable: List<Acquirable>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val aerometry: List<Aerometry>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val alexin: List<Alexin>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val alleviate: List<AlleviateElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val amaas: List<Amaa>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val ambassage: List<Ambassage>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val amphithyron: List<Amphithyron?>,
+
+    @get:JsonProperty("Andriana", required=true)@field:JsonProperty("Andriana", required=true)
+    val andriana: List<String?>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val ankee: List<AnkeeElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val annihilator: List<Map<String, Long?>?>,
+
+    val annulose: Any? = null,
+
+    @get:JsonProperty("Ansarie", required=true)@field:JsonProperty("Ansarie", required=true)
+    val ansarie: List<AnsarieElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val aphasia: List<Aphasia>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val asprawl: List<Asprawl>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val attractive: List<Boolean?>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val barksome: Map<String, Long>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val bedesman: List<Bedesman>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val belard: List<Belard>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val bocking: List<Bocking>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val brawlingly: List<Brawlingly>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val brookie: List<Brookie>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val bumboatman: List<Bumboatman>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val bystreet: List<Any?>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val calaverite: List<Calaverite>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val catallactic: List<Catallactic>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val cemental: List<Cemental>,
+
+    @get:JsonProperty("Chytridiaceae", required=true)@field:JsonProperty("Chytridiaceae", required=true)
+    val chytridiaceae: List<ChytridiaceaeElement>,
+
+    @get:JsonProperty("Discordia", required=true)@field:JsonProperty("Discordia", required=true)
+    val discordia: List<DiscordiaElement>,
+
+    @get:JsonProperty("Endomyces", required=true)@field:JsonProperty("Endomyces", required=true)
+    val endomyces: List<Endomyce>,
+
+    @get:JsonProperty("Epinephelidae", required=true)@field:JsonProperty("Epinephelidae", required=true)
+    val epinephelidae: List<Epinephelidae>,
+
+    @get:JsonProperty("Eupatorium", required=true)@field:JsonProperty("Eupatorium", required=true)
+    val eupatorium: List<Eupatorium>,
+
+    @get:JsonProperty("Gryphosaurus", required=true)@field:JsonProperty("Gryphosaurus", required=true)
+    val gryphosaurus: List<GryphosaurusElement>,
+
+    @get:JsonProperty("Koryak", required=true)@field:JsonProperty("Koryak", required=true)
+    val koryak: List<Koryak>,
+
+    @get:JsonProperty("Lavinia", required=true)@field:JsonProperty("Lavinia", required=true)
+    val lavinia: List<LaviniaElement>,
+
+    @get:JsonProperty("Oskar", required=true)@field:JsonProperty("Oskar", required=true)
+    val oskar: List<OskarElement>,
+
+    @get:JsonProperty("Rebecca", required=true)@field:JsonProperty("Rebecca", required=true)
+    val rebecca: List<RebeccaElement>,
+
+    @get:JsonProperty("Rhomboganoidei", required=true)@field:JsonProperty("Rhomboganoidei", required=true)
+    val rhomboganoidei: List<Rhomboganoidei>,
+
+    @get:JsonProperty("Rigsmal", required=true)@field:JsonProperty("Rigsmal", required=true)
+    val rigsmal: Boolean,
+
+    @get:JsonProperty("Ruellia", required=true)@field:JsonProperty("Ruellia", required=true)
+    val ruellia: List<Ruellia>,
+
+    @get:JsonProperty("School", required=true)@field:JsonProperty("School", required=true)
+    val school: List<School>,
+
+    @get:JsonProperty("Shakespearolater", required=true)@field:JsonProperty("Shakespearolater", required=true)
+    val shakespearolater: List<Shakespearolater>,
+
+    @get:JsonProperty("Svan", required=true)@field:JsonProperty("Svan", required=true)
+    val svan: List<Double>,
+
+    @get:JsonProperty("Wayao", required=true)@field:JsonProperty("Wayao", required=true)
+    val wayao: Map<String, Double>
+) {
+    fun toJson() = mapper.writeValueAsString(this)
+
+    companion object {
+        fun fromJson(json: String) = mapper.readValue<TopLevel>(json)
+    }
+}
+
+sealed class Abranchiata {
+    class IntegerArrayValue(val value: List<Long>) : Abranchiata()
+    class IntegerValue(val value: Long)            : Abranchiata()
+    class NullValue()                              : Abranchiata()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerArrayValue -> this.value
+        is IntegerValue      -> this.value
+        is NullValue         -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Abranchiata = when (jn) {
+            is ArrayNode            -> IntegerArrayValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            null                    -> NullValue()
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Academe {
+    class IntegerArrayValue(val value: List<Long>)      : Academe()
+    class IntegerMapValue(val value: Map<String, Long>) : Academe()
+    class IntegerValue(val value: Long)                 : Academe()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerArrayValue -> this.value
+        is IntegerMapValue   -> this.value
+        is IntegerValue      -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Academe = when (jn) {
+            is ArrayNode            -> IntegerArrayValue(mapper.treeToValue(jn))
+            is ObjectNode           -> IntegerMapValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Acquirable {
+    class IntegerMapValue(val value: Map<String, Long>) : Acquirable()
+    class UnionArrayValue(val value: List<Long?>)       : Acquirable()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerMapValue -> this.value
+        is UnionArrayValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Acquirable = when (jn) {
+            is ObjectNode -> IntegerMapValue(mapper.treeToValue(jn))
+            is ArrayNode  -> UnionArrayValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Aerometry {
+    class BoolValue(val value: Boolean)  : Aerometry()
+    class DoubleValue(val value: Double) : Aerometry()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue   -> this.value
+        is DoubleValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Aerometry = when (jn) {
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Alexin {
+    class BoolValue(val value: Boolean)            : Alexin()
+    class IntegerArrayValue(val value: List<Long>) : Alexin()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue         -> this.value
+        is IntegerArrayValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Alexin = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ArrayNode   -> IntegerArrayValue(mapper.treeToValue(jn))
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class AlleviateElement {
+    class AlleviateClassValue(val value: AlleviateClass) : AlleviateElement()
+    class UnionArrayValue(val value: List<Long?>)        : AlleviateElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is AlleviateClassValue -> this.value
+        is UnionArrayValue     -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): AlleviateElement = when (jn) {
+            is ObjectNode -> AlleviateClassValue(mapper.treeToValue(jn))
+            is ArrayNode  -> UnionArrayValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class AlleviateClass (
+    val apriori: Any? = null,
+    val beggarer: Any? = null,
+    val brokenheartedly: Any? = null,
+    val debilitation: Any? = null,
+    val frike: Any? = null,
+    val gastrolith: Any? = null,
+
+    @get:JsonProperty("Hulsean")@field:JsonProperty("Hulsean")
+    val hulsean: Any? = null,
+
+    val orthocentric: Any? = null,
+    val petaly: Any? = null,
+    val probudgeting: Any? = null,
+    val reacquire: Any? = null,
+    val scow: Any? = null,
+    val shutoff: Any? = null,
+    val subcontiguous: Any? = null,
+    val suffumigate: Any? = null,
+    val transformable: Any? = null,
+    val uncoroneted: Any? = null,
+    val unparking: Any? = null,
+    val unvarnishedness: Any? = null,
+    val wherewithal: Any? = null
+)
+
+sealed class Amaa {
+    class BoolValue(val value: Boolean)    : Amaa()
+    class IntegerValue(val value: Long)    : Amaa()
+    class RebeccaValue(val value: Rebecca) : Amaa()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue    -> this.value
+        is IntegerValue -> this.value
+        is RebeccaValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Amaa = when (jn) {
+            is BooleanNode          -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is ObjectNode           -> RebeccaValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class Rebecca (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val catharticalness: Double,
+
+    @get:JsonProperty("Chirotherium", required=true)@field:JsonProperty("Chirotherium", required=true)
+    val chirotherium: Long,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val disdiapason: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val homocerc: Boolean,
+
+    val nonbookish: Any? = null
+)
+
+sealed class Ambassage {
+    class NullArrayValue(val value: List<Any?>) : Ambassage()
+    class StringValue(val value: String)        : Ambassage()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is NullArrayValue -> this.value
+        is StringValue    -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Ambassage = when (jn) {
+            is ArrayNode -> NullArrayValue(mapper.treeToValue(jn))
+            is TextNode  -> StringValue(mapper.treeToValue(jn))
+            else         -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class Amphithyron (
+    val akroasis: Long? = null,
+    val antiphonical: Long? = null,
+    val basebred: Long? = null,
+    val catharticalness: Double? = null,
+
+    @get:JsonProperty("Chirotherium")@field:JsonProperty("Chirotherium")
+    val chirotherium: Long? = null,
+
+    val conductometric: Long? = null,
+    val disdiapason: String? = null,
+    val ensilation: Long? = null,
+    val eyebolt: Long? = null,
+    val fistulated: Long? = null,
+    val heteropod: Long? = null,
+    val homocerc: Boolean? = null,
+
+    @get:JsonProperty("Juniperus")@field:JsonProperty("Juniperus")
+    val juniperus: Long? = null,
+
+    val labyrinthically: Long? = null,
+    val martyrization: Long? = null,
+    val mispolicy: Long? = null,
+    val multipara: Long? = null,
+
+    @get:JsonProperty("Nazirite")@field:JsonProperty("Nazirite")
+    val nazirite: Long? = null,
+
+    val nonbookish: Any? = null,
+    val possessorial: Long? = null,
+    val shamed: Long? = null,
+    val shelfworn: Long? = null,
+    val stagnum: Long? = null,
+
+    @get:JsonProperty("Those")@field:JsonProperty("Those")
+    val those: Long? = null,
+
+    val undecimal: Long? = null
+)
+
+sealed class AnkeeElement {
+    class AnkeeClassValue(val value: AnkeeClass)   : AnkeeElement()
+    class IntegerArrayValue(val value: List<Long>) : AnkeeElement()
+    class IntegerValue(val value: Long)            : AnkeeElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is AnkeeClassValue   -> this.value
+        is IntegerArrayValue -> this.value
+        is IntegerValue      -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): AnkeeElement = when (jn) {
+            is ObjectNode           -> AnkeeClassValue(mapper.treeToValue(jn))
+            is ArrayNode            -> IntegerArrayValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class AnkeeClass (
+    @get:JsonProperty("Anomoean")@field:JsonProperty("Anomoean")
+    val anomoean: Any? = null,
+
+    val barleyhood: Any? = null,
+    val befriender: Any? = null,
+    val brutishness: Any? = null,
+    val cephalalgy: Any? = null,
+    val cirurgian: Any? = null,
+    val conventionally: Any? = null,
+    val jackshay: Any? = null,
+    val milammeter: Any? = null,
+
+    @get:JsonProperty("Naja")@field:JsonProperty("Naja")
+    val naja: Any? = null,
+
+    val ombrological: Any? = null,
+    val phonasthenia: Any? = null,
+    val retrievableness: Any? = null,
+    val snakily: Any? = null,
+    val swot: Any? = null,
+    val tartlet: Any? = null,
+    val thiofuran: Any? = null,
+    val tracheophone: Any? = null,
+    val tuglike: Any? = null,
+    val unscratchingly: Any? = null
+)
+
+sealed class AnsarieElement {
+    class AnsarieClassValue(val value: AnsarieClass) : AnsarieElement()
+    class IntegerArrayValue(val value: List<Long>)   : AnsarieElement()
+    class NullValue()                                : AnsarieElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is AnsarieClassValue -> this.value
+        is IntegerArrayValue -> this.value
+        is NullValue         -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): AnsarieElement = when (jn) {
+            is ObjectNode -> AnsarieClassValue(mapper.treeToValue(jn))
+            is ArrayNode  -> IntegerArrayValue(mapper.treeToValue(jn))
+            null          -> NullValue()
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class AnsarieClass (
+    val accension: Any? = null,
+
+    @get:JsonProperty("Alida")@field:JsonProperty("Alida")
+    val alida: Any? = null,
+
+    val asteria: Any? = null,
+    val beriberic: Any? = null,
+    val edgebone: Any? = null,
+    val gastrodialysis: Any? = null,
+    val geographic: Any? = null,
+
+    @get:JsonProperty("Ictonyx")@field:JsonProperty("Ictonyx")
+    val ictonyx: Any? = null,
+
+    val metrocele: Any? = null,
+    val misgraft: Any? = null,
+    val monteith: Any? = null,
+    val notcher: Any? = null,
+    val prorestriction: Any? = null,
+
+    @get:JsonProperty("Ramist")@field:JsonProperty("Ramist")
+    val ramist: Any? = null,
+
+    val throatlet: Any? = null,
+    val unfair: Any? = null,
+    val unsynonymous: Any? = null,
+    val water: Any? = null,
+    val zestfully: Any? = null,
+    val zincic: Any? = null
+)
+
+sealed class Aphasia {
+    class IntegerArrayValue(val value: List<Long>) : Aphasia()
+    class IntegerValue(val value: Long)            : Aphasia()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerArrayValue -> this.value
+        is IntegerValue      -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Aphasia = when (jn) {
+            is ArrayNode            -> IntegerArrayValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Asprawl {
+    class DoubleValue(val value: Double) : Asprawl()
+    class StringValue(val value: String) : Asprawl()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue -> this.value
+        is StringValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Asprawl = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Bedesman {
+    class BoolValue(val value: Boolean)  : Bedesman()
+    class DoubleValue(val value: Double) : Bedesman()
+    class StringValue(val value: String) : Bedesman()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue   -> this.value
+        is DoubleValue -> this.value
+        is StringValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Bedesman = when (jn) {
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Belard {
+    class DoubleValue(val value: Double)           : Belard()
+    class IntegerArrayValue(val value: List<Long>) : Belard()
+    class RebeccaValue(val value: Rebecca)         : Belard()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue       -> this.value
+        is IntegerArrayValue -> this.value
+        is RebeccaValue      -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Belard = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> IntegerArrayValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> RebeccaValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Bocking {
+    class BoolValue(val value: Boolean)                 : Bocking()
+    class IntegerArrayValue(val value: List<Long>)      : Bocking()
+    class IntegerMapValue(val value: Map<String, Long>) : Bocking()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue         -> this.value
+        is IntegerArrayValue -> this.value
+        is IntegerMapValue   -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Bocking = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ArrayNode   -> IntegerArrayValue(mapper.treeToValue(jn))
+            is ObjectNode  -> IntegerMapValue(mapper.treeToValue(jn))
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Brawlingly {
+    class NullArrayValue(val value: List<Any?>)        : Brawlingly()
+    class UnionMapValue(val value: Map<String, Long?>) : Brawlingly()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is NullArrayValue -> this.value
+        is UnionMapValue  -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Brawlingly = when (jn) {
+            is ArrayNode  -> NullArrayValue(mapper.treeToValue(jn))
+            is ObjectNode -> UnionMapValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Brookie {
+    class IntegerArrayValue(val value: List<Long>) : Brookie()
+    class RebeccaValue(val value: Rebecca)         : Brookie()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerArrayValue -> this.value
+        is RebeccaValue      -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Brookie = when (jn) {
+            is ArrayNode  -> IntegerArrayValue(mapper.treeToValue(jn))
+            is ObjectNode -> RebeccaValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Bumboatman {
+    class NullArrayValue(val value: List<Any?>) : Bumboatman()
+    class StringValue(val value: String)        : Bumboatman()
+    class NullValue()                           : Bumboatman()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is NullArrayValue -> this.value
+        is StringValue    -> this.value
+        is NullValue      -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Bumboatman = when (jn) {
+            is ArrayNode -> NullArrayValue(mapper.treeToValue(jn))
+            is TextNode  -> StringValue(mapper.treeToValue(jn))
+            null         -> NullValue()
+            else         -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Calaverite {
+    class IntegerArrayValue(val value: List<Long>) : Calaverite()
+    class StringValue(val value: String)           : Calaverite()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerArrayValue -> this.value
+        is StringValue       -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Calaverite = when (jn) {
+            is ArrayNode -> IntegerArrayValue(mapper.treeToValue(jn))
+            is TextNode  -> StringValue(mapper.treeToValue(jn))
+            else         -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Catallactic {
+    class BoolValue(val value: Boolean)                 : Catallactic()
+    class IntegerMapValue(val value: Map<String, Long>) : Catallactic()
+    class NullArrayValue(val value: List<Any?>)         : Catallactic()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue       -> this.value
+        is IntegerMapValue -> this.value
+        is NullArrayValue  -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Catallactic = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ObjectNode  -> IntegerMapValue(mapper.treeToValue(jn))
+            is ArrayNode   -> NullArrayValue(mapper.treeToValue(jn))
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Cemental {
+    class DoubleValue(val value: Double)                : Cemental()
+    class IntegerArrayValue(val value: List<Long>)      : Cemental()
+    class IntegerMapValue(val value: Map<String, Long>) : Cemental()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue       -> this.value
+        is IntegerArrayValue -> this.value
+        is IntegerMapValue   -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Cemental = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> IntegerArrayValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> IntegerMapValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class ChytridiaceaeElement {
+    class BoolValue(val value: Boolean)                          : ChytridiaceaeElement()
+    class ChytridiaceaeClassValue(val value: ChytridiaceaeClass) : ChytridiaceaeElement()
+    class NullValue()                                            : ChytridiaceaeElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue               -> this.value
+        is ChytridiaceaeClassValue -> this.value
+        is NullValue               -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): ChytridiaceaeElement = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ObjectNode  -> ChytridiaceaeClassValue(mapper.treeToValue(jn))
+            null           -> NullValue()
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class ChytridiaceaeClass (
+    @get:JsonProperty("Batidaceae")@field:JsonProperty("Batidaceae")
+    val batidaceae: Any? = null,
+
+    @get:JsonProperty("Brechites")@field:JsonProperty("Brechites")
+    val brechites: Any? = null,
+
+    val codespairer: Any? = null,
+
+    @get:JsonProperty("Emery")@field:JsonProperty("Emery")
+    val emery: Any? = null,
+
+    val enervative: Any? = null,
+    val excriminate: Any? = null,
+    val goshenite: Any? = null,
+    val grime: Any? = null,
+    val gritten: Any? = null,
+    val hectorly: Any? = null,
+    val intermediation: Any? = null,
+    val meeterly: Any? = null,
+
+    @get:JsonProperty("Narraganset")@field:JsonProperty("Narraganset")
+    val narraganset: Any? = null,
+
+    val onymatic: Any? = null,
+    val paddlecock: Any? = null,
+    val thana: Any? = null,
+    val thornily: Any? = null,
+    val uckia: Any? = null,
+    val unmettle: Any? = null,
+    val vorticellid: Any? = null
+)
+
+sealed class DiscordiaElement {
+    class DiscordiaClassValue(val value: DiscordiaClass) : DiscordiaElement()
+    class IntegerArrayValue(val value: List<Long>)       : DiscordiaElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DiscordiaClassValue -> this.value
+        is IntegerArrayValue   -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): DiscordiaElement = when (jn) {
+            is ObjectNode -> DiscordiaClassValue(mapper.treeToValue(jn))
+            is ArrayNode  -> IntegerArrayValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class DiscordiaClass (
+    @get:JsonProperty("Altaic")@field:JsonProperty("Altaic")
+    val altaic: Long? = null,
+
+    val amoristic: Long? = null,
+    val blennophthalmia: Long? = null,
+    val catharticalness: Double? = null,
+
+    @get:JsonProperty("Chirotherium")@field:JsonProperty("Chirotherium")
+    val chirotherium: Long? = null,
+
+    val disciplinability: Long? = null,
+    val disdiapason: String? = null,
+    val goofer: Long? = null,
+    val homocerc: Boolean? = null,
+    val laryngograph: Long? = null,
+    val leucitis: Long? = null,
+    val lymphocyst: Long? = null,
+    val microcosmology: Long? = null,
+    val nauseation: Long? = null,
+    val nonbookish: Any? = null,
+
+    @get:JsonProperty("Patarin")@field:JsonProperty("Patarin")
+    val patarin: Long? = null,
+
+    val preliberal: Long? = null,
+    val prettifier: Long? = null,
+    val rangework: Long? = null,
+    val redient: Long? = null,
+    val subfusiform: Long? = null,
+    val suicidical: Long? = null,
+    val swow: Long? = null,
+    val wastrel: Long? = null,
+    val wingle: Long? = null
+)
+
+sealed class Endomyce {
+    class IntegerValue(val value: Long)  : Endomyce()
+    class StringValue(val value: String) : Endomyce()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerValue -> this.value
+        is StringValue  -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Endomyce = when (jn) {
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is TextNode             -> StringValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Epinephelidae {
+    class BoolValue(val value: Boolean)  : Epinephelidae()
+    class IntegerValue(val value: Long)  : Epinephelidae()
+    class StringValue(val value: String) : Epinephelidae()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue    -> this.value
+        is IntegerValue -> this.value
+        is StringValue  -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Epinephelidae = when (jn) {
+            is BooleanNode          -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is TextNode             -> StringValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Eupatorium {
+    class IntegerMapValue(val value: Map<String, Long>) : Eupatorium()
+    class NullArrayValue(val value: List<Any?>)         : Eupatorium()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerMapValue -> this.value
+        is NullArrayValue  -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Eupatorium = when (jn) {
+            is ObjectNode -> IntegerMapValue(mapper.treeToValue(jn))
+            is ArrayNode  -> NullArrayValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class GryphosaurusElement {
+    class GryphosaurusClassValue(val value: GryphosaurusClass) : GryphosaurusElement()
+    class IntegerArrayValue(val value: List<Long>)             : GryphosaurusElement()
+    class StringValue(val value: String)                       : GryphosaurusElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is GryphosaurusClassValue -> this.value
+        is IntegerArrayValue      -> this.value
+        is StringValue            -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): GryphosaurusElement = when (jn) {
+            is ObjectNode -> GryphosaurusClassValue(mapper.treeToValue(jn))
+            is ArrayNode  -> IntegerArrayValue(mapper.treeToValue(jn))
+            is TextNode   -> StringValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class GryphosaurusClass (
+    val amissibility: Any? = null,
+
+    @get:JsonProperty("Burushaski")@field:JsonProperty("Burushaski")
+    val burushaski: Any? = null,
+
+    val citronin: Any? = null,
+    val coplaintiff: Any? = null,
+    val disquisitionary: Any? = null,
+    val enoplan: Any? = null,
+    val faintness: Any? = null,
+    val hebetomy: Any? = null,
+
+    @get:JsonProperty("islandry")@field:JsonProperty("islandry")
+    val islandry: Any? = null,
+
+    val lameduck: Any? = null,
+    val overbattle: Any? = null,
+    val overinterested: Any? = null,
+    val phrenologic: Any? = null,
+    val rainband: Any? = null,
+    val shiningly: Any? = null,
+    val stamineous: Any? = null,
+    val subscapularis: Any? = null,
+
+    @get:JsonProperty("Tahami")@field:JsonProperty("Tahami")
+    val tahami: Any? = null,
+
+    val undaubed: Any? = null,
+    val underntime: Any? = null
+)
+
+sealed class Koryak {
+    class StringValue(val value: String)               : Koryak()
+    class UnionMapValue(val value: Map<String, Long?>) : Koryak()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is StringValue   -> this.value
+        is UnionMapValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Koryak = when (jn) {
+            is TextNode   -> StringValue(mapper.treeToValue(jn))
+            is ObjectNode -> UnionMapValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class LaviniaElement {
+    class LaviniaClassValue(val value: LaviniaClass) : LaviniaElement()
+    class StringValue(val value: String)             : LaviniaElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is LaviniaClassValue -> this.value
+        is StringValue       -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): LaviniaElement = when (jn) {
+            is ObjectNode -> LaviniaClassValue(mapper.treeToValue(jn))
+            is TextNode   -> StringValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class LaviniaClass (
+    val agitable: Long? = null,
+    val asininity: Long? = null,
+    val benefiter: Long? = null,
+    val bronzelike: Long? = null,
+    val catharticalness: Double? = null,
+
+    @get:JsonProperty("Chirotherium")@field:JsonProperty("Chirotherium")
+    val chirotherium: Long? = null,
+
+    val cholesteatomatous: Long? = null,
+    val deprivement: Long? = null,
+    val disdiapason: String? = null,
+    val flippantness: Long? = null,
+    val fogproof: Long? = null,
+    val homocerc: Boolean? = null,
+    val merrymeeting: Long? = null,
+    val nonbookish: Any? = null,
+    val overcareful: Long? = null,
+    val panaris: Long? = null,
+    val preacceptance: Long? = null,
+    val quinoxaline: Long? = null,
+    val sig: Long? = null,
+    val superconfusion: Long? = null,
+
+    @get:JsonProperty("Tacana")@field:JsonProperty("Tacana")
+    val tacana: Long? = null,
+
+    val tillotter: Long? = null,
+    val tranquillize: Long? = null,
+    val unquestionable: Long? = null,
+    val uproute: Long? = null
+)
+
+sealed class OskarElement {
+    class IntegerArrayValue(val value: List<Long>) : OskarElement()
+    class OskarClassValue(val value: OskarClass)   : OskarElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerArrayValue -> this.value
+        is OskarClassValue   -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): OskarElement = when (jn) {
+            is ArrayNode  -> IntegerArrayValue(mapper.treeToValue(jn))
+            is ObjectNode -> OskarClassValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class OskarClass (
+    @get:JsonProperty("Acrobates")@field:JsonProperty("Acrobates")
+    val acrobates: Any? = null,
+
+    val beanshooter: Any? = null,
+    val bearhound: Any? = null,
+
+    @get:JsonProperty("Cayuga")@field:JsonProperty("Cayuga")
+    val cayuga: Any? = null,
+
+    val guarneri: Any? = null,
+    val hypochondriacism: Any? = null,
+    val indication: Any? = null,
+    val jaculative: Any? = null,
+    val nagana: Any? = null,
+
+    @get:JsonProperty("Netherlandish")@field:JsonProperty("Netherlandish")
+    val netherlandish: Any? = null,
+
+    val noctivagous: Any? = null,
+    val nonphysiological: Any? = null,
+    val praxis: Any? = null,
+    val provision: Any? = null,
+    val subterhuman: Any? = null,
+    val sunlit: Any? = null,
+    val syncraniate: Any? = null,
+    val teachment: Any? = null,
+    val unmutinous: Any? = null,
+    val unstoppable: Any? = null
+)
+
+sealed class RebeccaElement {
+    class IntegerValue(val value: Long)    : RebeccaElement()
+    class RebeccaValue(val value: Rebecca) : RebeccaElement()
+    class StringValue(val value: String)   : RebeccaElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerValue -> this.value
+        is RebeccaValue -> this.value
+        is StringValue  -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): RebeccaElement = when (jn) {
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is ObjectNode           -> RebeccaValue(mapper.treeToValue(jn))
+            is TextNode             -> StringValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Rhomboganoidei {
+    class IntegerArrayValue(val value: List<Long>) : Rhomboganoidei()
+    class RebeccaValue(val value: Rebecca)         : Rhomboganoidei()
+    class StringValue(val value: String)           : Rhomboganoidei()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerArrayValue -> this.value
+        is RebeccaValue      -> this.value
+        is StringValue       -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Rhomboganoidei = when (jn) {
+            is ArrayNode  -> IntegerArrayValue(mapper.treeToValue(jn))
+            is ObjectNode -> RebeccaValue(mapper.treeToValue(jn))
+            is TextNode   -> StringValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Ruellia {
+    class BoolValue(val value: Boolean)    : Ruellia()
+    class RebeccaValue(val value: Rebecca) : Ruellia()
+    class StringValue(val value: String)   : Ruellia()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue    -> this.value
+        is RebeccaValue -> this.value
+        is StringValue  -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Ruellia = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ObjectNode  -> RebeccaValue(mapper.treeToValue(jn))
+            is TextNode    -> StringValue(mapper.treeToValue(jn))
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class School {
+    class IntegerMapValue(val value: Map<String, Long>) : School()
+    class IntegerValue(val value: Long)                 : School()
+    class NullValue()                                   : School()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerMapValue -> this.value
+        is IntegerValue    -> this.value
+        is NullValue       -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): School = when (jn) {
+            is ObjectNode           -> IntegerMapValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            null                    -> NullValue()
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Shakespearolater {
+    class DoubleValue(val value: Double)           : Shakespearolater()
+    class IntegerArrayValue(val value: List<Long>) : Shakespearolater()
+    class StringValue(val value: String)           : Shakespearolater()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue       -> this.value
+        is IntegerArrayValue -> this.value
+        is StringValue       -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Shakespearolater = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> IntegerArrayValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
diff --git a/head/kotlin-jackson/test/inputs/json/priority/combinations3.json/default/TopLevel.kt b/head/kotlin-jackson/test/inputs/json/priority/combinations3.json/default/TopLevel.kt
new file mode 100644
index 0000000..1c3dc46
--- /dev/null
+++ b/head/kotlin-jackson/test/inputs/json/priority/combinations3.json/default/TopLevel.kt
@@ -0,0 +1,1323 @@
+// 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.*
+
+
+@Suppress("UNCHECKED_CAST")
+private fun <T> ObjectMapper.convert(k: kotlin.reflect.KClass<*>, fromJson: (JsonNode) -> T, toJson: (T) -> String, isUnion: Boolean = false) = registerModule(SimpleModule().apply {
+    addSerializer(k.java as Class<T>, object : StdSerializer<T>(k.java as Class<T>) {
+            override fun serialize(value: T, gen: JsonGenerator, provider: SerializerProvider) = gen.writeRawValue(toJson(value))
+    })
+    addDeserializer(k.java as Class<T>, object : StdDeserializer<T>(k.java as Class<T>) {
+            override fun deserialize(p: JsonParser, ctxt: DeserializationContext) = fromJson(p.readValueAsTree())
+    })
+})
+
+val mapper = jacksonObjectMapper().apply {
+    propertyNamingStrategy = PropertyNamingStrategy.LOWER_CAMEL_CASE
+    setSerializationInclusion(JsonInclude.Include.NON_NULL)
+    convert(JurorElement::class,            { JurorElement.fromJson(it) },            { it.toJson() }, true)
+    convert(Kongoni::class,                 { Kongoni.fromJson(it) },                 { it.toJson() }, true)
+    convert(LadronismElement::class,        { LadronismElement.fromJson(it) },        { it.toJson() }, true)
+    convert(LandlubberlyElement::class,     { LandlubberlyElement.fromJson(it) },     { it.toJson() }, true)
+    convert(Listener::class,                { Listener.fromJson(it) },                { it.toJson() }, true)
+    convert(LupusElement::class,            { LupusElement.fromJson(it) },            { it.toJson() }, true)
+    convert(MonaziteElement::class,         { MonaziteElement.fromJson(it) },         { it.toJson() }, true)
+    convert(Monoliteral::class,             { Monoliteral.fromJson(it) },             { it.toJson() }, true)
+    convert(MonotheisticallyElement::class, { MonotheisticallyElement.fromJson(it) }, { it.toJson() }, true)
+    convert(Montage::class,                 { Montage.fromJson(it) },                 { it.toJson() }, true)
+    convert(Moralness::class,               { Moralness.fromJson(it) },               { it.toJson() }, true)
+    convert(Mulishly::class,                { Mulishly.fromJson(it) },                { it.toJson() }, true)
+    convert(Myoscope::class,                { Myoscope.fromJson(it) },                { it.toJson() }, true)
+    convert(Neuromastic::class,             { Neuromastic.fromJson(it) },             { it.toJson() }, true)
+    convert(Nonnervous::class,              { Nonnervous.fromJson(it) },              { it.toJson() }, true)
+    convert(Nonvaluation::class,            { Nonvaluation.fromJson(it) },            { it.toJson() }, true)
+    convert(OccupationalistElement::class,  { OccupationalistElement.fromJson(it) },  { it.toJson() }, true)
+    convert(OutrivalElement::class,         { OutrivalElement.fromJson(it) },         { it.toJson() }, true)
+    convert(Paleographically::class,        { Paleographically.fromJson(it) },        { it.toJson() }, true)
+    convert(Pamphletwise::class,            { Pamphletwise.fromJson(it) },            { it.toJson() }, true)
+    convert(Pediatric::class,               { Pediatric.fromJson(it) },               { it.toJson() }, true)
+    convert(PiaculumElement::class,         { PiaculumElement.fromJson(it) },         { it.toJson() }, true)
+    convert(Piccadilly::class,              { Piccadilly.fromJson(it) },              { it.toJson() }, true)
+    convert(Piffler::class,                 { Piffler.fromJson(it) },                 { it.toJson() }, true)
+    convert(Pithful::class,                 { Pithful.fromJson(it) },                 { it.toJson() }, true)
+    convert(Placuntiti::class,              { Placuntiti.fromJson(it) },              { it.toJson() }, true)
+    convert(Plectopterous::class,           { Plectopterous.fromJson(it) },           { it.toJson() }, true)
+    convert(Poliorcetic::class,             { Poliorcetic.fromJson(it) },             { it.toJson() }, true)
+    convert(Poormaster::class,              { Poormaster.fromJson(it) },              { it.toJson() }, true)
+    convert(PotwhiskyElement::class,        { PotwhiskyElement.fromJson(it) },        { it.toJson() }, true)
+    convert(Practicalizer::class,           { Practicalizer.fromJson(it) },           { it.toJson() }, true)
+    convert(PrefreshmanElement::class,      { PrefreshmanElement.fromJson(it) },      { it.toJson() }, true)
+    convert(Prehensility::class,            { Prehensility.fromJson(it) },            { it.toJson() }, true)
+    convert(Prevoidance::class,             { Prevoidance.fromJson(it) },             { it.toJson() }, true)
+    convert(Protext::class,                 { Protext.fromJson(it) },                 { it.toJson() }, true)
+}
+
+data class TopLevel (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val juror: List<JurorElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val kongoni: List<Kongoni>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val ladronism: List<LadronismElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val landlubberly: List<LandlubberlyElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val listener: List<Listener>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val lupus: List<LupusElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val maslin: List<Maslin>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val monazite: List<MonaziteElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val monoliteral: List<Monoliteral>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val monotheistically: List<MonotheisticallyElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val montage: List<Montage>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val moralness: List<Moralness>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val mowra: List<MonaziteClass?>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val mulishly: List<Mulishly>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val myoscope: List<Myoscope>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val nach: List<List<Long?>?>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val neuromastic: List<Neuromastic>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val noncontributing: List<Noncontributing>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val nonnervous: List<Nonnervous>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val nonvaluation: List<Nonvaluation>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val occupationalist: List<OccupationalistElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val outrival: List<OutrivalElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val paleographically: List<Paleographically>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val pamphletwise: List<Pamphletwise>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val pediatrics: List<Pediatric>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val perceptive: List<Boolean>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val piaculum: List<PiaculumElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val piccadilly: List<Piccadilly>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val piffler: List<Piffler>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val pithful: List<Pithful>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val placuntitis: List<Placuntiti>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val plectopterous: List<Plectopterous>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val pneumocele: List<Pneumocele?>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val poliorcetic: List<Poliorcetic>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val poormaster: List<Poormaster>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val potwhisky: List<PotwhiskyElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val practicalizer: List<Practicalizer>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val prefreshman: List<PrefreshmanElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val prehensility: List<Prehensility>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val prevoidance: List<Prevoidance>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val probant: List<Map<String, Long?>>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val protext: List<Protext>
+) {
+    fun toJson() = mapper.writeValueAsString(this)
+
+    companion object {
+        fun fromJson(json: String) = mapper.readValue<TopLevel>(json)
+    }
+}
+
+sealed class JurorElement {
+    class BoolValue(val value: Boolean)          : JurorElement()
+    class JurorClassValue(val value: JurorClass) : JurorElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue       -> this.value
+        is JurorClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): JurorElement = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ObjectNode  -> JurorClassValue(mapper.treeToValue(jn))
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class JurorClass (
+    val adipsy: Any? = null,
+    val auxiliator: Any? = null,
+    val benda: Any? = null,
+    val benjamin: Any? = null,
+    val brandling: Any? = null,
+    val epicurishly: Any? = null,
+    val eremochaetous: Any? = null,
+    val marten: Any? = null,
+    val monocline: Any? = null,
+
+    @get:JsonProperty("Olea")@field:JsonProperty("Olea")
+    val olea: Any? = null,
+
+    val palgat: Any? = null,
+    val pennyworth: Any? = null,
+    val pioury: Any? = null,
+    val pragmatistic: Any? = null,
+    val stylelessness: Any? = null,
+    val systematical: Any? = null,
+    val thready: Any? = null,
+    val uncontemporary: Any? = null,
+    val uncouched: Any? = null,
+    val uninhabitedness: Any? = null
+)
+
+sealed class Kongoni {
+    class IntegerArrayValue(val value: List<Long>)      : Kongoni()
+    class IntegerMapValue(val value: Map<String, Long>) : Kongoni()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerArrayValue -> this.value
+        is IntegerMapValue   -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Kongoni = when (jn) {
+            is ArrayNode  -> IntegerArrayValue(mapper.treeToValue(jn))
+            is ObjectNode -> IntegerMapValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class LadronismElement {
+    class DoubleValue(val value: Double)                 : LadronismElement()
+    class LadronismClassValue(val value: LadronismClass) : LadronismElement()
+    class StringValue(val value: String)                 : LadronismElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue         -> this.value
+        is LadronismClassValue -> this.value
+        is StringValue         -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): LadronismElement = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> LadronismClassValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class LadronismClass (
+    val acclaimer: Any? = null,
+    val achree: Any? = null,
+    val base: Any? = null,
+    val conundrumize: Any? = null,
+    val degerminator: Any? = null,
+    val describable: Any? = null,
+    val exasperatedly: Any? = null,
+    val heroine: Any? = null,
+    val indazin: Any? = null,
+    val luteous: Any? = null,
+    val papular: Any? = null,
+    val pritch: Any? = null,
+
+    @get:JsonProperty("Prodenia")@field:JsonProperty("Prodenia")
+    val prodenia: Any? = null,
+
+    val seege: Any? = null,
+    val shopgirl: Any? = null,
+    val tragedietta: Any? = null,
+    val unsparse: Any? = null,
+    val uplook: Any? = null,
+    val vermiformis: Any? = null,
+    val whafabout: Any? = null
+)
+
+sealed class LandlubberlyElement {
+    class BoolValue(val value: Boolean)                        : LandlubberlyElement()
+    class IntegerValue(val value: Long)                        : LandlubberlyElement()
+    class LandlubberlyClassValue(val value: LandlubberlyClass) : LandlubberlyElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue              -> this.value
+        is IntegerValue           -> this.value
+        is LandlubberlyClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): LandlubberlyElement = when (jn) {
+            is BooleanNode          -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is ObjectNode           -> LandlubberlyClassValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class LandlubberlyClass (
+    val acropoleis: Any? = null,
+    val aminate: Any? = null,
+
+    @get:JsonProperty("Amyraldism")@field:JsonProperty("Amyraldism")
+    val amyraldism: Any? = null,
+
+    val bipenniform: Any? = null,
+    val bugre: Any? = null,
+    val calycule: Any? = null,
+    val caoutchouc: Any? = null,
+    val disprover: Any? = null,
+    val fitroot: Any? = null,
+    val fulgently: Any? = null,
+    val kickup: Any? = null,
+    val laevoversion: Any? = null,
+    val moter: Any? = null,
+    val objectivity: Any? = null,
+    val posterity: Any? = null,
+    val postnuptial: Any? = null,
+    val precedentary: Any? = null,
+    val saddling: Any? = null,
+    val subcurrent: Any? = null,
+    val unrecriminative: Any? = null
+)
+
+sealed class Listener {
+    class IntegerValue(val value: Long)         : Listener()
+    class NullArrayValue(val value: List<Any?>) : Listener()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerValue   -> this.value
+        is NullArrayValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Listener = when (jn) {
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is ArrayNode            -> NullArrayValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class LupusElement {
+    class IntegerValue(val value: Long)          : LupusElement()
+    class LupusClassValue(val value: LupusClass) : LupusElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerValue    -> this.value
+        is LupusClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): LupusElement = when (jn) {
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is ObjectNode           -> LupusClassValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class LupusClass (
+    val catharticalness: Double? = null,
+
+    @get:JsonProperty("Chirotherium")@field:JsonProperty("Chirotherium")
+    val chirotherium: Long? = null,
+
+    @get:JsonProperty("Chlorioninae")@field:JsonProperty("Chlorioninae")
+    val chlorioninae: Long? = null,
+
+    @get:JsonProperty("Corvinae")@field:JsonProperty("Corvinae")
+    val corvinae: Long? = null,
+
+    @get:JsonProperty("Crassina")@field:JsonProperty("Crassina")
+    val crassina: Long? = null,
+
+    val disdiapason: String? = null,
+    val exiguity: Long? = null,
+    val farcist: Long? = null,
+    val holographical: Long? = null,
+    val homocerc: Boolean? = null,
+    val ichthyophagan: Long? = null,
+    val implacable: Long? = null,
+    val nonbookish: Any? = null,
+    val outshiner: Long? = null,
+    val overweather: Long? = null,
+    val protonegroid: Long? = null,
+    val shallowish: Long? = null,
+    val snoke: Long? = null,
+    val snout: Long? = null,
+    val surveillance: Long? = null,
+    val threshingtime: Long? = null,
+
+    @get:JsonProperty("Thysanocarpus")@field:JsonProperty("Thysanocarpus")
+    val thysanocarpus: Long? = null,
+
+    val unsignificantly: Long? = null,
+    val unsnap: Long? = null,
+    val vendible: Long? = null
+)
+
+data class Maslin (
+    @get:JsonProperty("Alicant")@field:JsonProperty("Alicant")
+    val alicant: Long? = null,
+
+    val antiatonement: Any? = null,
+    val anticorrosive: Long? = null,
+    val aphidozer: Any? = null,
+
+    @get:JsonProperty("Bakuninist")@field:JsonProperty("Bakuninist")
+    val bakuninist: Any? = null,
+
+    val be: Long? = null,
+    val catharticalness: Double? = null,
+
+    @get:JsonProperty("Chirotherium")@field:JsonProperty("Chirotherium")
+    val chirotherium: Long? = null,
+
+    val chub: Long? = null,
+    val cuprosilicon: Long? = null,
+    val curtailedly: Long? = null,
+    val dellenite: Long? = null,
+
+    @get:JsonProperty("Dimitry")@field:JsonProperty("Dimitry")
+    val dimitry: Long? = null,
+
+    val disdiapason: String? = null,
+    val edifying: Any? = null,
+    val ethmoiditis: Long? = null,
+    val gastralgy: Any? = null,
+    val goatherd: Long? = null,
+    val hammerdress: Long? = null,
+    val hangfire: Any? = null,
+    val homocerc: Boolean? = null,
+    val lacunosity: Long? = null,
+    val longiloquence: Any? = null,
+    val mameliere: Long? = null,
+    val motherless: Any? = null,
+    val nonbookish: Any? = null,
+    val noncorrodible: Any? = null,
+    val nonsensicality: Any? = null,
+    val oafishly: Long? = null,
+    val pfund: Any? = null,
+    val preadvisory: Any? = null,
+    val retroflexed: Any? = null,
+    val saccharulmic: Long? = null,
+    val scowlful: Long? = null,
+    val secluded: Any? = null,
+    val slackage: Any? = null,
+    val sphaeridial: Long? = null,
+    val spondulics: Any? = null,
+    val subsecive: Long? = null,
+    val swellmobsman: Any? = null,
+    val trachyglossate: Long? = null,
+    val trialogue: Any? = null,
+    val unassuaged: Long? = null,
+    val ungross: Any? = null,
+    val unjudiciously: Any? = null
+)
+
+sealed class MonaziteElement {
+    class DoubleValue(val value: Double)               : MonaziteElement()
+    class MonaziteClassValue(val value: MonaziteClass) : MonaziteElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue        -> this.value
+        is MonaziteClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): MonaziteElement = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> MonaziteClassValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class MonaziteClass (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val catharticalness: Double,
+
+    @get:JsonProperty("Chirotherium", required=true)@field:JsonProperty("Chirotherium", required=true)
+    val chirotherium: Long,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val disdiapason: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val homocerc: Boolean,
+
+    val nonbookish: Any? = null
+)
+
+sealed class Monoliteral {
+    class BoolValue(val value: Boolean)         : Monoliteral()
+    class NullArrayValue(val value: List<Any?>) : Monoliteral()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue      -> this.value
+        is NullArrayValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Monoliteral = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ArrayNode   -> NullArrayValue(mapper.treeToValue(jn))
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class MonotheisticallyElement {
+    class MonotheisticallyClassValue(val value: MonotheisticallyClass) : MonotheisticallyElement()
+    class NullArrayValue(val value: List<Any?>)                        : MonotheisticallyElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is MonotheisticallyClassValue -> this.value
+        is NullArrayValue             -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): MonotheisticallyElement = when (jn) {
+            is ObjectNode -> MonotheisticallyClassValue(mapper.treeToValue(jn))
+            is ArrayNode  -> NullArrayValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class MonotheisticallyClass (
+    val blaspheme: Any? = null,
+    val catharticalness: Double? = null,
+    val celiosalpingectomy: Any? = null,
+
+    @get:JsonProperty("Chirotherium")@field:JsonProperty("Chirotherium")
+    val chirotherium: Long? = null,
+
+    val consummativeness: Any? = null,
+    val disdiapason: String? = null,
+    val egestive: Any? = null,
+    val enchylema: Any? = null,
+    val gasconade: Any? = null,
+    val holidayer: Any? = null,
+    val homocerc: Boolean? = null,
+    val intuitionalism: Any? = null,
+    val lophiostomate: Any? = null,
+    val nonbookish: Any? = null,
+    val nonvolition: Any? = null,
+    val palatableness: Any? = null,
+    val pimpery: Any? = null,
+    val previolation: Any? = null,
+    val reconveyance: Any? = null,
+    val registership: Any? = null,
+    val rhyacolite: Any? = null,
+    val smithereens: Any? = null,
+    val superedification: Any? = null,
+    val trust: Any? = null,
+    val whitestone: Any? = null
+)
+
+sealed class Montage {
+    class DoubleValue(val value: Double)        : Montage()
+    class NullArrayValue(val value: List<Any?>) : Montage()
+    class StringValue(val value: String)        : Montage()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue    -> this.value
+        is NullArrayValue -> this.value
+        is StringValue    -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Montage = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> NullArrayValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Moralness {
+    class DoubleValue(val value: Double)        : Moralness()
+    class NullArrayValue(val value: List<Any?>) : Moralness()
+    class NullValue()                           : Moralness()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue    -> this.value
+        is NullArrayValue -> this.value
+        is NullValue      -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Moralness = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> NullArrayValue(mapper.treeToValue(jn))
+            null                                   -> NullValue()
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Mulishly {
+    class DoubleValue(val value: Double)           : Mulishly()
+    class IntegerArrayValue(val value: List<Long>) : Mulishly()
+    class NullValue()                              : Mulishly()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue       -> this.value
+        is IntegerArrayValue -> this.value
+        is NullValue         -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Mulishly = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> IntegerArrayValue(mapper.treeToValue(jn))
+            null                                   -> NullValue()
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Myoscope {
+    class BoolValue(val value: Boolean)         : Myoscope()
+    class IntegerValue(val value: Long)         : Myoscope()
+    class NullArrayValue(val value: List<Any?>) : Myoscope()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue      -> this.value
+        is IntegerValue   -> this.value
+        is NullArrayValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Myoscope = when (jn) {
+            is BooleanNode          -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is ArrayNode            -> NullArrayValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Neuromastic {
+    class DoubleValue(val value: Double)        : Neuromastic()
+    class NullArrayValue(val value: List<Any?>) : Neuromastic()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue    -> this.value
+        is NullArrayValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Neuromastic = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> NullArrayValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class Noncontributing (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val estevin: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val jolterhead: Double,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val sauternes: Long,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val sparsely: Boolean,
+
+    val unrequested: Any? = null
+)
+
+sealed class Nonnervous {
+    class BoolValue(val value: Boolean) : Nonnervous()
+    class IntegerValue(val value: Long) : Nonnervous()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue    -> this.value
+        is IntegerValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Nonnervous = when (jn) {
+            is BooleanNode          -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Nonvaluation {
+    class BoolValue(val value: Boolean)         : Nonvaluation()
+    class DoubleValue(val value: Double)        : Nonvaluation()
+    class NullArrayValue(val value: List<Any?>) : Nonvaluation()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue      -> this.value
+        is DoubleValue    -> this.value
+        is NullArrayValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Nonvaluation = when (jn) {
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> NullArrayValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class OccupationalistElement {
+    class NullArrayValue(val value: List<Any?>)                      : OccupationalistElement()
+    class OccupationalistClassValue(val value: OccupationalistClass) : OccupationalistElement()
+    class NullValue()                                                : OccupationalistElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is NullArrayValue            -> this.value
+        is OccupationalistClassValue -> this.value
+        is NullValue                 -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): OccupationalistElement = when (jn) {
+            is ArrayNode  -> NullArrayValue(mapper.treeToValue(jn))
+            is ObjectNode -> OccupationalistClassValue(mapper.treeToValue(jn))
+            null          -> NullValue()
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class OccupationalistClass (
+    val beholdable: Any? = null,
+    val brotuliform: Any? = null,
+
+    @get:JsonProperty("Chimakum")@field:JsonProperty("Chimakum")
+    val chimakum: Any? = null,
+
+    val doodler: Any? = null,
+    val emulsin: Any? = null,
+
+    @get:JsonProperty("Fin")@field:JsonProperty("Fin")
+    val fin: Any? = null,
+
+    val flourishing: Any? = null,
+    val flueless: Any? = null,
+    val furtively: Any? = null,
+    val gritter: Any? = null,
+    val interwish: Any? = null,
+    val monoxylic: Any? = null,
+    val myristic: Any? = null,
+    val nightwear: Any? = null,
+    val peruser: Any? = null,
+    val theoastrological: Any? = null,
+    val thumby: Any? = null,
+    val tingitid: Any? = null,
+    val trailless: Any? = null,
+    val unpocketed: Any? = null
+)
+
+sealed class OutrivalElement {
+    class DoubleValue(val value: Double)               : OutrivalElement()
+    class OutrivalClassValue(val value: OutrivalClass) : OutrivalElement()
+    class NullValue()                                  : OutrivalElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue        -> this.value
+        is OutrivalClassValue -> this.value
+        is NullValue          -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): OutrivalElement = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> OutrivalClassValue(mapper.treeToValue(jn))
+            null                                   -> NullValue()
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class OutrivalClass (
+    val adroitly: Any? = null,
+    val bridehood: Any? = null,
+
+    @get:JsonProperty("Castoroides")@field:JsonProperty("Castoroides")
+    val castoroides: Any? = null,
+
+    @get:JsonProperty("Czechoslovak")@field:JsonProperty("Czechoslovak")
+    val czechoslovak: Any? = null,
+
+    val diagenesis: Any? = null,
+    val dihexahedron: Any? = null,
+    val dopester: Any? = null,
+    val eumerism: Any? = null,
+    val flyness: Any? = null,
+    val fouler: Any? = null,
+    val laudanosine: Any? = null,
+
+    @get:JsonProperty("Lingulidae")@field:JsonProperty("Lingulidae")
+    val lingulidae: Any? = null,
+
+    val minutary: Any? = null,
+    val mitra: Any? = null,
+    val opisthorchiasis: Any? = null,
+    val pensively: Any? = null,
+    val pubigerous: Any? = null,
+    val rebellious: Any? = null,
+    val recodify: Any? = null,
+    val unpaced: Any? = null
+)
+
+sealed class Paleographically {
+    class DoubleValue(val value: Double)               : Paleographically()
+    class UnionMapValue(val value: Map<String, Long?>) : Paleographically()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue   -> this.value
+        is UnionMapValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Paleographically = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> UnionMapValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Pamphletwise {
+    class IntegerMapValue(val value: Map<String, Long>) : Pamphletwise()
+    class IntegerValue(val value: Long)                 : Pamphletwise()
+    class StringValue(val value: String)                : Pamphletwise()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerMapValue -> this.value
+        is IntegerValue    -> this.value
+        is StringValue     -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Pamphletwise = when (jn) {
+            is ObjectNode           -> IntegerMapValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is TextNode             -> StringValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Pediatric {
+    class BoolValue(val value: Boolean)  : Pediatric()
+    class DoubleValue(val value: Double) : Pediatric()
+    class NullValue()                    : Pediatric()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue   -> this.value
+        is DoubleValue -> this.value
+        is NullValue   -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Pediatric = when (jn) {
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            null                                   -> NullValue()
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class PiaculumElement {
+    class DoubleValue(val value: Double)               : PiaculumElement()
+    class PiaculumClassValue(val value: PiaculumClass) : PiaculumElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue        -> this.value
+        is PiaculumClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): PiaculumElement = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> PiaculumClassValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class PiaculumClass (
+    val alada: Long? = null,
+    val amphistomous: Long? = null,
+    val boysenberry: Long? = null,
+    val catharticalness: Double? = null,
+
+    @get:JsonProperty("Chirotherium")@field:JsonProperty("Chirotherium")
+    val chirotherium: Long? = null,
+
+    val decardinalize: Long? = null,
+    val discouragement: Long? = null,
+    val disdiapason: String? = null,
+    val doitrified: Long? = null,
+    val hexaspermous: Long? = null,
+    val homocerc: Boolean? = null,
+    val insinking: Long? = null,
+    val loathfulness: Long? = null,
+    val miasmatical: Long? = null,
+    val neurofibril: Long? = null,
+    val nonbookish: Any? = null,
+    val phonendoscope: Long? = null,
+    val pilferment: Long? = null,
+    val predismissory: Long? = null,
+    val preinscription: Long? = null,
+    val quotative: Long? = null,
+    val sienna: Long? = null,
+    val thorax: Long? = null,
+    val yachting: Long? = null,
+
+    @get:JsonProperty("Zipper")@field:JsonProperty("Zipper")
+    val zipper: Long? = null
+)
+
+sealed class Piccadilly {
+    class DoubleValue(val value: Double) : Piccadilly()
+    class StringValue(val value: String) : Piccadilly()
+    class NullValue()                    : Piccadilly()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue -> this.value
+        is StringValue -> this.value
+        is NullValue   -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Piccadilly = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            null                                   -> NullValue()
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Piffler {
+    class MonaziteClassValue(val value: MonaziteClass) : Piffler()
+    class NullArrayValue(val value: List<Any?>)        : Piffler()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is MonaziteClassValue -> this.value
+        is NullArrayValue     -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Piffler = when (jn) {
+            is ObjectNode -> MonaziteClassValue(mapper.treeToValue(jn))
+            is ArrayNode  -> NullArrayValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Pithful {
+    class BoolValue(val value: Boolean) : Pithful()
+    class IntegerValue(val value: Long) : Pithful()
+    class NullValue()                   : Pithful()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue    -> this.value
+        is IntegerValue -> this.value
+        is NullValue    -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Pithful = when (jn) {
+            is BooleanNode          -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            null                    -> NullValue()
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Placuntiti {
+    class IntegerMapValue(val value: Map<String, Long>) : Placuntiti()
+    class IntegerValue(val value: Long)                 : Placuntiti()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerMapValue -> this.value
+        is IntegerValue    -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Placuntiti = when (jn) {
+            is ObjectNode           -> IntegerMapValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Plectopterous {
+    class DoubleValue(val value: Double)                : Plectopterous()
+    class IntegerMapValue(val value: Map<String, Long>) : Plectopterous()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue     -> this.value
+        is IntegerMapValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Plectopterous = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> IntegerMapValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class Pneumocele (
+    @get:JsonProperty("Carbonarism")@field:JsonProperty("Carbonarism")
+    val carbonarism: Any? = null,
+
+    val catharticalness: Double? = null,
+
+    @get:JsonProperty("Chirotherium")@field:JsonProperty("Chirotherium")
+    val chirotherium: Long? = null,
+
+    val cineolic: Any? = null,
+    val cobbly: Any? = null,
+    val conchyliferous: Any? = null,
+    val congregation: Any? = null,
+    val disdiapason: String? = null,
+    val enterotomy: Any? = null,
+    val entophytal: Any? = null,
+    val fewtrils: Any? = null,
+    val herem: Any? = null,
+    val homocerc: Boolean? = null,
+
+    @get:JsonProperty("Koniga")@field:JsonProperty("Koniga")
+    val koniga: Any? = null,
+
+    val meticulosity: Any? = null,
+
+    @get:JsonProperty("Micky")@field:JsonProperty("Micky")
+    val micky: Any? = null,
+
+    val mismarriage: Any? = null,
+    val neurotrophic: Any? = null,
+    val nonbookish: Any? = null,
+    val persuasively: Any? = null,
+    val replaceable: Any? = null,
+    val silex: Any? = null,
+    val taillight: Any? = null,
+    val unjealous: Any? = null,
+    val visitorial: Any? = null
+)
+
+sealed class Poliorcetic {
+    class BoolValue(val value: Boolean)                : Poliorcetic()
+    class MonaziteClassValue(val value: MonaziteClass) : Poliorcetic()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue          -> this.value
+        is MonaziteClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Poliorcetic = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ObjectNode  -> MonaziteClassValue(mapper.treeToValue(jn))
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Poormaster {
+    class IntegerArrayValue(val value: List<Long>)      : Poormaster()
+    class IntegerMapValue(val value: Map<String, Long>) : Poormaster()
+    class NullValue()                                   : Poormaster()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerArrayValue -> this.value
+        is IntegerMapValue   -> this.value
+        is NullValue         -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Poormaster = when (jn) {
+            is ArrayNode  -> IntegerArrayValue(mapper.treeToValue(jn))
+            is ObjectNode -> IntegerMapValue(mapper.treeToValue(jn))
+            null          -> NullValue()
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class PotwhiskyElement {
+    class IntegerValue(val value: Long)                  : PotwhiskyElement()
+    class PotwhiskyClassValue(val value: PotwhiskyClass) : PotwhiskyElement()
+    class NullValue()                                    : PotwhiskyElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerValue        -> this.value
+        is PotwhiskyClassValue -> this.value
+        is NullValue           -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): PotwhiskyElement = when (jn) {
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is ObjectNode           -> PotwhiskyClassValue(mapper.treeToValue(jn))
+            null                    -> NullValue()
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class PotwhiskyClass (
+    val arciform: Any? = null,
+    val cresolin: Any? = null,
+    val disheartener: Any? = null,
+    val disproportionable: Any? = null,
+
+    @get:JsonProperty("Euchorda")@field:JsonProperty("Euchorda")
+    val euchorda: Any? = null,
+
+    val ferryway: Any? = null,
+    val filamentiferous: Any? = null,
+    val flemish: Any? = null,
+    val forgainst: Any? = null,
+    val grainering: Any? = null,
+    val irrevoluble: Any? = null,
+    val kindredship: Any? = null,
+    val pinguitudinous: Any? = null,
+    val simpletonic: Any? = null,
+    val singsong: Any? = null,
+    val submergement: Any? = null,
+    val supraoesophagal: Any? = null,
+    val thrashel: Any? = null,
+    val tyremesis: Any? = null,
+
+    @get:JsonProperty("Yoruba")@field:JsonProperty("Yoruba")
+    val yoruba: Any? = null
+)
+
+sealed class Practicalizer {
+    class MonaziteClassValue(val value: MonaziteClass) : Practicalizer()
+    class NullArrayValue(val value: List<Any?>)        : Practicalizer()
+    class StringValue(val value: String)               : Practicalizer()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is MonaziteClassValue -> this.value
+        is NullArrayValue     -> this.value
+        is StringValue        -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Practicalizer = when (jn) {
+            is ObjectNode -> MonaziteClassValue(mapper.treeToValue(jn))
+            is ArrayNode  -> NullArrayValue(mapper.treeToValue(jn))
+            is TextNode   -> StringValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class PrefreshmanElement {
+    class NullArrayValue(val value: List<Any?>)              : PrefreshmanElement()
+    class PrefreshmanClassValue(val value: PrefreshmanClass) : PrefreshmanElement()
+    class StringValue(val value: String)                     : PrefreshmanElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is NullArrayValue        -> this.value
+        is PrefreshmanClassValue -> this.value
+        is StringValue           -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): PrefreshmanElement = when (jn) {
+            is ArrayNode  -> NullArrayValue(mapper.treeToValue(jn))
+            is ObjectNode -> PrefreshmanClassValue(mapper.treeToValue(jn))
+            is TextNode   -> StringValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class PrefreshmanClass (
+    val azorubine: Any? = null,
+    val choroiditis: Any? = null,
+    val coagulatory: Any? = null,
+    val cyclorama: Any? = null,
+
+    @get:JsonProperty("Dolphus")@field:JsonProperty("Dolphus")
+    val dolphus: Any? = null,
+
+    val duckhearted: Any? = null,
+
+    @get:JsonProperty("Ficus")@field:JsonProperty("Ficus")
+    val ficus: Any? = null,
+
+    @get:JsonProperty("Gemaric")@field:JsonProperty("Gemaric")
+    val gemaric: Any? = null,
+
+    val jugation: Any? = null,
+    val myoliposis: Any? = null,
+    val nonnomination: Any? = null,
+    val palay: Any? = null,
+    val pentactinal: Any? = null,
+
+    @get:JsonProperty("Phaet")@field:JsonProperty("Phaet")
+    val phaet: Any? = null,
+
+    val piquant: Any? = null,
+    val registration: Any? = null,
+    val remancipation: Any? = null,
+    val scutatiform: Any? = null,
+    val theodolite: Any? = null,
+    val underward: Any? = null
+)
+
+sealed class Prehensility {
+    class BoolValue(val value: Boolean)                : Prehensility()
+    class MonaziteClassValue(val value: MonaziteClass) : Prehensility()
+    class NullArrayValue(val value: List<Any?>)        : Prehensility()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue          -> this.value
+        is MonaziteClassValue -> this.value
+        is NullArrayValue     -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Prehensility = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ObjectNode  -> MonaziteClassValue(mapper.treeToValue(jn))
+            is ArrayNode   -> NullArrayValue(mapper.treeToValue(jn))
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Prevoidance {
+    class IntegerArrayValue(val value: List<Long>)     : Prevoidance()
+    class IntegerValue(val value: Long)                : Prevoidance()
+    class MonaziteClassValue(val value: MonaziteClass) : Prevoidance()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerArrayValue  -> this.value
+        is IntegerValue       -> this.value
+        is MonaziteClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Prevoidance = when (jn) {
+            is ArrayNode            -> IntegerArrayValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is ObjectNode           -> MonaziteClassValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Protext {
+    class BoolValue(val value: Boolean)                : Protext()
+    class IntegerArrayValue(val value: List<Long>)     : Protext()
+    class MonaziteClassValue(val value: MonaziteClass) : Protext()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue          -> this.value
+        is IntegerArrayValue  -> this.value
+        is MonaziteClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Protext = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ArrayNode   -> IntegerArrayValue(mapper.treeToValue(jn))
+            is ObjectNode  -> MonaziteClassValue(mapper.treeToValue(jn))
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
diff --git a/head/kotlin-jackson/test/inputs/json/priority/combinations4.json/default/TopLevel.kt b/head/kotlin-jackson/test/inputs/json/priority/combinations4.json/default/TopLevel.kt
new file mode 100644
index 0000000..5acbd03
--- /dev/null
+++ b/head/kotlin-jackson/test/inputs/json/priority/combinations4.json/default/TopLevel.kt
@@ -0,0 +1,1585 @@
+// 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.*
+
+
+@Suppress("UNCHECKED_CAST")
+private fun <T> ObjectMapper.convert(k: kotlin.reflect.KClass<*>, fromJson: (JsonNode) -> T, toJson: (T) -> String, isUnion: Boolean = false) = registerModule(SimpleModule().apply {
+    addSerializer(k.java as Class<T>, object : StdSerializer<T>(k.java as Class<T>) {
+            override fun serialize(value: T, gen: JsonGenerator, provider: SerializerProvider) = gen.writeRawValue(toJson(value))
+    })
+    addDeserializer(k.java as Class<T>, object : StdDeserializer<T>(k.java as Class<T>) {
+            override fun deserialize(p: JsonParser, ctxt: DeserializationContext) = fromJson(p.readValueAsTree())
+    })
+})
+
+val mapper = jacksonObjectMapper().apply {
+    propertyNamingStrategy = PropertyNamingStrategy.LOWER_CAMEL_CASE
+    setSerializationInclusion(JsonInclude.Include.NON_NULL)
+    convert(Protrusive::class,           { Protrusive.fromJson(it) },           { it.toJson() }, true)
+    convert(PulpitismElement::class,     { PulpitismElement.fromJson(it) },     { it.toJson() }, true)
+    convert(PyodermiaElement::class,     { PyodermiaElement.fromJson(it) },     { it.toJson() }, true)
+    convert(QuebrachineElement::class,   { QuebrachineElement.fromJson(it) },   { it.toJson() }, true)
+    convert(Querier::class,              { Querier.fromJson(it) },              { it.toJson() }, true)
+    convert(Rebarbative::class,          { Rebarbative.fromJson(it) },          { it.toJson() }, true)
+    convert(Retrocervical::class,        { Retrocervical.fromJson(it) },        { it.toJson() }, true)
+    convert(Revert::class,               { Revert.fromJson(it) },               { it.toJson() }, true)
+    convert(RewriteElement::class,       { RewriteElement.fromJson(it) },       { it.toJson() }, true)
+    convert(Saccoderm::class,            { Saccoderm.fromJson(it) },            { it.toJson() }, true)
+    convert(SantirElement::class,        { SantirElement.fromJson(it) },        { it.toJson() }, true)
+    convert(Saprophilous::class,         { Saprophilous.fromJson(it) },         { it.toJson() }, true)
+    convert(SaxtenElement::class,        { SaxtenElement.fromJson(it) },        { it.toJson() }, true)
+    convert(Scoffer::class,              { Scoffer.fromJson(it) },              { it.toJson() }, true)
+    convert(Scrampum::class,             { Scrampum.fromJson(it) },             { it.toJson() }, true)
+    convert(Serpentinic::class,          { Serpentinic.fromJson(it) },          { it.toJson() }, true)
+    convert(Shadowable::class,           { Shadowable.fromJson(it) },           { it.toJson() }, true)
+    convert(SisteringElement::class,     { SisteringElement.fromJson(it) },     { it.toJson() }, true)
+    convert(Stagmometer::class,          { Stagmometer.fromJson(it) },          { it.toJson() }, true)
+    convert(Stimulability::class,        { Stimulability.fromJson(it) },        { it.toJson() }, true)
+    convert(Strangleable::class,         { Strangleable.fromJson(it) },         { it.toJson() }, true)
+    convert(StrenuosityElement::class,   { StrenuosityElement.fromJson(it) },   { it.toJson() }, true)
+    convert(Tabaxir::class,              { Tabaxir.fromJson(it) },              { it.toJson() }, true)
+    convert(Talpiform::class,            { Talpiform.fromJson(it) },            { it.toJson() }, true)
+    convert(Thwack::class,               { Thwack.fromJson(it) },               { it.toJson() }, true)
+    convert(Tortricine::class,           { Tortricine.fromJson(it) },           { it.toJson() }, true)
+    convert(TruantcyElement::class,      { TruantcyElement.fromJson(it) },      { it.toJson() }, true)
+    convert(Unbeginning::class,          { Unbeginning.fromJson(it) },          { it.toJson() }, true)
+    convert(Undesirability::class,       { Undesirability.fromJson(it) },       { it.toJson() }, true)
+    convert(Unerasing::class,            { Unerasing.fromJson(it) },            { it.toJson() }, true)
+    convert(Unguentarium::class,         { Unguentarium.fromJson(it) },         { it.toJson() }, true)
+    convert(UnimpeachablyElement::class, { UnimpeachablyElement.fromJson(it) }, { it.toJson() }, true)
+    convert(Unmortgaged::class,          { Unmortgaged.fromJson(it) },          { it.toJson() }, true)
+    convert(Unobstructed::class,         { Unobstructed.fromJson(it) },         { it.toJson() }, true)
+    convert(Unreceptivity::class,        { Unreceptivity.fromJson(it) },        { it.toJson() }, true)
+    convert(Unsatisfactoriness::class,   { Unsatisfactoriness.fromJson(it) },   { it.toJson() }, true)
+    convert(UnstressedElement::class,    { UnstressedElement.fromJson(it) },    { it.toJson() }, true)
+    convert(Untasked::class,             { Untasked.fromJson(it) },             { it.toJson() }, true)
+    convert(Unvarying::class,            { Unvarying.fromJson(it) },            { it.toJson() }, true)
+    convert(Vehemently::class,           { Vehemently.fromJson(it) },           { it.toJson() }, true)
+    convert(Whitepot::class,             { Whitepot.fromJson(it) },             { it.toJson() }, true)
+    convert(WrothyElement::class,        { WrothyElement.fromJson(it) },        { it.toJson() }, true)
+}
+
+data class TopLevel (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val protrusive: List<Protrusive>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val pulpitism: List<PulpitismElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val pyodermia: List<PyodermiaElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val quebrachine: List<QuebrachineElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val querier: List<Querier>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val rebarbative: List<Rebarbative>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val reimagine: List<Reimagine>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val ressaut: Ressaut,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val retrocervical: List<Retrocervical>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val revert: List<Revert>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val rewrite: List<RewriteElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val saccoderm: List<Saccoderm>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val santir: List<SantirElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val saprophilous: List<Saprophilous>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val saxten: List<SaxtenElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val scatty: List<Scatty?>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val scoffer: List<Scoffer>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val scrampum: List<Scrampum>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val semantic: Double,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val serpentinic: List<Serpentinic>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val shadowable: List<Shadowable>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val sistering: List<SisteringElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val staghunting: List<Staghunting>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val stagmometer: List<Stagmometer>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val stimulability: List<Stimulability>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val strangleable: List<Strangleable>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val strenuosity: List<StrenuosityElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val tabaxir: List<Tabaxir>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val talpiform: List<Talpiform>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val thwack: List<Thwack>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val to: List<Double?>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val tortricine: List<Tortricine>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val truantcy: List<TruantcyElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val turgesce: List<String>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val unbeginning: List<Unbeginning>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val underdunged: List<Double>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val undesirability: List<Undesirability>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val unerasing: List<Unerasing>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val unguentarium: List<Unguentarium>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val unimpeachably: List<UnimpeachablyElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val unmortgaged: List<Unmortgaged>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val unobstructed: List<Unobstructed>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val unreceptivity: List<Unreceptivity>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val unsatisfactoriness: List<Unsatisfactoriness>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val unsecurity: List<Long>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val unstressed: List<UnstressedElement>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val untasked: List<Untasked>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val unvarying: List<Unvarying>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val vehemently: List<Vehemently>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val warriorship: Map<String, Boolean>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val whitepot: List<Whitepot>,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val wrothy: List<WrothyElement>
+) {
+    fun toJson() = mapper.writeValueAsString(this)
+
+    companion object {
+        fun fromJson(json: String) = mapper.readValue<TopLevel>(json)
+    }
+}
+
+sealed class Protrusive {
+    class DoubleValue(val value: Double)          : Protrusive()
+    class UnionArrayValue(val value: List<Long?>) : Protrusive()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue     -> this.value
+        is UnionArrayValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Protrusive = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> UnionArrayValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class PulpitismElement {
+    class DoubleValue(val value: Double)                 : PulpitismElement()
+    class IntegerArrayValue(val value: List<Long>)       : PulpitismElement()
+    class PulpitismClassValue(val value: PulpitismClass) : PulpitismElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue         -> this.value
+        is IntegerArrayValue   -> this.value
+        is PulpitismClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): PulpitismElement = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> IntegerArrayValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> PulpitismClassValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class PulpitismClass (
+    val abnet: Any? = null,
+    val buckhorn: Any? = null,
+    val calciform: Any? = null,
+    val chelophore: Any? = null,
+    val cogitation: Any? = null,
+    val decreeable: Any? = null,
+    val despicable: Any? = null,
+
+    @get:JsonProperty("isodiazo")@field:JsonProperty("isodiazo")
+    val isodiazo: Any? = null,
+
+    val jadedly: Any? = null,
+    val leptochlorite: Any? = null,
+    val nursling: Any? = null,
+    val palamedean: Any? = null,
+    val photoheliograph: Any? = null,
+    val pipewood: Any? = null,
+    val roberd: Any? = null,
+    val statable: Any? = null,
+    val superassume: Any? = null,
+    val syllabe: Any? = null,
+    val toughhead: Any? = null,
+    val underburn: Any? = null
+)
+
+sealed class PyodermiaElement {
+    class IntegerValue(val value: Long)                  : PyodermiaElement()
+    class PyodermiaClassValue(val value: PyodermiaClass) : PyodermiaElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerValue        -> this.value
+        is PyodermiaClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): PyodermiaElement = when (jn) {
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is ObjectNode           -> PyodermiaClassValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class PyodermiaClass (
+    val aphoristically: Any? = null,
+    val apophyllous: Any? = null,
+    val cognize: Any? = null,
+    val dermonosology: Any? = null,
+
+    @get:JsonProperty("Gyppo")@field:JsonProperty("Gyppo")
+    val gyppo: Any? = null,
+
+    val ither: Any? = null,
+    val juglandaceous: Any? = null,
+    val litho: Any? = null,
+    val macropterous: Any? = null,
+    val photographer: Any? = null,
+    val romancing: Any? = null,
+    val rumness: Any? = null,
+    val somniloquist: Any? = null,
+    val stressfully: Any? = null,
+    val tactically: Any? = null,
+    val tracheophony: Any? = null,
+    val unappositely: Any? = null,
+    val unclothedly: Any? = null,
+    val unimplied: Any? = null,
+    val unsyncopated: Any? = null
+)
+
+sealed class QuebrachineElement {
+    class BoolValue(val value: Boolean)                      : QuebrachineElement()
+    class QuebrachineClassValue(val value: QuebrachineClass) : QuebrachineElement()
+    class NullValue()                                        : QuebrachineElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue             -> this.value
+        is QuebrachineClassValue -> this.value
+        is NullValue             -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): QuebrachineElement = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ObjectNode  -> QuebrachineClassValue(mapper.treeToValue(jn))
+            null           -> NullValue()
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class QuebrachineClass (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val catharticalness: Double,
+
+    @get:JsonProperty("Chirotherium", required=true)@field:JsonProperty("Chirotherium", required=true)
+    val chirotherium: Long,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val disdiapason: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val homocerc: Boolean,
+
+    val nonbookish: Any? = null
+)
+
+sealed class Querier {
+    class BoolValue(val value: Boolean)                 : Querier()
+    class IntegerMapValue(val value: Map<String, Long>) : Querier()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue       -> this.value
+        is IntegerMapValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Querier = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ObjectNode  -> IntegerMapValue(mapper.treeToValue(jn))
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Rebarbative {
+    class BoolValue(val value: Boolean)            : Rebarbative()
+    class DoubleValue(val value: Double)           : Rebarbative()
+    class IntegerArrayValue(val value: List<Long>) : Rebarbative()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue         -> this.value
+        is DoubleValue       -> this.value
+        is IntegerArrayValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Rebarbative = when (jn) {
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> IntegerArrayValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class Reimagine (
+    val adducible: Any? = null,
+    val anabolin: Any? = null,
+    val brainy: Any? = null,
+    val catharticalness: Double? = null,
+
+    @get:JsonProperty("Chirotherium")@field:JsonProperty("Chirotherium")
+    val chirotherium: Long? = null,
+
+    val chrysamine: Any? = null,
+    val disdiapason: String? = null,
+    val fluxweed: Any? = null,
+    val glaucine: Any? = null,
+    val grobianism: Any? = null,
+
+    @get:JsonProperty("Hermo")@field:JsonProperty("Hermo")
+    val hermo: Any? = null,
+
+    val hieroglyphist: Any? = null,
+    val homocerc: Boolean? = null,
+    val icteroid: Any? = null,
+    val immortal: Any? = null,
+    val impetulant: Any? = null,
+    val irrigate: Any? = null,
+    val myxedema: Any? = null,
+    val nonbookish: Any? = null,
+    val onyx: Any? = null,
+    val repasser: Any? = null,
+    val septomarginal: Any? = null,
+    val subdie: Any? = null,
+    val tibiometatarsal: Any? = null,
+    val waltzlike: Any? = null
+)
+
+data class Ressaut (
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val apperceptive: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val cuttoo: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val douser: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val drinkproof: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val forementioned: String,
+
+    @get:JsonProperty("Freesia", required=true)@field:JsonProperty("Freesia", required=true)
+    val freesia: String,
+
+    @get:JsonProperty("Genevieve", required=true)@field:JsonProperty("Genevieve", required=true)
+    val genevieve: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val hyperdiabolical: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val hypocone: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val irreverentially: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val jumart: String,
+
+    @get:JsonProperty("Mimosaceae", required=true)@field:JsonProperty("Mimosaceae", required=true)
+    val mimosaceae: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val mollicrush: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val nedder: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val retinasphalt: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val sough: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val steading: String,
+
+    @get:JsonProperty("Theopaschitism", required=true)@field:JsonProperty("Theopaschitism", required=true)
+    val theopaschitism: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val undurableness: String,
+
+    @get:JsonProperty(required=true)@field:JsonProperty(required=true)
+    val unmingleable: String
+)
+
+sealed class Retrocervical {
+    class IntegerValue(val value: Long)           : Retrocervical()
+    class UnionArrayValue(val value: List<Long?>) : Retrocervical()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerValue    -> this.value
+        is UnionArrayValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Retrocervical = when (jn) {
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is ArrayNode            -> UnionArrayValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Revert {
+    class BoolValue(val value: Boolean)  : Revert()
+    class StringValue(val value: String) : Revert()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue   -> this.value
+        is StringValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Revert = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is TextNode    -> StringValue(mapper.treeToValue(jn))
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class RewriteElement {
+    class DoubleValue(val value: Double)             : RewriteElement()
+    class NullArrayValue(val value: List<Any?>)      : RewriteElement()
+    class RewriteClassValue(val value: RewriteClass) : RewriteElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue       -> this.value
+        is NullArrayValue    -> this.value
+        is RewriteClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): RewriteElement = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> NullArrayValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> RewriteClassValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class RewriteClass (
+    val accountancy: Any? = null,
+    val cacotrophic: Any? = null,
+    val contest: Any? = null,
+    val couthily: Any? = null,
+    val falculate: Any? = null,
+    val foreseize: Any? = null,
+
+    @get:JsonProperty("Hyades")@field:JsonProperty("Hyades")
+    val hyades: Any? = null,
+
+    val lemnad: Any? = null,
+    val monotheistically: Any? = null,
+    val nonflying: Any? = null,
+
+    @get:JsonProperty("Ptenoglossa")@field:JsonProperty("Ptenoglossa")
+    val ptenoglossa: Any? = null,
+
+    val repatch: Any? = null,
+    val rodman: Any? = null,
+    val strung: Any? = null,
+    val titmal: Any? = null,
+    val twalpennyworth: Any? = null,
+    val unblamable: Any? = null,
+    val vertical: Any? = null,
+
+    @get:JsonProperty("Whiggification")@field:JsonProperty("Whiggification")
+    val whiggification: Any? = null,
+
+    val yardman: Any? = null
+)
+
+sealed class Saccoderm {
+    class IntegerArrayValue(val value: List<Long>) : Saccoderm()
+    class StringValue(val value: String)           : Saccoderm()
+    class NullValue()                              : Saccoderm()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerArrayValue -> this.value
+        is StringValue       -> this.value
+        is NullValue         -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Saccoderm = when (jn) {
+            is ArrayNode -> IntegerArrayValue(mapper.treeToValue(jn))
+            is TextNode  -> StringValue(mapper.treeToValue(jn))
+            null         -> NullValue()
+            else         -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class SantirElement {
+    class DoubleValue(val value: Double)           : SantirElement()
+    class SantirClassValue(val value: SantirClass) : SantirElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue      -> this.value
+        is SantirClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): SantirElement = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> SantirClassValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class SantirClass (
+    val admiredly: Any? = null,
+    val demicaponier: Any? = null,
+    val epitympanic: Any? = null,
+    val investitor: Any? = null,
+    val lupiform: Any? = null,
+    val monoflagellate: Any? = null,
+    val paleoethnic: Any? = null,
+    val prediscountable: Any? = null,
+    val rhetoricals: Any? = null,
+    val roomth: Any? = null,
+    val saccharose: Any? = null,
+    val septonasal: Any? = null,
+    val serpenticide: Any? = null,
+    val setarious: Any? = null,
+    val spaework: Any? = null,
+    val stylite: Any? = null,
+
+    @get:JsonProperty("Suessiones")@field:JsonProperty("Suessiones")
+    val suessiones: Any? = null,
+
+    val timelily: Any? = null,
+    val unprofaned: Any? = null,
+    val vorticular: Any? = null
+)
+
+sealed class Saprophilous {
+    class IntegerMapValue(val value: Map<String, Long>) : Saprophilous()
+    class StringValue(val value: String)                : Saprophilous()
+    class NullValue()                                   : Saprophilous()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerMapValue -> this.value
+        is StringValue     -> this.value
+        is NullValue       -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Saprophilous = when (jn) {
+            is ObjectNode -> IntegerMapValue(mapper.treeToValue(jn))
+            is TextNode   -> StringValue(mapper.treeToValue(jn))
+            null          -> NullValue()
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class SaxtenElement {
+    class SaxtenClassValue(val value: SaxtenClass) : SaxtenElement()
+    class StringValue(val value: String)           : SaxtenElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is SaxtenClassValue -> this.value
+        is StringValue      -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): SaxtenElement = when (jn) {
+            is ObjectNode -> SaxtenClassValue(mapper.treeToValue(jn))
+            is TextNode   -> StringValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class SaxtenClass (
+    val algarrobilla: Any? = null,
+    val bowgrace: Any? = null,
+    val catharticalness: Double? = null,
+
+    @get:JsonProperty("Centaurid")@field:JsonProperty("Centaurid")
+    val centaurid: Any? = null,
+
+    @get:JsonProperty("Chirotherium")@field:JsonProperty("Chirotherium")
+    val chirotherium: Long? = null,
+
+    val disdiapason: String? = null,
+    val flix: Any? = null,
+    val germanely: Any? = null,
+    val homocerc: Boolean? = null,
+    val inhume: Any? = null,
+    val lepidote: Any? = null,
+    val megalochirous: Any? = null,
+    val ninepenny: Any? = null,
+    val nonbookish: Any? = null,
+    val nondeist: Any? = null,
+    val nymphaeaceous: Any? = null,
+    val parietofrontal: Any? = null,
+    val sancyite: Any? = null,
+    val subjectivist: Any? = null,
+    val tibiad: Any? = null,
+    val transonic: Any? = null,
+    val tripetalous: Any? = null,
+    val trunchman: Any? = null,
+    val urger: Any? = null,
+    val withdrawnness: Any? = null
+)
+
+data class Scatty (
+    val aeriferous: Any? = null,
+    val antical: Any? = null,
+    val antighostism: Any? = null,
+    val arcanum: Any? = null,
+    val autotrophy: Any? = null,
+    val baronial: Any? = null,
+    val caffeine: Any? = null,
+    val gorgoniacean: Any? = null,
+    val heroical: Any? = null,
+    val hydropical: Any? = null,
+    val mechanology: Any? = null,
+    val musicopoetic: Any? = null,
+    val officiality: Any? = null,
+    val oftentimes: Any? = null,
+    val ophthalmotonometer: Any? = null,
+    val reflectively: Any? = null,
+    val springer: Any? = null,
+
+    @get:JsonProperty("Tabasco")@field:JsonProperty("Tabasco")
+    val tabasco: Any? = null,
+
+    val teleianthous: Any? = null,
+    val uncombated: Any? = null
+)
+
+sealed class Scoffer {
+    class IntegerMapValue(val value: Map<String, Long>) : Scoffer()
+    class NullArrayValue(val value: List<Any?>)         : Scoffer()
+    class NullValue()                                   : Scoffer()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerMapValue -> this.value
+        is NullArrayValue  -> this.value
+        is NullValue       -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Scoffer = when (jn) {
+            is ObjectNode -> IntegerMapValue(mapper.treeToValue(jn))
+            is ArrayNode  -> NullArrayValue(mapper.treeToValue(jn))
+            null          -> NullValue()
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Scrampum {
+    class BoolValue(val value: Boolean)            : Scrampum()
+    class IntegerArrayValue(val value: List<Long>) : Scrampum()
+    class NullValue()                              : Scrampum()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue         -> this.value
+        is IntegerArrayValue -> this.value
+        is NullValue         -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Scrampum = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ArrayNode   -> IntegerArrayValue(mapper.treeToValue(jn))
+            null           -> NullValue()
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Serpentinic {
+    class DoubleValue(val value: Double)           : Serpentinic()
+    class IntegerArrayValue(val value: List<Long>) : Serpentinic()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue       -> this.value
+        is IntegerArrayValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Serpentinic = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> IntegerArrayValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Shadowable {
+    class BoolValue(val value: Boolean)           : Shadowable()
+    class UnionArrayValue(val value: List<Long?>) : Shadowable()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue       -> this.value
+        is UnionArrayValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Shadowable = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ArrayNode   -> UnionArrayValue(mapper.treeToValue(jn))
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class SisteringElement {
+    class IntegerValue(val value: Long)                  : SisteringElement()
+    class NullArrayValue(val value: List<Any?>)          : SisteringElement()
+    class SisteringClassValue(val value: SisteringClass) : SisteringElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerValue        -> this.value
+        is NullArrayValue      -> this.value
+        is SisteringClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): SisteringElement = when (jn) {
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is ArrayNode            -> NullArrayValue(mapper.treeToValue(jn))
+            is ObjectNode           -> SisteringClassValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class SisteringClass (
+    val amphicarpic: Any? = null,
+
+    @get:JsonProperty("Chianti")@field:JsonProperty("Chianti")
+    val chianti: Any? = null,
+
+    val frigorific: Any? = null,
+
+    @get:JsonProperty("Haplomi")@field:JsonProperty("Haplomi")
+    val haplomi: Any? = null,
+
+    val hyperkinesis: Any? = null,
+    val laudable: Any? = null,
+    val madwoman: Any? = null,
+    val maimedly: Any? = null,
+
+    @get:JsonProperty("Micropterygidae")@field:JsonProperty("Micropterygidae")
+    val micropterygidae: Any? = null,
+
+    val microrhabdus: Any? = null,
+    val nondense: Any? = null,
+    val phlebemphraxis: Any? = null,
+    val redsear: Any? = null,
+    val schismatical: Any? = null,
+    val tartryl: Any? = null,
+    val unabhorred: Any? = null,
+    val undeliberateness: Any? = null,
+    val unmixable: Any? = null,
+    val untruckling: Any? = null,
+    val vineal: Any? = null
+)
+
+data class Staghunting (
+    val calorimetric: Long? = null,
+    val canid: Long? = null,
+    val catharticalness: Double? = null,
+
+    @get:JsonProperty("Chirotherium")@field:JsonProperty("Chirotherium")
+    val chirotherium: Long? = null,
+
+    val disdiapason: String? = null,
+    val ditriglyphic: Long? = null,
+    val floriferousness: Long? = null,
+    val gamelike: Long? = null,
+    val grig: Long? = null,
+    val homocerc: Boolean? = null,
+    val interloan: Long? = null,
+    val lithotomy: Long? = null,
+    val loric: Long? = null,
+    val membranocoriaceous: Long? = null,
+    val membranogenic: Long? = null,
+    val nonbookish: Any? = null,
+    val overtrump: Long? = null,
+    val scotino: Long? = null,
+    val seasonable: Long? = null,
+    val sephen: Long? = null,
+    val stigmarioid: Long? = null,
+    val tired: Long? = null,
+    val trifid: Long? = null,
+    val undefeatedly: Long? = null,
+    val ungirlish: Long? = null
+)
+
+sealed class Stagmometer {
+    class StringValue(val value: String)          : Stagmometer()
+    class UnionArrayValue(val value: List<Long?>) : Stagmometer()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is StringValue     -> this.value
+        is UnionArrayValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Stagmometer = when (jn) {
+            is TextNode  -> StringValue(mapper.treeToValue(jn))
+            is ArrayNode -> UnionArrayValue(mapper.treeToValue(jn))
+            else         -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Stimulability {
+    class BoolValue(val value: Boolean)                 : Stimulability()
+    class IntegerMapValue(val value: Map<String, Long>) : Stimulability()
+    class IntegerValue(val value: Long)                 : Stimulability()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue       -> this.value
+        is IntegerMapValue -> this.value
+        is IntegerValue    -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Stimulability = when (jn) {
+            is BooleanNode          -> BoolValue(mapper.treeToValue(jn))
+            is ObjectNode           -> IntegerMapValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Strangleable {
+    class DoubleValue(val value: Double)        : Strangleable()
+    class NullArrayValue(val value: List<Any?>) : Strangleable()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue    -> this.value
+        is NullArrayValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Strangleable = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> NullArrayValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class StrenuosityElement {
+    class NullArrayValue(val value: List<Any?>)              : StrenuosityElement()
+    class StrenuosityClassValue(val value: StrenuosityClass) : StrenuosityElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is NullArrayValue        -> this.value
+        is StrenuosityClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): StrenuosityElement = when (jn) {
+            is ArrayNode  -> NullArrayValue(mapper.treeToValue(jn))
+            is ObjectNode -> StrenuosityClassValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class StrenuosityClass (
+    val bliss: Long? = null,
+    val buccate: Long? = null,
+    val bulletproof: Long? = null,
+    val catharticalness: Double? = null,
+
+    @get:JsonProperty("Chirotherium")@field:JsonProperty("Chirotherium")
+    val chirotherium: Long? = null,
+
+    val crumblingness: Long? = null,
+    val disdiapason: String? = null,
+    val engagedly: Long? = null,
+    val fightable: Long? = null,
+    val hoariness: Long? = null,
+    val homocerc: Boolean? = null,
+    val hypopodium: Long? = null,
+    val luxurist: Long? = null,
+    val mechanician: Long? = null,
+    val nonbookish: Any? = null,
+
+    @get:JsonProperty("Onopordon")@field:JsonProperty("Onopordon")
+    val onopordon: Long? = null,
+
+    val podgily: Long? = null,
+    val reformableness: Long? = null,
+    val scatterbrains: Long? = null,
+    val seminuria: Long? = null,
+
+    @get:JsonProperty("Sodomite")@field:JsonProperty("Sodomite")
+    val sodomite: Long? = null,
+
+    val tramp: Long? = null,
+    val undueness: Long? = null,
+    val worthily: Long? = null,
+
+    @get:JsonProperty("Yankeeist")@field:JsonProperty("Yankeeist")
+    val yankeeist: Long? = null
+)
+
+sealed class Tabaxir {
+    class BoolValue(val value: Boolean)  : Tabaxir()
+    class DoubleValue(val value: Double) : Tabaxir()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue   -> this.value
+        is DoubleValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Tabaxir = when (jn) {
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Talpiform {
+    class DoubleValue(val value: Double)                     : Talpiform()
+    class QuebrachineClassValue(val value: QuebrachineClass) : Talpiform()
+    class NullValue()                                        : Talpiform()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue           -> this.value
+        is QuebrachineClassValue -> this.value
+        is NullValue             -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Talpiform = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> QuebrachineClassValue(mapper.treeToValue(jn))
+            null                                   -> NullValue()
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Thwack {
+    class BoolValue(val value: Boolean)                      : Thwack()
+    class DoubleValue(val value: Double)                     : Thwack()
+    class QuebrachineClassValue(val value: QuebrachineClass) : Thwack()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue             -> this.value
+        is DoubleValue           -> this.value
+        is QuebrachineClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Thwack = when (jn) {
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> QuebrachineClassValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Tortricine {
+    class QuebrachineClassValue(val value: QuebrachineClass) : Tortricine()
+    class UnionArrayValue(val value: List<Long?>)            : Tortricine()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is QuebrachineClassValue -> this.value
+        is UnionArrayValue       -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Tortricine = when (jn) {
+            is ObjectNode -> QuebrachineClassValue(mapper.treeToValue(jn))
+            is ArrayNode  -> UnionArrayValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class TruantcyElement {
+    class BoolValue(val value: Boolean)                : TruantcyElement()
+    class TruantcyClassValue(val value: TruantcyClass) : TruantcyElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue          -> this.value
+        is TruantcyClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): TruantcyElement = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ObjectNode  -> TruantcyClassValue(mapper.treeToValue(jn))
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class TruantcyClass (
+    val alfiona: Any? = null,
+    val ascaridiasis: Any? = null,
+    val bungey: Any? = null,
+    val catharticalness: Double? = null,
+    val ceroxyle: Any? = null,
+
+    @get:JsonProperty("Chirotherium")@field:JsonProperty("Chirotherium")
+    val chirotherium: Long? = null,
+
+    val chorology: Any? = null,
+    val disdiapason: String? = null,
+    val enmarble: Any? = null,
+
+    @get:JsonProperty("Epeira")@field:JsonProperty("Epeira")
+    val epeira: Any? = null,
+
+    @get:JsonProperty("Eurylaimi")@field:JsonProperty("Eurylaimi")
+    val eurylaimi: Any? = null,
+
+    val germination: Any? = null,
+    val hallelujah: Any? = null,
+    val homocerc: Boolean? = null,
+    val lev: Any? = null,
+    val mouthing: Any? = null,
+    val nonbookish: Any? = null,
+    val philliloo: Any? = null,
+    val planetal: Any? = null,
+    val poney: Any? = null,
+    val punctualist: Any? = null,
+    val returnlessly: Any? = null,
+    val skelder: Any? = null,
+    val windwaywardly: Any? = null,
+
+    @get:JsonProperty("Yuman")@field:JsonProperty("Yuman")
+    val yuman: Any? = null
+)
+
+sealed class Unbeginning {
+    class IntegerMapValue(val value: Map<String, Long>) : Unbeginning()
+    class NullArrayValue(val value: List<Any?>)         : Unbeginning()
+    class StringValue(val value: String)                : Unbeginning()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerMapValue -> this.value
+        is NullArrayValue  -> this.value
+        is StringValue     -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Unbeginning = when (jn) {
+            is ObjectNode -> IntegerMapValue(mapper.treeToValue(jn))
+            is ArrayNode  -> NullArrayValue(mapper.treeToValue(jn))
+            is TextNode   -> StringValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Undesirability {
+    class IntegerArrayValue(val value: List<Long>)      : Undesirability()
+    class IntegerMapValue(val value: Map<String, Long>) : Undesirability()
+    class StringValue(val value: String)                : Undesirability()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerArrayValue -> this.value
+        is IntegerMapValue   -> this.value
+        is StringValue       -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Undesirability = when (jn) {
+            is ArrayNode  -> IntegerArrayValue(mapper.treeToValue(jn))
+            is ObjectNode -> IntegerMapValue(mapper.treeToValue(jn))
+            is TextNode   -> StringValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Unerasing {
+    class IntegerMapValue(val value: Map<String, Long>) : Unerasing()
+    class IntegerValue(val value: Long)                 : Unerasing()
+    class NullArrayValue(val value: List<Any?>)         : Unerasing()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerMapValue -> this.value
+        is IntegerValue    -> this.value
+        is NullArrayValue  -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Unerasing = when (jn) {
+            is ObjectNode           -> IntegerMapValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is ArrayNode            -> NullArrayValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Unguentarium {
+    class IntegerValue(val value: Long)         : Unguentarium()
+    class NullArrayValue(val value: List<Any?>) : Unguentarium()
+    class NullValue()                           : Unguentarium()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerValue   -> this.value
+        is NullArrayValue -> this.value
+        is NullValue      -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Unguentarium = when (jn) {
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is ArrayNode            -> NullArrayValue(mapper.treeToValue(jn))
+            null                    -> NullValue()
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class UnimpeachablyElement {
+    class BoolValue(val value: Boolean)                          : UnimpeachablyElement()
+    class UnimpeachablyClassValue(val value: UnimpeachablyClass) : UnimpeachablyElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue               -> this.value
+        is UnimpeachablyClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): UnimpeachablyElement = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ObjectNode  -> UnimpeachablyClassValue(mapper.treeToValue(jn))
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class UnimpeachablyClass (
+    val acerin: Long? = null,
+
+    @get:JsonProperty("Bobadil")@field:JsonProperty("Bobadil")
+    val bobadil: Long? = null,
+
+    val catharticalness: Double? = null,
+
+    @get:JsonProperty("Chirotherium")@field:JsonProperty("Chirotherium")
+    val chirotherium: Long? = null,
+
+    val chlorophylligenous: Long? = null,
+    val conversational: Long? = null,
+    val demiowl: Long? = null,
+    val disdiapason: String? = null,
+    val ectorhinal: Long? = null,
+    val gamblesomeness: Long? = null,
+    val homocerc: Boolean? = null,
+    val irrorate: Long? = null,
+    val kindergartening: Long? = null,
+    val lateritic: Long? = null,
+    val mespil: Long? = null,
+    val misconfiguration: Long? = null,
+    val nonbookish: Any? = null,
+    val planometry: Long? = null,
+
+    @get:JsonProperty("Quiina")@field:JsonProperty("Quiina")
+    val quiina: Long? = null,
+
+    @get:JsonProperty("Robert")@field:JsonProperty("Robert")
+    val robert: Long? = null,
+
+    val rot: Long? = null,
+    val subcinctorium: Long? = null,
+    val tussocker: Long? = null,
+    val ultraproud: Long? = null,
+    val unsuggestedness: Long? = null
+)
+
+sealed class Unmortgaged {
+    class DoubleValue(val value: Double)                : Unmortgaged()
+    class IntegerMapValue(val value: Map<String, Long>) : Unmortgaged()
+    class NullValue()                                   : Unmortgaged()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue     -> this.value
+        is IntegerMapValue -> this.value
+        is NullValue       -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Unmortgaged = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> IntegerMapValue(mapper.treeToValue(jn))
+            null                                   -> NullValue()
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Unobstructed {
+    class IntegerValue(val value: Long)                      : Unobstructed()
+    class QuebrachineClassValue(val value: QuebrachineClass) : Unobstructed()
+    class NullValue()                                        : Unobstructed()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerValue          -> this.value
+        is QuebrachineClassValue -> this.value
+        is NullValue             -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Unobstructed = when (jn) {
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is ObjectNode           -> QuebrachineClassValue(mapper.treeToValue(jn))
+            null                    -> NullValue()
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Unreceptivity {
+    class IntegerValue(val value: Long)         : Unreceptivity()
+    class NullArrayValue(val value: List<Any?>) : Unreceptivity()
+    class StringValue(val value: String)        : Unreceptivity()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is IntegerValue   -> this.value
+        is NullArrayValue -> this.value
+        is StringValue    -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Unreceptivity = when (jn) {
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            is ArrayNode            -> NullArrayValue(mapper.treeToValue(jn))
+            is TextNode             -> StringValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Unsatisfactoriness {
+    class BoolValue(val value: Boolean)            : Unsatisfactoriness()
+    class IntegerArrayValue(val value: List<Long>) : Unsatisfactoriness()
+    class IntegerValue(val value: Long)            : Unsatisfactoriness()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue         -> this.value
+        is IntegerArrayValue -> this.value
+        is IntegerValue      -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Unsatisfactoriness = when (jn) {
+            is BooleanNode          -> BoolValue(mapper.treeToValue(jn))
+            is ArrayNode            -> IntegerArrayValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
+            else                    -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class UnstressedElement {
+    class BoolValue(val value: Boolean)                    : UnstressedElement()
+    class StringValue(val value: String)                   : UnstressedElement()
+    class UnstressedClassValue(val value: UnstressedClass) : UnstressedElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue            -> this.value
+        is StringValue          -> this.value
+        is UnstressedClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): UnstressedElement = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is TextNode    -> StringValue(mapper.treeToValue(jn))
+            is ObjectNode  -> UnstressedClassValue(mapper.treeToValue(jn))
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class UnstressedClass (
+    @get:JsonProperty("Alain")@field:JsonProperty("Alain")
+    val alain: Any? = null,
+
+    @get:JsonProperty("Amphirhina")@field:JsonProperty("Amphirhina")
+    val amphirhina: Any? = null,
+
+    val antimachinery: Any? = null,
+    val coldish: Any? = null,
+    val crantara: Any? = null,
+    val distinguishing: Any? = null,
+    val elytroposis: Any? = null,
+    val gentianwort: Any? = null,
+    val heliosis: Any? = null,
+    val instrumental: Any? = null,
+    val introinflection: Any? = null,
+    val kala: Any? = null,
+
+    @get:JsonProperty("Lincolnian")@field:JsonProperty("Lincolnian")
+    val lincolnian: Any? = null,
+
+    val metad: Any? = null,
+
+    @get:JsonProperty("Sarcophilus")@field:JsonProperty("Sarcophilus")
+    val sarcophilus: Any? = null,
+
+    val swingingly: Any? = null,
+    val unconformity: Any? = null,
+    val undecreed: Any? = null,
+    val venerable: Any? = null,
+    val vowellessness: Any? = null
+)
+
+sealed class Untasked {
+    class DoubleValue(val value: Double)                : Untasked()
+    class IntegerMapValue(val value: Map<String, Long>) : Untasked()
+    class NullArrayValue(val value: List<Any?>)         : Untasked()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue     -> this.value
+        is IntegerMapValue -> this.value
+        is NullArrayValue  -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Untasked = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> IntegerMapValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> NullArrayValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Unvarying {
+    class BoolValue(val value: Boolean)                 : Unvarying()
+    class DoubleValue(val value: Double)                : Unvarying()
+    class IntegerMapValue(val value: Map<String, Long>) : Unvarying()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue       -> this.value
+        is DoubleValue     -> this.value
+        is IntegerMapValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Unvarying = when (jn) {
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> IntegerMapValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Vehemently {
+    class BoolValue(val value: Boolean)         : Vehemently()
+    class NullArrayValue(val value: List<Any?>) : Vehemently()
+    class NullValue()                           : Vehemently()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is BoolValue      -> this.value
+        is NullArrayValue -> this.value
+        is NullValue      -> "null"
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Vehemently = when (jn) {
+            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
+            is ArrayNode   -> NullArrayValue(mapper.treeToValue(jn))
+            null           -> NullValue()
+            else           -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class Whitepot {
+    class DoubleValue(val value: Double)                     : Whitepot()
+    class QuebrachineClassValue(val value: QuebrachineClass) : Whitepot()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is DoubleValue           -> this.value
+        is QuebrachineClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): Whitepot = when (jn) {
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> QuebrachineClassValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
+        }
+    }
+}
+
+sealed class WrothyElement {
+    class NullArrayValue(val value: List<Any?>)    : WrothyElement()
+    class WrothyClassValue(val value: WrothyClass) : WrothyElement()
+
+    fun toJson(): String = mapper.writeValueAsString(when (this) {
+        is NullArrayValue   -> this.value
+        is WrothyClassValue -> this.value
+    })
+
+    companion object {
+        fun fromJson(jn: JsonNode): WrothyElement = when (jn) {
+            is ArrayNode  -> NullArrayValue(mapper.treeToValue(jn))
+            is ObjectNode -> WrothyClassValue(mapper.treeToValue(jn))
+            else          -> throw IllegalArgumentException()
+        }
+    }
+}
+
+data class WrothyClass (
+    @get:JsonProperty("Aeschynanthus")@field:JsonProperty("Aeschynanthus")
+    val aeschynanthus: Any? = null,
+
+    val aquiferous: Any? = null,
+    val cheapener: Any? = null,
+    val enumeration: Any? = null,
+
+    @get:JsonProperty("Ephesine")@field:JsonProperty("Ephesine")
+    val ephesine: Any? = null,
+
+    val escadrille: Any? = null,
+    val estrous: Any? = null,
+    val interestedly: Any? = null,
+    val katakinetomer: Any? = null,
+    val mortification: Any? = null,
+    val morula: Any? = null,
+    val orthosymmetrical: Any? = null,
+    val overbark: Any? = null,
+    val politist: Any? = null,
+    val qualified: Any? = null,
+    val sphenomalar: Any? = null,
+    val throatful: Any? = null,
+    val transhumance: Any? = null,
+    val triandrian: Any? = null,
+    val unbooked: Any? = null
+)
diff --git a/base/schema-kotlin-jackson/test/inputs/schema/class-map-union.schema/default/TopLevel.kt b/head/schema-kotlin-jackson/test/inputs/schema/class-map-union.schema/default/TopLevel.kt
index 23e8ee7..caec38c 100644
--- a/base/schema-kotlin-jackson/test/inputs/schema/class-map-union.schema/default/TopLevel.kt
+++ b/head/schema-kotlin-jackson/test/inputs/schema/class-map-union.schema/default/TopLevel.kt
@@ -55,11 +55,11 @@ sealed class UnionValue {
 
     companion object {
         fun fromJson(jn: JsonNode): UnionValue = when (jn) {
-            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
-            is DoubleNode  -> DoubleValue(mapper.treeToValue(jn))
-            is TextNode    -> StringValue(mapper.treeToValue(jn))
-            is ObjectNode  -> UnionClassValue(mapper.treeToValue(jn))
-            else           -> throw IllegalArgumentException()
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> UnionClassValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
diff --git a/base/schema-kotlin-jackson/test/inputs/schema/class-with-additional.schema/default/TopLevel.kt b/head/schema-kotlin-jackson/test/inputs/schema/class-with-additional.schema/default/TopLevel.kt
index de558f1..97bf339 100644
--- a/base/schema-kotlin-jackson/test/inputs/schema/class-with-additional.schema/default/TopLevel.kt
+++ b/head/schema-kotlin-jackson/test/inputs/schema/class-with-additional.schema/default/TopLevel.kt
@@ -51,9 +51,9 @@ sealed class MapValue {
 
     companion object {
         fun fromJson(jn: JsonNode): MapValue = when (jn) {
-            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
-            is DoubleNode  -> DoubleValue(mapper.treeToValue(jn))
-            else           -> throw IllegalArgumentException()
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
diff --git a/base/schema-kotlin-jackson/test/inputs/schema/constructor.schema/default/TopLevel.kt b/head/schema-kotlin-jackson/test/inputs/schema/constructor.schema/default/TopLevel.kt
index 7c1c8a4..7847944 100644
--- a/base/schema-kotlin-jackson/test/inputs/schema/constructor.schema/default/TopLevel.kt
+++ b/head/schema-kotlin-jackson/test/inputs/schema/constructor.schema/default/TopLevel.kt
@@ -51,9 +51,9 @@ sealed class UnionConstructor {
 
     companion object {
         fun fromJson(jn: JsonNode): UnionConstructor = when (jn) {
-            is ObjectNode -> ConstructorValue(mapper.treeToValue(jn))
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is ObjectNode                          -> ConstructorValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
diff --git a/base/schema-kotlin-jackson/test/inputs/schema/integer-before-number.schema/default/TopLevel.kt b/head/schema-kotlin-jackson/test/inputs/schema/integer-before-number.schema/default/TopLevel.kt
index 36233db..fb9107b 100644
--- a/base/schema-kotlin-jackson/test/inputs/schema/integer-before-number.schema/default/TopLevel.kt
+++ b/head/schema-kotlin-jackson/test/inputs/schema/integer-before-number.schema/default/TopLevel.kt
@@ -44,9 +44,9 @@ sealed class TopLevel {
 
     companion object {
         fun fromJson(jn: JsonNode): TopLevel = when (jn) {
-            is DoubleNode           -> DoubleValue(mapper.treeToValue(jn))
-            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
-            else                    -> throw IllegalArgumentException()
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode                -> IntegerValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
diff --git a/base/schema-kotlin-jackson/test/inputs/schema/integer-float-union.schema/default/TopLevel.kt b/head/schema-kotlin-jackson/test/inputs/schema/integer-float-union.schema/default/TopLevel.kt
index 9993706..72c3235 100644
--- a/base/schema-kotlin-jackson/test/inputs/schema/integer-float-union.schema/default/TopLevel.kt
+++ b/head/schema-kotlin-jackson/test/inputs/schema/integer-float-union.schema/default/TopLevel.kt
@@ -52,9 +52,9 @@ sealed class Number {
 
     companion object {
         fun fromJson(jn: JsonNode): Number = when (jn) {
-            is DoubleNode           -> DoubleValue(mapper.treeToValue(jn))
-            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
-            else                    -> throw IllegalArgumentException()
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode                -> IntegerValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
diff --git a/base/schema-kotlin-jackson/test/inputs/schema/minmaxlength.schema/default/TopLevel.kt b/head/schema-kotlin-jackson/test/inputs/schema/minmaxlength.schema/default/TopLevel.kt
index 1bad4ec..3150cc5 100644
--- a/base/schema-kotlin-jackson/test/inputs/schema/minmaxlength.schema/default/TopLevel.kt
+++ b/head/schema-kotlin-jackson/test/inputs/schema/minmaxlength.schema/default/TopLevel.kt
@@ -73,9 +73,9 @@ sealed class InUnion {
 
     companion object {
         fun fromJson(jn: JsonNode): InUnion = when (jn) {
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            is TextNode   -> StringValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
diff --git a/base/schema-kotlin-jackson/test/inputs/schema/multi-type-enum.schema/default/TopLevel.kt b/head/schema-kotlin-jackson/test/inputs/schema/multi-type-enum.schema/default/TopLevel.kt
index fbff16d..4d3ac39 100644
--- a/base/schema-kotlin-jackson/test/inputs/schema/multi-type-enum.schema/default/TopLevel.kt
+++ b/head/schema-kotlin-jackson/test/inputs/schema/multi-type-enum.schema/default/TopLevel.kt
@@ -57,11 +57,11 @@ sealed class FooUnion {
 
     companion object {
         fun fromJson(jn: JsonNode): FooUnion = when (jn) {
-            is BooleanNode          -> BoolValue(mapper.treeToValue(jn))
-            is DoubleNode           -> DoubleValue(mapper.treeToValue(jn))
-            is TextNode             -> EnumValue(mapper.treeToValue(jn))
-            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
-            else                    -> throw IllegalArgumentException()
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> EnumValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode                -> IntegerValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
diff --git a/base/schema-kotlin-jackson/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.kt b/head/schema-kotlin-jackson/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.kt
index 5af210e..f1e976c 100644
--- a/base/schema-kotlin-jackson/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.kt
+++ b/head/schema-kotlin-jackson/test/inputs/schema/recursive-union-flattening.schema/default/TopLevel.kt
@@ -54,14 +54,14 @@ sealed class TopLevel {
 
     companion object {
         fun fromJson(jn: JsonNode): TopLevel = when (jn) {
-            is ObjectNode           -> AnythingMapValue(mapper.treeToValue(jn))
-            is BooleanNode          -> BoolValue(mapper.treeToValue(jn))
-            is DoubleNode           -> DoubleValue(mapper.treeToValue(jn))
-            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
-            is TextNode             -> StringValue(mapper.treeToValue(jn))
-            is ArrayNode            -> UnionArrayValue(mapper.treeToValue(jn))
-            null                    -> NullValue()
-            else                    -> throw IllegalArgumentException()
+            is ObjectNode                          -> AnythingMapValue(mapper.treeToValue(jn))
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode                -> IntegerValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> UnionArrayValue(mapper.treeToValue(jn))
+            null                                   -> NullValue()
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -87,14 +87,14 @@ sealed class TopLevelElement {
 
     companion object {
         fun fromJson(jn: JsonNode): TopLevelElement = when (jn) {
-            is ArrayNode            -> AnythingArrayValue(mapper.treeToValue(jn))
-            is BooleanNode          -> BoolValue(mapper.treeToValue(jn))
-            is DoubleNode           -> DoubleValue(mapper.treeToValue(jn))
-            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
-            is TextNode             -> StringValue(mapper.treeToValue(jn))
-            is ObjectNode           -> TopLevelClassValue(mapper.treeToValue(jn))
-            null                    -> NullValue()
-            else                    -> throw IllegalArgumentException()
+            is ArrayNode                           -> AnythingArrayValue(mapper.treeToValue(jn))
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode                -> IntegerValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> TopLevelClassValue(mapper.treeToValue(jn))
+            null                                   -> NullValue()
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -128,14 +128,14 @@ sealed class XElement {
 
     companion object {
         fun fromJson(jn: JsonNode): XElement = when (jn) {
-            is ArrayNode            -> AnythingArrayValue(mapper.treeToValue(jn))
-            is BooleanNode          -> BoolValue(mapper.treeToValue(jn))
-            is DoubleNode           -> DoubleValue(mapper.treeToValue(jn))
-            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
-            is TextNode             -> StringValue(mapper.treeToValue(jn))
-            is ObjectNode           -> XClassValue(mapper.treeToValue(jn))
-            null                    -> NullValue()
-            else                    -> throw IllegalArgumentException()
+            is ArrayNode                           -> AnythingArrayValue(mapper.treeToValue(jn))
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode                -> IntegerValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> XClassValue(mapper.treeToValue(jn))
+            null                                   -> NullValue()
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -161,14 +161,14 @@ sealed class X {
 
     companion object {
         fun fromJson(jn: JsonNode): X = when (jn) {
-            is ObjectNode           -> AnythingMapValue(mapper.treeToValue(jn))
-            is BooleanNode          -> BoolValue(mapper.treeToValue(jn))
-            is DoubleNode           -> DoubleValue(mapper.treeToValue(jn))
-            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
-            is TextNode             -> StringValue(mapper.treeToValue(jn))
-            is ArrayNode            -> UnionArrayValue(mapper.treeToValue(jn))
-            null                    -> NullValue()
-            else                    -> throw IllegalArgumentException()
+            is ObjectNode                          -> AnythingMapValue(mapper.treeToValue(jn))
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode                -> IntegerValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            is ArrayNode                           -> UnionArrayValue(mapper.treeToValue(jn))
+            null                                   -> NullValue()
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
diff --git a/base/schema-kotlin-jackson/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.kt b/head/schema-kotlin-jackson/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.kt
index 95676ca..a7747ad 100644
--- a/base/schema-kotlin-jackson/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.kt
+++ b/head/schema-kotlin-jackson/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.kt
@@ -67,14 +67,14 @@ sealed class Closed {
 
     companion object {
         fun fromJson(jn: JsonNode): Closed = when (jn) {
-            is ArrayNode            -> AnythingArrayValue(mapper.treeToValue(jn))
-            is BooleanNode          -> BoolValue(mapper.treeToValue(jn))
-            is ObjectNode           -> ClosedClassValue(mapper.treeToValue(jn))
-            is DoubleNode           -> DoubleValue(mapper.treeToValue(jn))
-            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
-            is TextNode             -> StringValue(mapper.treeToValue(jn))
-            null                    -> NullValue()
-            else                    -> throw IllegalArgumentException()
+            is ArrayNode                           -> AnythingArrayValue(mapper.treeToValue(jn))
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> ClosedClassValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode                -> IntegerValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            null                                   -> NullValue()
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
diff --git a/base/schema-kotlin-jackson/test/inputs/schema/union-int-double.schema/default/TopLevel.kt b/head/schema-kotlin-jackson/test/inputs/schema/union-int-double.schema/default/TopLevel.kt
index f9ec4d6..430d7d1 100644
--- a/base/schema-kotlin-jackson/test/inputs/schema/union-int-double.schema/default/TopLevel.kt
+++ b/head/schema-kotlin-jackson/test/inputs/schema/union-int-double.schema/default/TopLevel.kt
@@ -54,10 +54,10 @@ sealed class Value {
 
     companion object {
         fun fromJson(jn: JsonNode): Value = when (jn) {
-            is DoubleNode           -> DoubleValue(mapper.treeToValue(jn))
-            is IntNode, is LongNode -> IntegerValue(mapper.treeToValue(jn))
-            is TextNode             -> StringValue(mapper.treeToValue(jn))
-            else                    -> throw IllegalArgumentException()
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode                -> IntegerValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
diff --git a/base/schema-kotlin-jackson/test/inputs/schema/vega-lite.schema/default/TopLevel.kt b/head/schema-kotlin-jackson/test/inputs/schema/vega-lite.schema/default/TopLevel.kt
index bd9d865..403a8ca 100644
--- a/base/schema-kotlin-jackson/test/inputs/schema/vega-lite.schema/default/TopLevel.kt
+++ b/head/schema-kotlin-jackson/test/inputs/schema/vega-lite.schema/default/TopLevel.kt
@@ -1026,9 +1026,9 @@ sealed class FontWeightUnion {
 
     companion object {
         fun fromJson(jn: JsonNode): FontWeightUnion = when (jn) {
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            is TextNode   -> EnumValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> EnumValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -1405,9 +1405,9 @@ sealed class Label {
 
     companion object {
         fun fromJson(jn: JsonNode): Label = when (jn) {
-            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
-            is DoubleNode  -> DoubleValue(mapper.treeToValue(jn))
-            else           -> throw IllegalArgumentException()
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -1459,9 +1459,9 @@ sealed class TitleFontWeight {
 
     companion object {
         fun fromJson(jn: JsonNode): TitleFontWeight = when (jn) {
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            is TextNode   -> StringValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -2248,9 +2248,9 @@ sealed class Padding {
 
     companion object {
         fun fromJson(jn: JsonNode): Padding = when (jn) {
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            is ObjectNode -> PaddingClassValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> PaddingClassValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -4047,11 +4047,11 @@ sealed class ValuesValue {
 
     companion object {
         fun fromJson(jn: JsonNode): ValuesValue = when (jn) {
-            is ObjectNode  -> AnythingMapValue(mapper.treeToValue(jn))
-            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
-            is DoubleNode  -> DoubleValue(mapper.treeToValue(jn))
-            is TextNode    -> StringValue(mapper.treeToValue(jn))
-            else           -> throw IllegalArgumentException()
+            is ObjectNode                          -> AnythingMapValue(mapper.treeToValue(jn))
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -4597,11 +4597,11 @@ sealed class Equal {
 
     companion object {
         fun fromJson(jn: JsonNode): Equal = when (jn) {
-            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
-            is ObjectNode  -> DateTimeValue(mapper.treeToValue(jn))
-            is DoubleNode  -> DoubleValue(mapper.treeToValue(jn))
-            is TextNode    -> StringValue(mapper.treeToValue(jn))
-            else           -> throw IllegalArgumentException()
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> DateTimeValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -4689,9 +4689,9 @@ sealed class Day {
 
     companion object {
         fun fromJson(jn: JsonNode): Day = when (jn) {
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            is TextNode   -> StringValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -4712,9 +4712,9 @@ sealed class Month {
 
     companion object {
         fun fromJson(jn: JsonNode): Month = when (jn) {
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            is TextNode   -> StringValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -4732,10 +4732,10 @@ sealed class RangeElement {
 
     companion object {
         fun fromJson(jn: JsonNode): RangeElement = when (jn) {
-            is ObjectNode -> DateTimeValue(mapper.treeToValue(jn))
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            null          -> NullValue()
-            else          -> throw IllegalArgumentException()
+            is ObjectNode                          -> DateTimeValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            null                                   -> NullValue()
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -4868,10 +4868,10 @@ sealed class ConditionalValueDefValue {
 
     companion object {
         fun fromJson(jn: JsonNode): ConditionalValueDefValue = when (jn) {
-            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
-            is DoubleNode  -> DoubleValue(mapper.treeToValue(jn))
-            is TextNode    -> StringValue(mapper.treeToValue(jn))
-            else           -> throw IllegalArgumentException()
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -5125,10 +5125,10 @@ sealed class LegendValue {
 
     companion object {
         fun fromJson(jn: JsonNode): LegendValue = when (jn) {
-            is ObjectNode -> DateTimeValue(mapper.treeToValue(jn))
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            is TextNode   -> StringValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is ObjectNode                          -> DateTimeValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> StringValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -5518,11 +5518,11 @@ sealed class NiceUnion {
 
     companion object {
         fun fromJson(jn: JsonNode): NiceUnion = when (jn) {
-            is BooleanNode -> BoolValue(mapper.treeToValue(jn))
-            is DoubleNode  -> DoubleValue(mapper.treeToValue(jn))
-            is TextNode    -> EnumValue(mapper.treeToValue(jn))
-            is ObjectNode  -> NiceClassValue(mapper.treeToValue(jn))
-            else           -> throw IllegalArgumentException()
+            is BooleanNode                         -> BoolValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            is TextNode                            -> EnumValue(mapper.treeToValue(jn))
+            is ObjectNode                          -> NiceClassValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
@@ -6695,9 +6695,9 @@ sealed class AxisValue {
 
     companion object {
         fun fromJson(jn: JsonNode): AxisValue = when (jn) {
-            is ObjectNode -> DateTimeValue(mapper.treeToValue(jn))
-            is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
-            else          -> throw IllegalArgumentException()
+            is ObjectNode                          -> DateTimeValue(mapper.treeToValue(jn))
+            is IntNode, is LongNode, is DoubleNode -> DoubleValue(mapper.treeToValue(jn))
+            else                                   -> throw IllegalArgumentException()
         }
     }
 }
