RS-tracker/ecc/ecc.txt

508 wiersze
46 KiB
Plaintext

In der Regel enthalten die einzelnen frames Checksummen oder CRC-Werte.
Einige Radiosonden senden frames mit Codewoertern, die eine Fehlerkorrektur ermoeglichen.
Graw
====
BCH/Hamming code (N, N-R) = (2^m - 1, N-m), d.h. R=mt mit t=1,
korrigiert t=1 Fehler pro Codewort der Laenge N,
die Codewoerter haben den Abstand d=3 (bei 2 Fehlern
wird falsch dekodiert).
Fuer die Sonden DFM-06/09 ist m=3, d.h. Hamming (7, 4),
jedoch mit einem Paritaetsbit zu (8, 4) erweitert.
Der erweiterte Hammingcode (8, 4) kann zudem 2 Fehler
als nicht-korrigierbar erkennen (wird nicht falsch decodiert).
Meisei
======
BCH(63,51)-Code (m=6, t=2) mit Generatorpolynom
(x^6+x+1)(x^6+x^4+x^2+x+1)=x^12+x^10+x^8+x^5+x^4+x^3+1.
gekuerzt auf (46,34), die letzten 12 bit sind die BCH-Kontrollbits.
Das Generatorpolynom kann man finden, wenn man geeignete Codewoerter addiert (linearer Code),
um das kleinste Codewort ungleich 0 zu finden, z.B.:
0000000000000000 1 0000000000000000 1 000010111011
+
0000000000000000 1 0000000000000010 0 010001011111
=
0000000000000000 0 0000000000000010 1 010011100100
->
101010011100100 = (x^12+x^10+x^8+x^5+x^4+x^3+1)x^2
Die 34 Nachrichtenbit sind aufgeteilt in 16+1+16+1, d.h. nach einem 16 bit Block kommt ein Paritaetsbit,
dass 1 ist, wenn die Anzahl 1en in den 16 bit davor gerade ist und sonst 0.
Pro Codewort koennen t=2 Fehler korrigiert werden.
Ist die Anzahl Fehler #E groesser t, dann ist fuer t < #E <= 2t die Wahrscheinlichkeit,
dass Fehler falsch erkannt/decodiert werden, etwa 1/t!, somit fuer t=2 garnicht gering.
Da hier gekuerzte Codewoerter und 2 zusaetzliche Paritaetsbits verwendet werden, sollte
man bei decodierten Codewoertern pruefen, ob die Paritaetsbits stimmen und ob bei der
Decodierung Werte im Null-padding veraendert wurden.
Um nur die BCH-Codewoerter zu pruefen, kann man Polynomdivision durchfuehren (CRC):
1)
0000000000000000 1 0000000000000000 1 000010111011 : 0000 0000 0BB
-> 0000000000000000100000000000000001000010111011
./crc_polymod --bch 0000000000000000100000000000000001000010111011
100000000000000001000010111011
1010100111001
1010011100100001000010111011
1010100111001
111011101001000010111011
1010100111001
10001110101100010111011
1010100111001
100111011110010111011
1010100111001
1101000010110111011
1010100111001
111100101111111011
1010100111001
10110110011011011
1010100111001
11111101001011
1010100111001
1010100111001
1010100111001
0
2)
0000000000000000 1 1010111100100010 1 000110000001 : 0000 AF22 181
-> 0000000000000000110101111001000101000110000001
./crc_polymod --bch 0000000000000000110101111001000101000110000001
110101111001000101000110000001
1010100111001
11111100101100101000110000001
1010100111001
1010101011110101000110000001
1010100111001
1100111101000110000001
1010100111001
110011010001110000001
1010100111001
11001001101010000001
1010100111001
1100000011000000001
1010100111001
110100100001000001
1010100111001
11110111101100001
1010100111001
1011110011110001
1010100111001
1010100111001
1010100111001
0
Decoder:
bch_ecc.c
Vaisala
=======
http://www.vaisala.com/Vaisala%20Documents/Vaisala%20News%20Articles/VN164/VN164_State-of-the-Art_Radiosonde_Telemetry.pdf
CRC16: (poly=0x(1)1021, init=0xFFFF)
Reed-Solomon:
RS(255,231)
GF(2^8)=GF(2)[x]/(f): f=x^8+x^4+x^3+x^2+1 = 0x11D
Generator von GF(2^8)*: alpha=0x02 (primitive Einheitswurzel)
Generatorpolynom fuer RS-Code:
(X-alpha^0)...(X-alpha^23) =
X^24 + 0x7A X^23 + 0x76 X^22 + 0xA9 X^21 + 0x46 X^20 + 0xB2 X^19 + 0xED X^18 + 0xD8 X^17 + 0x66 X^16 + 0x73 X^15 + 0x96 X^14 + 0xe5 X^13 + 0x49 X^12
+ 0x82 X^11 + 0x48 X^10 + 0x3D X^9 + 0x2B X^8 + 0xCE X^7 + 0x01 X^6 + 0xED X^5 + 0xF7 X^4 + 0x7F X^3 + 0xD9 X^2 + 0x90 X + 0x75
Es koennen t=12 Fehler pro Codewort korrigiert werden.
Fehler der Anzahl t < #E <= 2t werden zuverlaessig erkannt.
Decoder:
bch_ecc.c
http://www.ka9q.net/code/fec/
https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders
RS92
----
HEADER 6
DATA 210
RS-PARITY 24
2a2a2a2a2a10 (header)
6510 (L=2*0x10=32)
e81820204b34393533393334006100083d3d07b342bb3e9809d3bc3f754c963b ebfb
690c (L=2*0x0c=24)
ca2b0fd9670f00670f8c0f11a458111e8810da410d30430d dc84
673d (L=2*0x3d=122)
b01c852167ab07298b3cb05a536e0fffcf4faf7f4f3fff8fcfffffffff7fe5918aef20e8110175879900d0e0e900061f8c048aa393009edea1fe2557dc0019549f04b5160d00ae998b00e12a4200370b8608cacc1900b3e08905bd60040126da9303e1d4b4006d04a00573469700d6a98b00699f120195828f04 6ed7
6805 (L=2*0x05=10)
03030000000000000000 b27d
ff02 (L=2*0x02=4)
02000200
f0be2a40a7cd69b9ed0668ec12182e8560ea6dd0733612a1 (Reed-Solomon parity)
ecc-rs_vaisala.c:
1)
./ecc-rs_vaisala 2a2a2a2a2a106510e81820204b34393533393334006100083d3d07b342bb3e9809d3bc3f754c963bebfb690cca2b0fd9670f00670f8c0f11a458111e8810da410d30430ddc84673db01c852167ab07298b3cb05a536e0fffcf4faf7f4f3fff8fcfffffffff7fe5918aef20e8110175879900d0e0e900061f8c048aa393009edea1fe2557dc0019549f04b5160d00ae998b00e12a4200370b8608cacc1900b3e08905bd60040126da9303e1d4b4006d04a00573469700d6a98b00699f120195828f046ed7680503030000000000000000b27dff0202000200f0be2a40a7cd69b9ed0668ec12182e8560ea6dd0733612a1
RS92
codeword
errors: 0
0000000000000000000000000000000000000000000002000202FF7DB2000000000000000003030568D76E048F829501129F69008BA9D60097467305A0046D00B4D4E10393DA26010460BD0589E0B30019CCCA08860B3700422AE1008B99AE000D16B5049F541900DC5725FEA1DE9E0093A38A048C1F0600E9E0D0009987750111E820EF8A91E57FFFFFFFFFCF8FFF3F4F7FAF4FCFFF0F6E535AB03C8B2907AB6721851CB03D6784DC0D43300D41DA10881E1158A4110F8C0F67000F67D90F2BCA0C69FBEB3B964C753FBCD309983EBB42B3073D3D08006100343339333539344B202018E81065A1123673D06DEA60852E1812EC6806EDB969CDA7402ABEF0
frame:
2a2a2a2a2a106510e81820204b34393533393334006100083d3d07b342bb3e9809d3bc3f754c963bebfb690cca2b0fd9670f00670f8c0f11a458111e8810da410d30430ddc84673db01c852167ab07298b3cb05a536e0fffcf4faf7f4f3fff8fcfffffffff7fe5918aef20e8110175879900d0e0e900061f8c048aa393009edea1fe2557dc0019549f04b5160d00ae998b00e12a4200370b8608cacc1900b3e08905bd60040126da9303e1d4b4006d04a00573469700d6a98b00699f120195828f046ed7680503030000000000000000b27dff0202000200f0be2a40a7cd69b9ed0668ec12182e8560ea6dd0733612a1
2a)
./rs92gps -r rs92.wav > rs92raw.txt
cat rs92raw.txt | ./ecc-rs_vaisala > rs92raw_ecc.txt
./rs92gps --rawin1 -a almanac.txt rs92raw_ecc.txt
2b)
cat rs92raw.txt | ./ecc-rs_vaisala | ./rs92gps --rawin1 -a almanac.txt
2c)
./rs92gps -r rs92.wav | ./ecc-rs_vaisala | ./rs92gps --rawin1 -a almanac.txt
3)
./rs92ecc -b --ecc -e rinex.txt rs92.wav
./rs92ecc -b --ecc --crc -e rinex.txt rs92.wav
./rs92ecc -b --ecc -r rs92.wav
RS41
----
HEADER 8
RS-PARITY 48 = 2*24
DATA 264-462 (max 2*231=462)
"interleaved"
Die 2 Codewoerter setzen sich zusammen aus den DATA-Bytes an den geraden bzw. ungeraden Positionen und ersten bzw. zweiten RS-PARITY-Teil.
RS(255,231) RS(255,231) L=40 CRC L=42 CRC L=30 CRC L=89 CRC L=21 CRC L=17 CRC
8635f44093df1a60 2c87e0fa0521e8943d9cef4c7a67393f6d39fb546461f2111b6447ab79a746c80350cda5344157f8c0c12234f4690222 0f 7928 16174b313933303239331a00000300000a00002f0007322ce53e31991abf12dada3eb68468c16755 d51c 7a2a 15310216060245f302000d08a31607821e08bb210219060243f302000000000000000000000000000000 220d 7c1e 0807d03cdc071fd81ddb19d70a8d0eb602b60cb518d40692ff00ff00ff00 1c27 7d59 b8d83301ff0f881f0f38f4fe18b283038735ff000000003eb8ff4947201e6e3aff55415f13fc6e005440440cf100009e9f7406f85800832b631719d70010bebc172a8b00000000000000000000000000000000000000000000 a48b 7b15 366181193ef05d07e1245b1be0f721f801f6080410 7b0b 7611 0000000000000000000000000000000000 ecc7
1)
8635f44093df1a60 (HDR)
2c87e0fa0521e8943d9cef4c7a67393f6d39fb546461f2111b6447ab79a746c80350cda5344157f8c0c12234f4690222 (2xRS)
0f
7928 (L=0x28=40)
16174b313933303239331a00000300000a00002f0007322ce53e31991abf12dada3eb68468c16755 d51c (CRC-OK)
7a2a (L=0x2a=42)
15310216060245f302000d08a31607821e08bb210219060243f302000000000000000000000000000000 220d (CRC-OK)
7c1e (L=0x1e=30)
0807d03cdc071fd81ddb19d70a8d0eb602b60cb518d40692ff00ff00ff00 1c27 (CRC-OK)
7d59 (L=0x59=89)
b8d83301ff0f881f0f38f4fe18b283038735ff000000003eb8ff4947201e6e3aff55415f13fc6e005440440cf100009e9f7406f85800832b631719d70010bebc172a8b00000000000000000000000000000000000000000000 a48b (CRC-OK)
7b15 (L=0x15=21)
366181193ef05d07e1245b1be0f721f801f6080410 7b0b (CRC-OK)
7611 (L=0x11=17)
0000000000000000000000000000000000 ecc7 (CRC-OK)
./ecc-rs_vaisala 8635f44093df1a602c87e0fa0521e8943d9cef4c7a67393f6d39fb546461f2111b6447ab79a746c80350cda5344157f8c0c12234f46902220f792816174b313933303239331a00000300000a00002f0007322ce53e31991abf12dada3eb68468c16755d51c7a2a15310216060245f302000d08a31607821e08bb210219060243f302000000000000000000000000000000220d7c1e0807d03cdc071fd81ddb19d70a8d0eb602b60cb518d40692ff00ff00ff001c277d59b8d83301ff0f881f0f38f4fe18b283038735ff000000003eb8ff4947201e6e3aff55415f13fc6e005440440cf100009e9f7406f85800832b631719d70010bebc172a8b00000000000000000000000000000000000000000000a48b7b15366181193ef05d07e1245b1be0f721f801f60804107b0b76110000000000000000000000000000000000ecc7
RS41
codeword1
errors: 0
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EC0000000000000000110B10080121E05BE15D3E81367BA400000000000000000000002ABC10D7172B00F8749E000C4000FC5F553A1E47FF3E00003503B2FE381F0F01D8592700000092D4B5B6B68DD7DBD8073C071E0D0000000000000000F30219210882160800F30216312A1C55C1843EDABF993E2C072F000003003332333117280F11F2616454FB396D3F39677A4CEF9C3D94E82105FAE0872C
codeword2
errors: 0
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C7000000000000000000767B04F6F8F71B2407F01961158B00000000000000000000008B17BE0019638358069F00F144546E1341FF6E2049B80000FF878318F40F88FF33B87D1CFFFFFF06180C020E0A191D1FDCD0087C220000000000000002430602BB1E07A30D02450602157AD56768B6DA121A31E53200000A00001A3930394B1679220269F43422C1C0F8574134A5CD5003C846A779AB47641B
frame:
8635f44093df1a602c87e0fa0521e8943d9cef4c7a67393f6d39fb546461f2111b6447ab79a746c80350cda5344157f8c0c12234f46902220f792816174b313933303239331a00000300000a00002f0007322ce53e31991abf12dada3eb68468c16755d51c7a2a15310216060245f302000d08a31607821e08bb210219060243f302000000000000000000000000000000220d7c1e0807d03cdc071fd81ddb19d70a8d0eb602b60cb518d40692ff00ff00ff001c277d59b8d83301ff0f881f0f38f4fe18b283038735ff000000003eb8ff4947201e6e3aff55415f13fc6e005440440cf100009e9f7406f85800832b631719d70010bebc172a8b00000000000000000000000000000000000000000000a48b7b15366181193ef05d07e1245b1be0f721f801f60804107b0b76110000000000000000000000000000000000ecc7
2)
./ecc-rs_vaisala 8635f44093df1a60421080e56396389c102cf6db9276308a11f9f8792cb620beae0662688bba0eb2c0bdfa3bd10f0368c07ad0ac33c77046f0792888134b343032303234341c00000100000d00007a000732013230323434254e00002c011205b43ca475537a2a95050229fd015be502d931084d2a075b3308ed060228fd015de50200000000000000000000000000000061d67c1e4d07a0ba92170e9003fa01f813b40c921ed811fa0bf504d20af920fa17f765137d59950b3501ffc43086200a1101420000000521008f527605b1b600faa7e10e3b1301acce8e1c78c5ff0de3c41479b6ff48781a09dcfdffa2f1c30d51190151e0e4113d1701e27da60504a4ffdb2511085bd1003f05bd0c8346ffda787b156d2f421735a22f00f88b0b1ea7fe220b23030902112a417ea5d0343030333030303120313036313320202033312e362030363733203033353220303730302031323235312033383030203133343036203535333920313430353820353239332037383030203830323120373334203931392039353533383738203937323839373820343238383338353332362032393032313631203539313039203335303539203637303020333738352034363838203636393920363839392038303030c8e4762e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bf08
RS41
codeword1
errors: 1
pos: 136
BF000000000000000000000000000000000000000000000076C830383938203936383620383330372035352030392036323920323533383438393239383835393939343731302030373332203534203335363431303820353220303032332037303631202031302030303034A54111092322A70BF82F35426D7BDA460C05005B11DBA4057D013DE450190DF1FFDC1A48B614E3FF788EAC130EA700B1768F210000010A86C4010B5913F7FAF9D2F5FAD892B4F8FA9017BA071ED60000000000000000E5012806085B2A08D9E50129052A53A4B4122C0025343001077A00000100343232341328F0BE20B62C79F8F9118A307692DBF62C109C389663E5801042
codeword2
errors: 2
pos: 106 176
0800000000000000000000000000000000000000000000002EE43030203936393620383435372030363930333931353131303236333838322037383720373335203120332032383038203935383031393520303320303331323130372035303336202E332033363131303130D07E2A02030BFE1E8B00A2172F1578FF83BD3FD10825FF04A6E21711E00151C3A2FD0978FF79C40DC51CCE013BE1FAB6055200050042112030FF35957D6517200A040B111F0C1301030E92A04D7C6100000000000000025DFD02ED33074D31025BFD02957A753C0501004E3432323200000D00001C3430304B88794670C733ACD07AC068030FD13BFABDC0B20EBA8B686206AE
frame:
8635f44093df1a60421080e56396389c102cf6db9276308a11f9f8792cb620beae0662688bba0eb2c0bdfa3bd10f0368c07ad0ac33c77046f0792888134b343032303234341c00000100000d00007a000732013230323434254e00002c011205b43ca475537a2a95050229fd015be502d931084d2a075b3308ed060228fd015de50200000000000000000000000000000061d67c1e4d07a0ba92170e9003fa01f813b40c921fd811fa0bf504d20af920fa17f765137d59950b3501ffc43086200a1101420000000521008f527605b1b600faa7e10e3b1301acce8e1c78c5ff0de3c41479b6ff48781a09dcfdffa2f1c30d51190150e0e4113d1701e27da60504a4ffdb2511085bd1003f05bd0c8346ffda787b156d2f421735a22f00f88b0b1ea7fe220b23030902112a417ea5d0343030313030303120313036313320202033312e362030363733203033353220303730302031323235312033383030203133343036203535333920313430353820353239332037383030203830323120373334203931392039353533383738203937323839373820343238383338353332362032393032313631203539313039203335303539203637303020333738352034363838203636393920363839392038303030c8e4762e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bf08
3)
./rs41ecc -b --ecc rs41.wav
./rs41ecc -b --ecc --crc rs41.wav
./rs41ecc -b --ecc -r rs41.wav
CRC16
-----
./crc_polymod --crc 0000000000000000000000000000000000 ecc7
C7EC
11111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
1110111111011111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
110011111001111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
10001111000111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
111000011111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
11010011110000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
1011011110100011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
11111110110011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
1110110110111101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
110010110101101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
10000110100101110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
1110100001111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
110000001101000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
10010001100000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
11001100100111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
1000100100011001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
100001001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
11001101000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
1000101000110001000000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
1000100001100000000000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
1110000100000000000000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
110100100010000100000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
10110100011000110000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
111100011100111000000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
11110011101111010000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
1111011101011011000000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
111111101001011100000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
11101101000011110000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
1100101000111111000000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
100001000101111100000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
11000100111110000000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
1001100111010001000000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
1000111000001100000000000000000000000000000000000000000000000000001100011111101100
10001000000100001
11000011100100000000000000000000000000000000000000000000000001100011111101100
10001000000100001
1001011100000001000000000000000000000000000000000000000000001100011111101100
10001000000100001
1111100010001100000000000000000000000000000000000000000001100011111101100
10001000000100001
111000010011100100000000000000000000000000000000000000001100011111101100
10001000000100001
11010010010100110000000000000000000000000000000000000001100011111101100
10001000000100001
1011010010000111000000000000000000000000000000000000001100011111101100
10001000000100001
11110010010111100000000000000000000000000000000000001100011111101100
10001000000100001
1111010010011101000000000000000000000000000000000001100011111101100
10001000000100001
111110010001101100000000000000000000000000000000001100011111101100
10001000000100001
11100010000101110000000000000000000000000000000001100011111101100
10001000000100001
1101010000001111000000000000000000000000000000001100011111101100
10001000000100001
101110000011111100000000000000000000000000000001100011111101100
10001000000100001
1100000010111110000000000000000000000000000001100011111101100
10001000000100001
100100010101110100000000000000000000000000001100011111101100
10001000000100001
110010100110110000000000000000000000000001100011111101100
10001000000100001
10000100111110010000000000000000000000001100011111101100
10001000000100001
1100111010011000000000000000000000001100011111101100
10001000000100001
100011010001000100000000000000000001100011111101100
10001000000100001
1010000000110000000000000000001100011111101100
10001000000100001
10100000100000100000000000001100011111101100
10001000000100001
101000100100101000000000001100011111101100
10001000000100001
1010100101101010000000001100011111101100
10001000000100001
10000101111010100000001100011111101100
10001000000100001
1101111110101000001100011111101100
10001000000100001
101011110111000101100011111101100
10001000000100001
1001110110000111100011111101100
10001000000100001
1010110010111000011111101100
10001000000100001
10010010101000111111101100
10001000000100001
11010101100110111101100
10001000000100001
1011101100010110101100
10001000000100001
11001100000110001100
10001000000100001
1000100000010000100
10001000000100001
0
./crc_polymod --crc 0000000000000000000000000000000000
C7EC
11111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
1110111111011111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
110011111001111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
10001111000111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
111000011111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
11010011110000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
1011011110100011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
11111110110011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
1110110110111101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
110010110101101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
10000110100101110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
1110100001111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
110000001101000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
10010001100000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
11001100100111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
1000100100011001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
100001001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
11001101000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
1000101000110001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
1000100001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
1110000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
110100100010000100000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
10110100011000110000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
111100011100111000000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
11110011101111010000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
1111011101011011000000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
111111101001011100000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
11101101000011110000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
1100101000111111000000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
100001000101111100000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
11000100111110000000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
1001100111010001000000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
1000111000001100000000000000000000000000000000000000000000000000000000000000000000
10001000000100001
11000011100100000000000000000000000000000000000000000000000000000000000000000
10001000000100001
1001011100000001000000000000000000000000000000000000000000000000000000000000
10001000000100001
1111100010001100000000000000000000000000000000000000000000000000000000000
10001000000100001
111000010011100100000000000000000000000000000000000000000000000000000000
10001000000100001
11010010010100110000000000000000000000000000000000000000000000000000000
10001000000100001
1011010010000111000000000000000000000000000000000000000000000000000000
10001000000100001
11110010010111100000000000000000000000000000000000000000000000000000
10001000000100001
1111010010011101000000000000000000000000000000000000000000000000000
10001000000100001
111110010001101100000000000000000000000000000000000000000000000000
10001000000100001
11100010000101110000000000000000000000000000000000000000000000000
10001000000100001
1101010000001111000000000000000000000000000000000000000000000000
10001000000100001
101110000011111100000000000000000000000000000000000000000000000
10001000000100001
1100000010111110000000000000000000000000000000000000000000000
10001000000100001
100100010101110100000000000000000000000000000000000000000000
10001000000100001
110010100110110000000000000000000000000000000000000000000
10001000000100001
10000100111110010000000000000000000000000000000000000000
10001000000100001
1100111010011000000000000000000000000000000000000000
10001000000100001
100011010001000100000000000000000000000000000000000
10001000000100001
1010000000110000000000000000000000000000000000
10001000000100001
10100000100000100000000000000000000000000000
10001000000100001
101000100100101000000000000000000000000000
10001000000100001
1010100101101010000000000000000000000000
10001000000100001
10000101111010100000000000000000000000
10001000000100001
1101111110101000000000000000000000
10001000000100001
101011110111000100000000000000000
10001000000100001
1001110110000110000000000000000
10001000000100001
1010110010110100000000000000
10001000000100001
10010010100100100000000000
10001000000100001
11010100000101000000000
10001000000100001
1011100000001001000000
10001000000100001
11000000011001100000
10001000000100001
1001000011101101000
10001000000100001
1100011111101100
10001000000100001
1100011111101100
Rest:
1100011111101100 = 0xC7EC