Format spec.
<data> ::= "#", [<attacker>], [<defender>]
<attacker> ::= "a:", <race>, <units> [, <upgrades>] [, <raid-mark>] [, <population>] [, <cata-targets>] [, <hero>] [, <plus-stat>] [, <big-party>] [, <brewery>], "#"
<defender> ::= "d:", <race> [, <population>] [, <wall>] [, <residence>] [, <stonemason>] [, <traps>] [, <plus-stat>] [, <big-party>], (<def-side>){1,}, "#"
<def-side> ::= ";", <race>, <units> [, <upgrades>] [, <hero>]
<race> ::= "r", <digit>
<units> ::= "u", <number-array>
<upgrades> ::= "U", ( <number-array> | "!", <number> )
<raid-mark> ::= "R"
<population> ::= "p", <number>
<wall> ::= "w", <number>
<residence> ::= "R", <number>
<stonemason> ::= "s", <number>
<traps> ::= "t", <number>
<plus-stat> ::= "P"
<brewery> ::= "B", <number>
<big-party> ::= "C"
<cata-targets> ::= "b", <number> [, <number>]
<hero> ::= "h" [, <digit>, ",", <number>, ",", <number>, ",", <number>]
<number-array> ::= <number-null> [, ",", <number-null>]{0,9}
<number> ::= <digit>{1,} [, <multiplier>]
<number-null> ::= <digit>{0,}
<digit> ::= ( "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" )
<multiplier> ::= ( "K" | "M" )
version 2+
version 3+