From 6a94c07ba9092eaf5b1a155ceb18d8b29be7997a Mon Sep 17 00:00:00 2001 From: Viktor Dragomiretskyy Date: Thu, 2 Jul 2020 01:01:20 +1200 Subject: [PATCH] Attempt to integrate the calibration logic into the rest of the code. --- calibrate.py | 47 --- pair.py | 5 +- proto9x/blobs.py | 3 - proto9x/blobs_9a.py | 755 ------------------------------------------- proto9x/calibrate.py | 99 ------ proto9x/sensor.py | 559 +++++++++++++++++--------------- 6 files changed, 307 insertions(+), 1161 deletions(-) delete mode 100644 calibrate.py delete mode 100644 proto9x/calibrate.py diff --git a/calibrate.py b/calibrate.py deleted file mode 100644 index 0916b11..0000000 --- a/calibrate.py +++ /dev/null @@ -1,47 +0,0 @@ - -from proto9x.util import unhex -from proto9x.sensor import * -from collections import namedtuple -from data import bulk_xfers -import sys - -sensor.open() - -# 1st iteration -actual = sensor.build_cmd_02(CaptureMode.CALIBRATE) -expected = unhex(''' -027800a10223000000200008000020008000000100320074000000008020200400242000005020773628200100302001003c208000082138000c210000482107004c210000582000005c20000060200000682005006c20014970200141742001887820018084202000942001809c200902a0200b19b4200300b8203b04bc201400c0200200c4200100c82002003300100000000080cc200000f503d0200000a1013200440000000080dc20e803e0206401e420d002e8200001f0200500f8200500fc200000b8203a00000804001408000008080000080800001408300008080000140831001c081a0032000c0000000080501101004c111e00340078010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010232e10232e10232c10232c10232c01065010250101000007c8078c06ff0000000000004f80006d0300280307030990098db00b90880991858e08c1810b9190910ac1b8928a0993878a890b9388898908c88191890ac8889289099a818a890b9a88898908d08191890ad08892890802818a095a810a0288890b5a8808d98189890ad9908989095e8289890b5e88898908e18189890ae190898909648289890b648889096e8108e981890b6e880ae99091b9096f828a8f0b6f88918908f0818a890af090898909768289910b76b8918a08f88792910af8888a92097c81898a0b7c09018089890b01888991097f8189920b7f09088089920b088889920c07030307200402000000002f00040070000000290004007000000035000400800000001700000044000400010000003000140002000000ff0000008d002007ff000000950030074300cc000f0000009b9a999796959392918f8e8d8b8a898786858382817f7e7d7b7a797776757372716f6e6d6b6a696766656362615f5e5d5b5a595756555251504e4d4c4a49484645444241403e3d3c3a39383635343231302e2d2c2a29282625242221201e1d1c1a19181615141211100e0d0c0a0908060d7200000ca3100b12208ea21c83d44cd3235915656118a66dd95469d45551d72549d19265d0756d9de6791d3569d9e67999d451228871dec66dd7b6695cb769d5453918f65094f45496c631cc645dd7d43845911800a130 -''') -assert expected == actual -sensor.process_calibration_results(bulk_xfers[0]) - -# 2nd iteration -actual = sensor.build_cmd_02(CaptureMode.CALIBRATE) -expected = unhex(''' -027800a10223000000200008000020008000000100320074000000008020200400242000005020773628200100302001003c208000082138000c210000482107004c210000582000005c20000060200000682005006c20014970200141742001887820018084202000942001809c200902a0200b19b4200300b8203b04bc201400c0200200c4200100c82002003300100000000080cc200000f503d0200000a1013200440000000080dc20e803e0206401e420d002e8200001f0200500f8200500fc200000b8203a00000804001408000008080000080800001408300008080000140831001c081a0032000c0000000080501101004c111e0034007801ebf6f9f6f4f6f8f8f6f3f0eff1f4f7f7fafafbfaf8f9fafd00040a0e0f0e0d0f1012110e0e11151917141515171616140f0c0c101111111211110f0904020200fefdfdfbfcfbf9f6f2eff1f1f1f3f5f4f1f1f2efefedeeecedeeeff3f6f8f7f5f4f6f8fafcfdfefefeffff000000000110232e10232e10232c10232c10232c01065010250101000007c8078c06ff0000000000004f80006d0300280307030990098db00b90880991858e08c1810b9190910ac1b8928a0993878a890b9388898908c88191890ac8889289099a818a890b9a88898908d08191890ad08892890802818a095a810a0288890b5a8808d98189890ad9908989095e8289890b5e88898908e18189890ae190898909648289890b648889096e8108e981890b6e880ae99091b9096f828a8f0b6f88918908f0818a890af090898909768289910b76b8918a08f88792910af8888a92097c81898a0b7c09018089890b01888991097f8189920b7f09088089920b088889920c07030307200402000000002f00040070000000290004007000000035000400800000001700000044000400010000003000f4311e000000ff0000008d002007ff00000095003007ffffffff00000085ffffffff04000085ffffffff08000085ffffffff0c000085ffffffff10000085ffffffff14000085ffffffff18000085ffffffff1c000085ffffffff20000085ffffffff24000085ffffffff28000085ffffffff2c000085ffffffff30000085ffffffff34000085ffffffff38000085ffffffff3c000085ffffffff40000085ffffffff44000085ffffffff48000085ffffffff4c000085ffffffff50000085ffffffff54000085ffffffff58000085ffffffff5c000085ffffffff60000085ffffffff64000085ffffffff68000085ffffffff6c00008525250d080f0b0a0c0c0c0c0d0f090a080606090b0b090b0c140c0b0d0e0b0e120a0a0b0d0b0806080a080a0a090507080c05090c03090c1004060709fd000002ff04050300020405fbff0002fb020404fb040504fb010404f8ff00fff4fdfffef3fafbfef2fbfbfcf700ff00eef8f9f9f2fcfefff5f9fc00f6f8fafe110b00fdf8fdfefef0f6f8f9f1f3f4f7f4f6f7f7eff5f8f9f0f6f8f6f4f6f8f7f4f6f9faf3f3f4f4f9f4f3f5f5f7f5f6eff5f6f5f6f6f6f7eef2f3f3f2f7f7f5ecf4f5f5ecf4f4f4f800fffdf800fffcecf7f7f7ecf7f7f5f4f6f5f4f7f8f6f6eff7f6f3ebf6f9f6e7f4f6f4e5f5faf9e6f7fcfce8f2f4f4eff4f6f6e6f3f7f7ecf1f4f7f6060404e6f6f8f7ecf5f8f9e7f3f3f4e6f6f9faeaf5f8f9ecf7f9faf0fcfdfcf5ff0000f20000fef4ff00fd0f0e01fbf0fefdfcecfbfbfae7f2f5f4e5f0f5f4edf4f8f8e1e3e5e5ebf0f1f1f4f5f6f5ebf5f6f3edf9fbfbf4f6f9fbebf3f7f9f1f8fcfdf3f5f6f7f4f6f8faf2fbfefef6fefffff5000103040e080507070705ff000204fd050605fd080a0afd050608ff09090a00080a0a02040709020506050a0607060a050505030405050701010208fdfdff05ff000108020105252507070a11191b0c0b0c0f0c0a0a0f090b0e130b0c0d0f0c0d0f0f10121415131411110e0e0f0f0a0e10110a0a0a0b080606070c0a06050f0d0a09080606040607070605060809040303060506040402000002020000ff03000000fdf9f8f9fffdfbfb00fffefcfbfbf9fafefbf7f6f8f6f5f5fdfbf5f4010000fcfffffffffbfbfbfafffefdfcfbfefffff9fbfaf9f9fbfdfbf8f7f8faf5f5f4f4f7f6f5f5fbf9f8f9f4f1f3f5f5f3f2eff6f6f5f4f6f7f7f7f7f8f9faf5f8fbfdf5f4f4f4f5f4f4f5f4f4f4f4f9f5f3f3f9f6f2f0f8f6f5f3f3f1eff0f6f5f3f4f9fbfdfbf2f2f5f5f4f6f8f8f5f7f9f7f9f8f7f6faf7f8f8f3f4f6f8f4f3f4f5f4f2f1f2f6f5f2f200fdfaf8f4f2f2f0f9f8f7f5f2f4f4f5faf9f7f7fafaf9f7f9f6f4f4fafafaf9000000fefcfbfaf9f9fbfafafafafbfafbfbfbfcf9fafbfaf5f7fafaf3f3f6f9f9f8f9fae8ebeeeef1f2f4f5f5f6f9faf3f4fafbf8f7f9fbfbfafcfbfbfdfdfcfeff0002fbfcfcfdfdfefefdfefefefffffffffd030404020101000004040303050506040302010009080504080603010b0806030b0a0a090a0a0b0b0707070707070907070a0c0d0503030603030304000305060202020104030101040200011c1b1a191315141413151413171a1a19111415151011111215141517111316160e0c0c0b110f0f0d0a08080a070606070506090b09090a0c040205080707090a0a0a0a070605030205060504020304050000000200020405fcfefffffbfefffffcfdfefef9f9f9f8f6f6f9f8f6f9fdfdf6fbff01fafafefffefffffff9fbfbfafbfbfcfdfdfcfbfbf7f9fafaf7f6f6f8f8f8f8f9f6f7f7f6f6f8f8f8fafcf8f7f7f7f4f4eef1f3f6f1f1f4f4f7f7f7f7faf9f6f6fcfbf9f6f5f7f6f5f5f6f6f6f4f4f3f4f2f5f7f9f1f3f6f9f3f2f3f5f1f5f6f6f3f4f5f5fbfbf9f9f4f3f2f2f6f3f0eff5f3f4f2f4f1eff0f4f1f1f1f9f6f4f3f6f6f5f2f2f2f2f3f0eeeff0f9f9fcfbf0f0f0f2f6f5f5f5f2efeef1f5f2f1f1f7f6f5f4f4f5f4f1f7f5f5f5fbf9f9f9fafafaf8f8f5f4f3f8f7f5f3fdfcfbf9fcfbf9f7f8f5f4f3f9f6f4f4fbfaf9f7efeeeeecf7f8f6f6f9f8f6f9fbf8f5f5fefdfcf9fbf9faf7fbfbf9f70101fffdfdfcf9f9fdfdfbfafcfbf9f9fcfbf9fa010200fe00020200020203020503020200000002020202030202020203030202060404030a08070506060403070706050d0e0d0c070807080606070a07080a0b0203070a0304080b05060c1017161617141718181212131616130f0f13110d0e1110101015131111151515150f0f13140c0d10100d0e0c0c0a0a0a0b0c0a08080e0f0f0d0b0d0d0d0b0b0a0d07070807030607070303050504050506030405050304020200fffefd0000000000fe0000f8f7f9fcf7f8fbfefdfcfbf9030200fe00020201000000fefafcfbfcfcfcfefff9f8f5f6f8f7f6f5f9f9faf9f7f8f7f6f5f6f5f4f8f9f7f5f8f9f9f6f4f6f6f6f6f8f7f7f3f5f5f6f6f6f6f6f6f7f7f9f3f2f1f3f3f3f4f4f4f4f4f4f3f4f1f1f7f5f4f4faf9f8f6f3f2f2f2f5f4f3f3f5f4f4f4f8f9f8f9f3f7f9f9f1f4f7f7f1f0f1f3f3f3f4f4f4f6f7f7f3f4f4f3f3f4f4f5f4f4f3f5f1efefeefcfcfcf8f2f2f4f1f5f3f2f3f3f3f1f2f4f5f8faf3f1f2f4efeeeff1f6f6f6f7f7f6f7f6f7f6f6f8f4f7fafcf2f2f2f3f8f7f9f9f8fcfbfcf3f3f4f3f4f4f2f3f8f9fafbecececeef4f4f5f6fafcfbfaf6f6f4f5f9f8f8f6f6f5f5f5f7f4f2f1fbfbfaf9f8fafbfafafbfbf9f7f7f9f9f9fbfbfbfcfcfefeff000000030707070303020403040405040506070000010402020305050607070403030203030102040506050a0b0a09070605060b0c0a0a0b0a06060c0c09091011100e141112141b1c1e1a1815130f1614100b0d0d0b0c0c0b0a080f0d0c0a100f0d0d12100c0c1412100e0f0f0d0d0a0b09070b0a0502070707050a0707080a0806040a08060605030203050404030201000002fffefe0603010002010000fefffe0000fffefe00fefdfffcfaf7f8fdfbf8f6f9f9f9f9fdfbfbfefefdfcfffbfafbfffcfcfbfa00fefefef9fcfdfcf5f6f8f9f8f9faf9f6f8f9faf2f2f4f7f5f4f4f4f4f2f3f5f4f1eff2f6f5f4f4f5f7f7f9f7f7f9fcf9f9f9faf4f6f8f9f2f1f1f6f3f2f3f7f1f1f5f6f5f9fdfff6f6f9fbf6f7f9fbf3f1f3f7f5f4f4f5f9fafb00f9f9f9fdfafafbfaf5f9fcfcf7f8fafcf7f6f9fcf2f3f6f9f4f2f3f6f4f1f1f1eff0f1f3f7f7fafdefeff3f7f4f6f8fbf4f4f6f8fcf9fafbf9f9fdfef4f4f6faf5f3f4f8f7f9fcfefbfcfdfefcfcfdfef6f9fd00fbfdfe00fcfcfdfff6f9fefff4f7fa00fbfcff01eff0f0f3f7f6f7fcfbfe0001f6fbfe00f6f8fd01f7f9fcfcf4f7fbfcfafcfefff9f9fbfbfafdfffefbfcfdfcfbfbfdfc000000000000010106080907050809070506060508080705060505050607060608090a0604070a0903050706070706050a0a0a0a050404030808060405070502080604030a0501ff1007fdf915110f0b0c080704060505070b0a0a0807080909070505060a0806050b0a08060c0a0a080b0909080505060500fefdff0401fffd070504020302020104020202030302020100fcfd0100fffd00fefefe00fefdff00fffdfb00fefaf9fdfbf9f90000fffdf9fafdfef6f7fafdf9f9fcfdff000001fefefe00fefdfe00fafcfefffcfafafdfbfafcfdf8fafbfbfbfcfcfdfafbfbfdf9fbfbfbf6f6f8faf8fbfefff5f9fcfef7fbfdfefafeff01ff000103fcfdff00fc000000fb000000fbfe0001fafc000000010203fcff0002fe000002fbfe0000f9fafe0002040405fefeff01f8f9fafdfdffff00fe000100ff000003fe000101fafeff00f5fbff02f5f9fcff00020507f9fbfafbfd000101fcfcfbfcfbfbfbfffffffdfefcfdfffefafe000200020305010307080001020303030100030503020000010200000000010200ff03020100f5f7f6f6fdfbfaf900fbf9fa00fefdfc030200fefbfafbfbfbfbf9f6fffffefcfbfaf9f7fdfefefbfd00fffffbfcfcfa0000000000fffefe01fefdfe030000000201ff00030001030504030207070605040404030502fefe05030100030100000a0704000402000001000001fffe010000000001fefe0003f8f9fcff060400fc030100fe040000ff070200fd08050200050300000400fefc05010000060503000500fefc0301fefefffffefffcfbfbfb010200000100fefc01fefbf70100fefcfdfefdfbfaf9f9f9fefdfdfb000000fffcfcfdfffafbfdfdfafdfefffeff00000000000000000001fefcfbfc010000010001010202020000fefefdfefefffdfefcfaf8fafbf9fafbfcff0000fe00ff00fcff0003fdfe00000000000300ff00030104040204040202030304060100000200010103000103060204060a020203050405050604050607020506080306080a04070a0b070a08090306070a00050a0e00040a0c00030a0f0509101401060b1003070c0d05070c0f000103050a101417ff0207090204070bfe00070d0206090afe000306fdff0407030306060506090b08090b0e0506070a0202060a02040a1005070c11ff000307ff00020400020404f3f2f2f4f9f9fcfefefefefcfcfbfbfafdfdfdfcfaf9f8f7f6f7faf9fbfafefef8f8fafcf8f6f8fbfdfdfcfcf9fbfcfcfffefefdfcfbfcfcfcfbfafbfefbf9f8fefcfbfa0200fffc020100fe04050504020200feff0000fe010200fe010100fd000000fdfffffefb0100fefc00fbf6f500fefbfa0400fbf600fcf8f3f7f6f5f7fcfaf9f8fffdf9f6fdfbfaf900fef8f5fdf9f5f4fbf9f9f9fffcf9f7fef9f8f5f9f9f6f5fbfbf9f6fcf9f3f0f7f6f5f4fffaf8f5f9f6f2f1f7f7f7f5fbfdfdfcfaf9f9f9fafafbfbfdfefbfbfefefbfbfffffefefefbfcfcfdfdfdfe01020504000001010100fffe00010301030605020507070803090c0b00030304ffff0002fdff0001fcff0101010000020001020405070807020406050406080a05060608000103070405070c080a0c0d060b0b0a070b0c0c090c0c0b0c0f0f0f080b0c0f0a0d0f0e0608090d0b0f11140c0e11120a0b0c0f0a0d10100b0e0f100f0e0d0f0e1013141111111312111113141413130f100e0e10100f0f06090a0c18181b1d0b080d1210141618101114160d0c11150a0d13180a0d1111090a0f110d0f14160f0f0e100b0d0f0f0c0e1110110f100f121211110a0c0b0a050608070303070bf5f7fbff00000407ff020707fe000404fe0000fff7f9fafbf9fbfdfeff000000fefdfcfdfcfefe00fcfdfcfbfcfcfdfdff000100fcfbfbfbfbfcfaf9faf8f6f4f9f8f6f4faf7f8f8fbfaf9f701fefcfbfcf9f7f6faf7f7f7faf6f5f5f9f4f4f4fbf9f9f8f9f7f5f1f9f6f1eef5f3efecf8f5f1edf4f0ecebeae4dfdffbfffefbf8f9faf9f5f5f6f5f9f9f8f6f4f3f3f2f5f6f4f2f9f9f6f4f5f5f4f2f3f1eeebf3f2f1eff3efeeeeefeeedebf1efeeedf4f3f4f6f0f0f3f6f6f8f9f9fbf9f9f8f9f7f8f7faf9f9f9f9f9f7f9fbfafafdfdfafbfbfbfafafafefcfafa01fefdfe00fdfbfcfdfafbfdfffcfdff0100000007050302080506070305060604060707040507080001050903060808060708080505070a06070c0f0a0b0f130a0a0a0c08090a0c0e1014170e1117180a0b10140c0f12130b0b10111114161810121718101318190f11131616161414141414151012141412141417111313121012110e121216181314131615181a1b1214141511131313121719190e1413141f222325171915131a1d1b1717171513191b1c191a1c1b181113141412121214161617180f0f0d0f0f0e0c0e0f0d0c0e0f0b0a0a100f0b0809080906050302020d0b0a0803020100060505050706060803020304feff0003fbfcfc00fbfbf9fb000000fefcfcfaf9fef9f6f7f7f5f4f6fdfdfbfcfffcfcfdfaf9f9f9f8f9f8f7f3f3f2f0f1f0f0eff7f6f4f4f6f4f1eff8f5f0eef6f6f4f1f9f9f7f4f6f5f4f1f5f4f1eff6f5f0efefedecebeeeeefedebecebebebeaeaeaeeedeeefe1e4e7ecf7f1eeecf6f1f1eff4f2f2f4f4f3f2f2f1f0f1f0f0efefedf1f1f0f1efebebece9e7e9eaeeeceae9eef0f0f0ecebebedeeedeceaf6f5f5f6f5f4f1f1f7f4f3f1f8f8f8f6f8f6f7f7f8f9f7f6f8f8f8f7fffffefdfbfaf8f8fafafbfdfe0000fefffffbf9fbfbfbfcff00000200fffcfbfffffeff00010100090702ff0502020107040203080602000806050608070706060301000c0a06030f0d0c0c11100f100e0f0e110f110d0a1916130e18171818151412131614120f14151716191a1c1a191616121914121319130f0f131615161717181a1618191518161615111316190e1115191a1b1d1e1a1f23252025252516161818121214171a1d1f2014181a1925252525171e212215161b1b13181b1f191d2023181b1b1b1516161617191917171614141318191a111416160d1111110c0f1111090c1113040407090305080b090b0d0e000100ff0606060608080807050405050405050503050503fe000200fdff0004f9fbfafcf6f6f5f4f6f7f7f8fcfcfbfafefdfcf9f9f9fafaf4f4f4f4eeedeae9eff0f1eff6f7f7f6f0f3f4f1eeeff1f0eeececeaeeeae8e8edebeae9eeecebeaefedebeaebeaeaebececececebeaeae9ecececedf2f2f1f0efedeae8ece9eae9f0efeeebf5f4efedf1f1efeef1f1f2f1ecedececefeeecebeff0efecececeae9ebebe9e8f1f0eeebedeeededeaecedecf6f5f5f4f2f3f4f4f1f3f6f7f6f6fafcf7f6f7fdf5f5f7faf9f8fafbfefcfbf8f7f7f9fefdfdfcfefbfcfd00f8f9fe04fbfd00000200fefefcfafbfb00fffefefefffffefdfdfefc0001020004030401000100010603030305020303fe000204050607080907060711110f0c1213100d090b0e0d0d0e0f0e161416141312110f0f11100f151412111815141114131211171b191614191816151615161d1f1f1c1516171915171a1918171515171415151e1b1e1f25252320252525251b1e1f1f1b1e1d1d2023232518191c2125252525212124251a1a1918201f1c19212221221c1d1e20191b1b19181a1b1d14181a1a1918171917181819100f0f121414151517191b190c0d100d0f11121010131412fefe000005090a0b0706090c0505070a06080a0c01000205fefe010305060708fcfdfd00f4f5fafdf9fbfdfefbfbfaf9f7f8f9faf8f4f2f3f3efedece9e8e8e7efefefedf6f5f3f0ecebececefefefeeebebeceae8e7e7e8e9e8e9e8e9e9e8e7e9ebebe9eeedebe7ededebeaeae8e7e8eeeceae9f0eeeceae4e2e1e1e8e7e7e8e8e8eaedeeedededeeedececedededefecefefefeceeefeeecefefefe8ebebece8ebebeaebeaebece9e9e9ecebebecedf5f5f6f6f4f4f5f4f8f9f9f9fcfdfcfbff00fffcfefefefffdfffefefcfffffd00fffefefeffff00000001020403030602000102fe000002fcfe000400030609fbfe0307fbfb0005000000020402020002030505030202020403030405050507080704030501fefe080402040a0503020a0400000a07060614100f0b0e0c09060e0c0a090d0c090811100e0a1313110e131413121412100e161411111a141110191715121614151414151313171616141f20202020222222222123221c1917181e1e1b182525222223211f1c2525252525221d1b1a1b1e1c1a1b1c1b20201d1c1e1b1a1c1a1d1c1d1b191719191717181818191d1919181b151b1d1f17181919191717170d0d0c0d0e0d0c0e0f0f0f0d020203050a0a090a0e0e0d0f0d0f11120f0e0e0b0708070605050504080807060000fffc00fefdfcfdfbf8f6f9fafaf9faf9f8fbf5f7f7f9eef0efeceaecebebeeededeef0f1f1f1ebebececedeeedece8eae8e9e8e8e8e8e9e7e8eae7e5e5e5eaeaebede8ebecefebf0f1f1eaecefefeceff2f3eaedf3f6e2e5eaeee8e9e8e8ebeae6e8eceaeaeeeceff1f1eff4f8f9edf1f2f5edf1f2f3ebeef0f1e9edeef1e9eeeff3eef2f3f4eceff2f4eeefeef0f3f1f1f4f1eff0f1f5f6f5f4fbfbfbf9fcfbf9f9fdfcfafafcfbfbfbfafbfbfefdfdfefffffefbfc01000000060502020304030504050808070808070b0a0a09070806050607070802050708000203050402020200000003030305070807040205060300fcfefefc0304020101000001fdfdfdfd0505040508060504030405050706040307070504070706090d0c0c0d1211100f0e1011121113131111120f0f0f0d0c0a12111111131412100f0c0c101d1916161f1c171823211e1d1917131318171616232525221a1a1918252525251b1c1e201d1d1e1819181a1b1d1e20211a19191b1d1c19191b1c1d1f1a1b1b19201f1e1c1e1d1b1b1e1a17191916171917181a1e0f121214121111110c0e1214070a0b0a0c0d0b0b0f100d0e0f100d0d09090a0c050506070305050505050302fbfdff00faf9f9f9f8fbfbfdf9fafbfdfdfdfbfef9fafbfaebeef2f3e8eaeceeedefeff1eff1f2f4eaebedf0ebedf1f4eaeff1f4e9edefefedf0efefe6ebedeeeef0efededecebececececeeedeeebecf1f1f1f1f6f5f2f3efefeef0e7e7e9ede9eceff0f0f1eceaf0f0eff1f8f6fbfcf4f4f3f0f1f2f5f5f1f1efecedebebe9f0f0eeeff2f1f2f6f1f0eef2efeff0f0f4f7f8faf2f2f5f8f1f1f5f9f6f8fcfdf7f8f8faf9fbfbfbfbfe0000fe010000ff010405fd00020201030506020507070405050107060703070606050c0b0b0a0607080609090603080600fd0300fdfe0002040705070a0604fefaf900000201fefbf6f6f9f8fd01fefcfdfe00fefafdfdfe000101fefbfd0100feff01fefcfc00fefbfb0003060b0500fdfe0a0401020d0e0f0f11110e0f0f0d0e0f0f11121306070c110f0f11150c0c0e1211111112171615141a1918151d1a17141414131216181615201a181815110f0c252523161f1b1816161518181d1c1917201b18181d201f1b1c1f1d181e181618191614111c1a1919202223211e21221f1e23221e242425211617171519232523161718180a121b200c1114110e0e0f0f0c0d0d0a0c0d0c0b090c0a09070a0b0c03060a0affff0002fafafbfefefefffefdfdfeff0000fefcfafafcfcf4f5f6f8eff0f2f3f1f1f2f1f5f4f3f3f4f6f8f7f5f3f3f4f1f1f1f3efedeeeeecebeaeaebe9e9eaebebefecececedecededefefecedeeecefeff3f1efefefeff0f0f2f3edeeececf0eff1f1eaeff5f8f3f2f1effbf6f1f2eff1f3f4f4f3f2f2edf2f3f4eef2f5f7f1f4f5f6f7f5f3f4f4f7f7f7f1f0f2f3faf9f9fbf7f7f8fafbfaf9fafefcfcfdfcfdff00fdfdff0000ff00010000020304030202020102000607070808080a0b00fe010501000305050402020a0706040607050203050503fbfd0000030707050301010002ff00fffbfdfe00fffdfdfef6fbfcfe0100fffffffe0002fcfefd010200fefe0105080a02080a090004070afd0002050603050703070c0e050a0c0e0f0f0e0d100f0d0d0f0d0c0c100d0c0c12100e0c15100c0a12100d0a11110f091616130f14110f0b1514110f1514110c12110e0a171412110c0a0a070c0604021814110d17140f0d1714110b191a191415110e0b120f0e0d18171716111413101b1a16121f1d1a151e1c1b1a1a1717171f1b1916141414161913121017151415201d1b1a0d0a0a0b0f0e0e0e080b0c0e0a0b0a08060b09050b0c0a070a0a09080404020200010101fefd0000fffefefffbfcff02fcfcfe00fafbf9f9f4f7f7f8f0f1f2f5f4f9fbfcf6f7f9fbf6f9faf9f4f6f8f9f3f8f9faeaeff0f4ecedeff4ededf2f5ecededf1f0efeff1ededeef1efedf0f1eff0f3f7f3f2f1f3eeebe9e9f2f1f0eff8f9f8f8f2f5f5f4f4f5f6f8f4f4f5f7f2f2f2f3f3f2f0eff4f2f2f1f4f3f2f3f5f7f8f9f7f6f6f7f4f6f5f5fbfcfcfdfbfbfaf8fbfbfdfdff000000fefefdfe0200000002010202040406050302050600000201070300fe0a0702000708060408080805020303020404040402030304020202040002030207070807020203010000000100030508000305050003070b03070a0e080f1212070b0e1000050608101213100d1013110d0f110f0a0d100f0c0d0f0f0f0f0f0f0f100e0d0d0e0f0e1011100c0e110f0e0c0c0b0a0c0b08040d0d0a040a0a07020502020008070704050202050c0a0805060101000200fe000c06010102ffffff00fffbfb090705050a090907070402010f0806050a0905020c0a0906140f0c0c0d0c0a07110f0e0d11100d0d15110b08130f0a0c120f0c0a14141210100e10111413100f15121111090404030c0a06030c0905040504030601010202050202050707090c000204080001000300010003000001030306090c0304070bf9fe0104f9fbff00f8fbfe00fdfffffffcfcfcfdfbfd0000faf9fafdfafbfcfef5f8f9faf9fbf9f8f7fafafbf4f7f9faf3f5f7f8f3f4f4f1f2f5f5f7f9f8f6f7f4f6f3f2e9eceff4f1f2f5f7f6f6f7faf5f6f7f8fafdfdfdf8f9fafcf4f6f7f5f1f4f4f3f2f3f3f5f3f5f5f8f8fafbfdf8f9fbfbf4f6f6f7feff00fef8fafd00feff000300000203feffff00fffdfbfa0100fefd050202000302ff0000000000ffffff00fdfdff000200ff000100000001000000050807050303020204040403010200000503030300feff01020203050a080807070705020f0f0c090f0f0d0b10100e0d1314111107080709100f1011100f11110e0d0a0a0f0e0c0b100c09070d0a07060b0806050f0d0b080a0707060b07050109080502020000ff010000000000fffdfefdfdfb0200000004020201020000fe00fdfcfc000201000204030400000000fcfeffff0505060704020203fffefefe04030303000204040404040009080602050504020b0b09080a0b0c0a050502010c0a0701090805040e0d08060f0c09050c090a0b110e0e0c0302000007080808050707060606040304050303080807060f0f0e0c0c0e0f0e06080808050709070608090a0d0c0a0b0c0f100f05090c0c0002050701010202000105070000020200020406fe000003feffff00fafafcfdf8fafafcf8fafbfefcfafbfbf8f9fbfff3f6f8faf8fafbf9f8f9f9f8f1f3f1f2f6f9fcfdfafd0002fdff0001fbfcfdfefbfeff00fe000000f6f7fcfef4f7fc00f9fe0001feffff00feff0002fd000203f8fafc00fbfafd0001010104020000030101040801020102fafcfd01fcfbfbfd010001020000000000000000020406070001030400ffffff01020200010301ff040403030203050503050503fefe0000030407090305040506070707090b0a0b0406060607060606090808080c0b0b0a0e0c0a090b0b080411100c0a100e09070a0a0a070a0a07040706050406070500060200fd050200fc0301fefbfffefbf9fefbf8f6fffcfaf500fdf9f6fbf6f4f3fcfbf9f600fdfbf700fefcf8fdfbfdf9fdfaf8f6fdf9f7f70200fefc0001fffcfefefaf9050200fe00fdfafafafaf9f8020201fe01fffcfafffdfcf9fffdfefb00fffaf90300fdfa0c070300fffffefd00fdfefc0200fefe0401fefc020200000c0907030c0d0d0e00000204080a0905050505030304060504050606050606050a0a08070c0a080509090807080505050a0909080b0c0c0a0c0b0a0c0b090a0906040202020101020708080904070605050404050101000400020306ff0003060002040500000206fcfe0104ff000205fbfeff02f9fc0107fafd0308f4f90006fefdffff0100000003000000fefdff000000020400000102000001020002040602030505000405060205050602040306020303040508090a0505030207090705090907070201010202030303000102020301000100000002ff00000103010204050508060004050700020302fe0001030405060602030505000002040100000008070808050304030a0a0b0b0b0a0a0a070a09090808070506020000090907030907050601000102070606060706080704030403020302000201010000ff00fefcfdfffefcfdfd00f9f9f7f8f6f6f4f4f4f1efeff3f1f0eff6f6f6f5f4f6f5f4f2eff1f1f6f4f5f3f6f3f4f3f4f2f2f3f6f7f6f4f9faf9f7fbfbfaf7fbfbf8f5f6f2efeefaf8f4f3fcf9f9f7f5f6f6f8f9f6f6f9f8f8f7f6f8f4f2f1f8f5f5f4f7f7f6f6fafbfaf9fffcf7f5fbf9f5f2fafafbfbfefcfaf8fcfbfbf900fefcfb01fefefe0d0c0a090400000100fdfcfe00fffefe050505050402010102020000070707070400fffe0502000006060607070506050d0d0c0c0e0f0e0c080a0a08060809080508090b07090a0b0405070b080a0e0e070c0e0e090d0f0f090c0f10060a0d10090b0e0f090b0c10070a0a0b06080c0d0e0f0f0f0a0a0b0c0908050400000102030305030305090901020509050507050404040502040609070606060607070806070707080a0b0907080a09030404030a0a09070202020103050506090908070406080804030407020202030204040302020202010201010503020205040404060402010202000003020000070604000506050304010001000000fe0807070802010103090502000c0906070604040503020100fffffe0003010002050100fe02fefdfb0400fbfa0500fcf901fffefefcf9fafbfcfaf8fafbf8f7f9fefbf9f70000fbf7f9f6f5f5f4f4f4f6f2f2f3f3efeff1f2f5f3f4f5f3f0f1f1f1f3f5f4f4f6f6f4f4f6f5f2f2f3f3f4f2f3f2f2f4f4f6f5f4f4f7f9f3f4f3f5efede9eaf4f4f1f1f8f5f3f1f6f7f4f4fafbfbfaf5f6f9f8f4f4f4f2f4f4f4f2f5f6f6f6f9f9f7f4f2f3f3f2ededededf9f7f6f3f9f9f6f1f9f9f8f7fbfdfdfa02040200080806050100fcf9fe020202fefe00000507060502020100ff00020006060603ff0001000003060607070806070506060b0b0b0a0a0809090406080c0707090b0b0b0a090c0c0c0c0c0c09070c0f0e0e0f100f0f0e0d0f100f0e0d0d10111011111211110f0f100f0d0e0e0f0f0f0e0d10100f0d0c0d0e0f0204070b05050605050606070a0b0c0f0a0a0a0a0707080a07080c0c0707050706070609080a0c0c070707090706070b09090b0c05070a0b08090a0c0407090a06080a0a0809090a090b0c0c090a0b0a0403040704040607030506050102020203030303050404040100fffe0000000100000000fefe0002020101020000ff00fdfbfbfc080806050505030300000000090a0705060402010101010002020000040401fffefffefdfefefefbfbfafaf9f9f9fafdfefefffefcfefefefcfbf9fafefdfbfaf7f5f4f2f5f5f3f2f7f6f4f3f8f8f7f6f3f1f2f3f4f4f4f2f7f4f1f2f1efeeeff1f1f2eff0efefecf0eeece9f3f1efedefeeedeef3f0edeef8f6f4f0f4f3f0efe9e9e7e6f4f5f5f2f2f5f6f7f1efeef0f8f7f7f7f7f6f7f4f0f2f3f4f1f2f4f5f3f4f1eeefefebeaf1f1f1efebebebeaece9eaefececedecf4f2f1f1f5f3f2f1fdfdf9f502020000f6f5f6f70000ff00000000ff00fffefffffefcfbfefbf9f801fefcfefefcf9f90401fffe03010000050504020b0a0504060505050c0c0a090c0a08080a080a0a0c0e0d0c080a0b0b0d0c0c0c0f101110131414100c0f0f0e11141211131213120c0c0a0d0f0f10110d0e0c0d0c0d0e0f111010100d0e131605040202070908060e0d0a070b0b0d0d0a0c0c0c0b0a0b0c090b0c0c090c0d0e0b0b0b0b0d0c0b090d0f0d0b0d0d0b0b0b0b0d0d0e1111100a0a09090a0a0b0a0a0d0e0d08060707070607090708070a04030204020202030000020201010001030404020004060501030200ff00020203050708050708070305080800040302050402000200fffe0001010003020100fffffefe0000000000fffefc00000100fc000101f8fafaf9fbfbfbfafefefdfbfcfafafbfcfbf9fafbfdfcfdf8f8f8f9f1f1f1f3eff1f4f8f2f3f5f6f7fafbfaf6faf9f9f3f6f9f9f5f7faf7f1f4f6f4efedeeeceaeceeedebeef0efedeceeecefecedeeefeeeeefeeebeaecefefefefe6e8eaebf0eeeeeef5f3f2f1f2f0f0f1f5f1eeeff3efefeff2f0f0eef2f1eeefedeef1f2e9ecf2f5edeeeff1ebebececeff0f1f1ebeae9eaf0eeedeef1f1f0eff3f2f4f4fefcfafbf7f5f5f5fffcfaf9fdfbfafb00fffefcfaf8f8f7f8f8faf8fffefdfdf9f6f7f6fefdfdfd0001010000fffefd020507050606080608070809070707080a0b0b0a09080a0b08080c0e0c0c0e100f0e0c0c0d0c0c0c0c0d0d0c0f0c0b0a110e0e0c0e0d0a0a100e0d0c0e0e0e0d0f0f0e0d0e0a09091b19161505090c0c05050604060808090d0a08070d0b0a060b0a0b0b0c0d0b0a0c0a09090805040507050405090605020b0a09080e0e0a070f0d0b0808050504080503020a05010003020000060200000704fffd060605040201010100fdfdfe000000010200010200000000fcfbfb0000fdfefe050400010401020205010000fffdfaf80000fdfbfdfaf8f8fefcfaf900fdfbfcfcf9f8f9fefcfbf9fdfdfbf9fefdfdfa00fcfaf8f7f6f8f8f7f5f5f6f9f8f7f7fbfbfafbf8f7f7f9fbfafafaf9f9f9faf5f5f4f2f9f9f9f9f6f5f6f9f7f4f6f6f5f4f2f2f5f3f5f7f6f4f6f9f4f2f2f3edeeeff3ededf0f5efefeeeeefeff2f3f0eff0f0f1f1f3f5f0f4f6f8f1f1f3f4eae9e8e9f3f3f4f3f4f6f6f6f2f3f1eef3f4f4f4f2f5f5f6efeeeff1f0f3f3f3f4f4f5f4f7f6f6f5f1f0f2f5ebeceeeff4f4f6f5edf0f2f1f0efeff3f0f1f3f1f6f6f8fafe00ff00f9f9f8f9faff0100fcfbfbfbfcfbfcfaf8fbfdfef9f9fcfefe00ff00f9fe0000fe00020101020201fe02050506050607070808080c0c0e0e080a0c0c080708090c0b0b0d0d0a090a0e0c0a070a0b0b0a0d0c0e0c0a0a0a090c0d0e0f0e0e0d0b090a09070d0d0e0e0d0c0a0a0c0c0908090a090c100b070a0d0f100d05070909090b0d0c070a0c0c0505090c0b0d0e0f0a0a0b0b0a0a0a08070a0a080606060500ff01020502000102000000050100020303040402020103ff0000040001020200000000fbfcfeff0401020001010101fefbfafb00fefcfd0100fffe00fefbfd0100ffff00fffefefefdfd0003010000000000fef6f4f4f6fdfe0000f9fafbfbf9f8f8f8fefefffefafbfbfbf8f8f9faf8f8f8f9f8f5f5f9f6f5f5f7f8f8f7f7f8f8f7f6f6f7f8fafcfcfbfbfcfbfbfafaf9fbfdfafafcfef4f5f7f9f8f8f9f9fcfcfbfbf9f9fafbf6f6f8faf8f9f8f8fafcfcfbf4f4f6f3f6f8f7f5f7f6f3f3f1f1eff0f3f1f0f1f1f3f6f7f6f5f6f7f9f8f6f5f6f4f3efe7e6e5e5f1f0f0f0f6f5f4f4edecedeef3f3f1f1f6f6f4f2f0f0f0f0f2efeeedf3f1f0eef2eeecedf5f4f3f1f1f0edecf3f0edebf0f0eeecf1f3f1f0f0efeff1fbfbf8f6ff00fffff8f7f6f50000fffef9fafbfbf9f9fa00fcfeff00fffffefc010100ff020100fe020200fe00fffefe0505020007060300070505030d0c0a0a0c0b0a08090705060f0f0d0a0a0909050608090a0b0b0b090c0c0c0a080707060d0c0b0a0b0c0d0b06090a0b0c0b0b0d0a0c0c0d090c0f11101414140f13191c0808080b070607080c0807060b0805040f0d0b080f0d0c0c0a0b0b0b080706050704040205040203030404040202010103050402060807050501fffd0401000004030101020000ff0103020001010403010000000100fefffefefcfbfdfcfdfcfefefefdff00fffe00fffcfafffffefc0102020300010201ff000100fcfefffd00fefcfcfbfdfcfafbfcfdfffefefcfcfbfaf8f8fafaf9f9f8f6f6f8fbfbf9f9fbfcfefef9fbfcfbf8fbfdfdfbfcfcfdfafbfbf9f8f7f6f5fbfaf9f9fdfaf7f7f9f6f2f1fbf9f7f5fbfaf8f5fbfefe00fbfefdfbf7f9f8f9f8f9f9fbf0f1f7f9f4f6f8faf5f9fd00f3f8fafcf2f3f4f6f8f6f5f6f9fafbfbf5f6f9faf1f4f7f9e8eceeeef0f1f1f3f5f4f6f6f1f2f2f2f1f2f2f4f1f2f3f3f0f2f1f0edeeeeedecedeeefedeef1f2edeceef3e9e9eaeaeceef1f0eaeae9ecefeff0f0f1f1f1f1f6f6f6f6ff000000f5f7f9f9fcfcfcfdfbfdfe00ff000001fefefe00fdfe0000feff0001faf9fafefbfdfe00fefe0000fefeff010000030304050506080606050505060807080808090a09080404040509090909070606080505060806070707070506080908090a0a0a0b0d0d0c0c0c0d0d0e101312131314141110201c16100b0a0905070602ff060705020304040404020100080705030906050205040200020201000303010204040505020204030000010102020102fefffe00fffefefd010100ff000000ff000000fe0200ffff0102020101040302fbfcfe00fe000303ff000305fbfdfe00fbfcff00fcfcfbfe02000001fffdfe00fdfbfcfcfbf8f8f9fcfdff00fbfcfe00fefefefffcfc0001fafcfefefafbfbfbfbfdfcfbfafcfbfbfcfcfcfbf9fbfbfafdfdfdfdfdfbfaf9f9fafcfef6f7f9faf9f9fbfaf8f9f9faf3f4f4f4f5f5f6f3f4f6f8f7fefdf8f4f6f4f3f3f6f8f9f8fbfbfafaf9f7f7f7fcfdfefeff000002fbf8f9fbf6f5f6f9f7f7f8f9fbf9f8fbfcfcfbfbf8f9f8f9edecebebf5f6f6f6f9fafbfcf3f2f4f4f4f8f7f9f4f5f5f7edecf0f2edf0f2f5f0f1f2f4f4f4f4f2f7f8f4f1edeeefeff0efeff0eeefeff1f3f4f3f3f1eff0f1f7f8f8f9fffe0001f8f8f9fbff000101010101000000fefe00010000fefefe0103030201000201ff0000010300010304030406070506080b070707050707090807060403070503000606050504050404080805060907060607060507050405050706050509070708090603050c0c0c0d11121311151515131011111211151417fff8f6f7fbf8f6f400fefdfa01fffdfbffffffff0000ffff00ffffff00fffefc0000fffb010201ff040402000202020001010100010101010000fefdfdfcfdfdff000000fdfdfcfcfffffffd000000ff01010201020203030000ffff02000000060706060003040400010202000304030305040302030202fe000101fbfcfcfa02010200020404020000fefd01000000fefdfdfffbfbfcfdfbfdfdfdfeff0102fd000102fafbfefffcfdfefef9fcff01fefe0000fe000100fcfdff00fafafdfff7fafcfdf4f7fafbf4f6f9fdf3f5f9fbf3f4f4f5f7f6f6f7fbfcfefff8fafcfefeffff0003030100fcfbfafcf9f9f9fafbfdfefcfbfcfcfdfcfdfefef7f6f6f7e9e7e8ebf5f5f4f4fefffefbf8f9f9f9fafafbfbf9faf9f9f3f2f2f3f6f6f8f6f6f7f9f9f1f3f6f8eeeff1f5eeeeeff1f2f4f4f4f3f6f6f6f4f8fafbf3f5f6f8fbfcfcfd02030506faf9f9fc0100000000fdfdfefefffe000000feff0203030202030304fdfdff000301000205050606080707090c0a0707030204050502020103000000fffefdfd040300fe03030201050505050706050507050507050506070606060707060608060706070c0a0a0a0d0b090a110f0e0e12110f0f181c1711f9fdfbf9f3f4f2f2f7f4f2f4fbf9f8f9fffdfbfa00fdfaf8fdfaf7f7faf8f7f9f9f7f7f7faf8f7f9fffdfbfcfefbfbfbfefbfbfb00020000fcfcfdfefdfdffffff000001ff000000feffff00feff000000000000030201010000000002020101070707050302030400ff000401000205050607050507070601010002f9fafd00ff000001fffefcfefeff00000105030300030302feff0103feff00010304040302050404ff00ff00fffeff0000fefcfc00000002000002020202030201020202fbfefe00fcfd0000fd000102fe000000f8fbfdfdf9fbfbfcfffeffff0000fdfc00000001fffcfefefbfcfcfcf9f9f9fafafbf9f9fdfdfbfbfefcfbfbf8fafaf9edeeedeef2f4f6f7f9fafbfbf9f9f9fafe0000fff8fbfd00f6f8f9f9f5f6fafcf9f9fbfdfafcfdfef7fafbfcf3f5f5f5f6f8f9fbf6f6f6f7f9f9f9f9f9fbf9f7fdfefffe06070506fe0000fd000002030001020201020304ff0002020203030306090a0a000406070407080a090c0d0e090e1110080a0d0c060707070404050500fefcfcfdfcfafbfdfcfbfd0000fefc0501fffe06040202070603040705050607050609090707070707050509080708090705060d0c08050d0a05050a0805054300cc000f0000009b9a999796959392918f8e8d8b8a898786858382817f7e7d7b7a797776757372716f6e6d6b6a696766656362615f5e5d5b5a595756555251504e4d4c4a49484645444241403e3d3c3a39383635343231302e2d2c2a29282625242221201e1d1c1a19181615141211100e0d0c0a0908060d7200000ca3100b12208ea21c83d44cd3235915656118a66dd95469d45551d72549d19265d0756d9de6791d3569d9e67999d451228871dec66dd7b6695cb769d5453918f65094f45496c631cc645dd7d43845911800a130 -''') -assert expected == actual -sensor.process_calibration_results(bulk_xfers[1]) - -# 3rd iteration -actual = sensor.build_cmd_02(CaptureMode.CALIBRATE) -expected = unhex(''' -027800a10223000000200008000020008000000100320074000000008020200400242000005020773628200100302001003c208000082138000c210000482107004c210000582000005c20000060200000682005006c20014970200141742001887820018084202000942001809c200902a0200b19b4200300b8203b04bc201400c0200200c4200100c82002003300100000000080cc200000f503d0200000a1013200440000000080dc20e803e0206401e420d002e8200001f0200500f8200500fc200000b8203a00000804001408000008080000080800001408300008080000140831001c081a0032000c0000000080501101004c111e0034007801e8f5f6f5f1f4f6f6f5f1eeeceff2f5f6f7f8fafaf8f7f9fc00040b1011111113151414121115191e1c19181a1b1a1a1713100f12151616151514120b04030200fefcfcfafbfaf8f5f0eeedeeeef1f3f2efeef0ededeaebe9eaebedf1f5f6f6f3f2f4f7fafcfdfdfefefeff000100000110232e10232e10232c10232c10232c01065010250101000007c8078c06ff0000000000004f80006d0300280307030990098db00b90880991858e08c1810b9190910ac1b8928a0993878a890b9388898908c88191890ac8889289099a818a890b9a88898908d08191890ad08892890802818a095a810a0288890b5a8808d98189890ad9908989095e8289890b5e88898908e18189890ae190898909648289890b648889096e8108e981890b6e880ae99091b9096f828a8f0b6f88918908f0818a890af090898909768289910b76b8918a08f88792910af8888a92097c81898a0b7c09018089890b01888991097f8189920b7f09088089920b088889920c07030307200402000000002f00040070000000290004007000000035000400800000001700000044000400010000003000f4311e000000ff0000008d002007ff00000095003007ffffffff00000085ffffffff04000085ffffffff08000085ffffffff0c000085ffffffff10000085ffffffff14000085ffffffff18000085ffffffff1c000085ffffffff20000085ffffffff24000085ffffffff28000085ffffffff2c000085ffffffff30000085ffffffff34000085ffffffff38000085ffffffff3c000085ffffffff40000085ffffffff44000085ffffffff48000085ffffffff4c000085ffffffff50000085ffffffff54000085ffffffff58000085ffffffff5c000085ffffffff60000085ffffffff64000085ffffffff68000085ffffffff6c0000854a32110a120d0d0f100f0f10140b0b0a08080b0e0e0a0f0f190e0e10110d11160b0c0e0f0e0908090c090a0c0b05080a0f060b10030a0f130506090bfdffff02ff05050500020405faff0002fa020404fb040604f9010404f6fe00fef3fdfffdf1fafbfef0f9fafbf500fefeeaf7f7f7f0fcfefff4f8fc00f3f6fafd130e00fdf6fcfefdedf4f7f8edf1f3f5f1f5f6f7ecf4f6f7eef5f7f5f1f5f6f6f2f3f7f9f1f1f2f3f8f2f3f4f3f5f2f3ebf3f5f2f4f3f6f5ecf0f1f1f0f5f5f4e8f2f4f3e6f2f2f2f7fffefcf700fefbe8f4f7f6e9f6f5f2f2f4f3f3f5f6f5f4ecf5f5f2e8f5f6f5e3f1f3f2e0f3f8f8e1f6fcfbe4eff2f2ecf2f4f5e1f1f6f4e8eef2f6f6060404e2f4f6f5e8f3f6f8e2f0f1f1e2f4f7f9e6f3f5f7e8f5f7f8edfbfbfbf3fe0000effefffef1ff00fc121101fbedfdfdfbe9fafbf8e2f0f4f1e0eef2f1e9f2f6f7dadfe0e2e7ecefeff2f3f5f3e8f3f4f1ebf7fbfaf2f5f8fae8f0f5f8eff6fbfdf0f3f4f6f2f4f6faf1fbfdfcf4fefffff30001030411090509090906ff000405fc060707fd090b0cfd070708fe0a0b0b01090b0b0205090a020608050b0709070c05050605040606080203020afdfdff06ff0002090201054a2909070e151e200f0e0e120f0b0c120a0e11160d0f1013101113131316191917191614111113120c1114160c0c0c0e090706080f0c0807120f0b0a09080604060908060506080a050404060506050502000002020000ff0300fffffcf7f7f7fefcfafafffffcfcfafaf9f9fcfaf5f4f6f4f3f2fdfaf4f10200fffbfffffefefafaf9f9fffefcfcfbfefffff7f9f8f8f8fafbfaf6f6f6f8f4f2f2f2f5f3f2f2fbf7f7f8f2eff1f3f3f2f0edf5f4f2f1f5f6f5f4f5f7f9f9f3f7f9fdf3f2f2f3f3f3f3f3f2f1f2f2f8f3f1eff8f3efecf6f4f2f0f0edebecf4f3f1f2f8fbfbfbf0f0f1f4f1f4f6f6f3f4f7f5f6f5f5f5f8f5f5f6f0f1f5f6f2f1f1f3f2efefeff4f3f1ef00fcf8f6f1f0efeef6f7f5f3f0f1f2f2f8f7f5f4f8f8f6f5f6f5f2f1f9f8f8f7ff00fffdfcfaf8f8f8f9f9f9f9f9f9f8fafafbfcf7f8f9f9f2f5f8f9eff0f3f7f7f7f8fae4e8eaebeff0f2f4f3f4f8f8f1f2f9fbf6f5f8fafafafbfbfbfdfdfcfefe0002f9fcfcfcfdfefefdfdfefefefefffdfd04050502010000000505050306050705030301010b0a0705090704010c0a07050d0d0c0a0c0c0e0f0808090708090b090a0c0f1005040406050505060104060703020301050301020403000221221f1d171a1a19171a19181c1f1f1e151818191415151719191a1b15181a1a120f0e0e151311100c0b0b0c0807080906070a0e0a0b0b0e0403060908080b0c0b0b0c0a070603020607050502030405fe00010200020405fbfdfefffbfdfefffbfbfcfef8f8f7f6f5f5f8f6f5f8fcfdf4fafd01f9f9fdfefefefefff8fafafaf9f9fcfdfbfbfaf9f6f7faf9f5f4f5f7f7f6f6f7f3f6f5f5f4f6f5f6fafaf7f6f6f6f3f3eceef2f5efeff0f1f6f6f5f5f8f6f4f4fafbf7f5f3f5f4f4f3f4f4f4f2f2f0f1f0f3f4f7eef0f4f7eff0f0f2edf2f4f4f1f3f3f3fafaf8f8f3f1eef0f5f1eeecf3f1f2eff2eeebecf3efedeff6f4f2f0f4f4f2f1f0f0f0f2eeecedeef7f8f9f9ececeeeef4f3f3f3f0ececeff1eeedeff5f4f3f1f1f2f2f0f6f3f3f2faf7f8f7f8f9f8f6f6f3f1f0f6f5f2f1fcfcfaf7fafaf7f6f6f4f1f0f7f4f1f1f9f8f7f6ececebe9f6f6f6f3f7f7f6f7faf6f3f4fdfbfaf7faf8f8f5faf9f7f60201fffcfcfaf8f7fcfbfbf8fcfaf7f6fbfaf8f8020200fe00030200030404030503030300000002030302030203020203050202060504040c0b0807070705040808070611121010080909090708090b070a0c0f0404080d0405090e06080f131c1a1b1c191a1d1d1516161b1b18141117151110151414131a17161519191a1a11131617101013140f10100f0c0c0c0e0f0c0a091011120f0e0f0f0f0e0d0c0f09090908040608080304060504050706040405060304030200fffefd00000000fefe0000f7f6f8fcf5f6fafefdfbf9f70302fffd000202010000fffef9f9fbfbfbfbfdfef7f6f3f4f7f5f3f3f7f7f9f8f6f6f5f4f4f4f4f2f6f7f6f3f6f9f7f4f2f5f5f5f6f7f6f7f1f3f3f3f4f4f4f5f5f6f5f7f0f0efeff0f1f2f1f2f2f1f2f0f0efeef5f3f2f2f8f7f6f4f1f0f0f0f3f1f1f0f3f2f2f2f6f7f8f8f1f6f8f8eff2f5f6efeeeef0f0f0f1f2f1f3f4f5f1f2f2f2f1f1f2f2f1f2f2f2efedecebfbfbfaf7efeff1eef2f0f0f1f0f0eeeff1f2f6f8f0eff0f2edebeceff4f4f5f6f5f4f5f5f5f5f5f6f2f6f9fbefefeff1f6f5f7f8f6fafbfcf1f2f2f0f2f2eff0f7f8f9fae8e8e8eaf2f2f3f5f9fafbfaf5f5f2f3f7f6f6f4f4f3f4f3f4f2f0effbf9f9f9f7f9faf9f9f9f9f9f6f6f8f9f8fafafafbfcfdfdff000000040708080304030403040505040607080000010402020305060708090504040305030202050606070c0e0c0b090806070e0e0c0c0f0c07070f0f0c0b13141412181517182123241f1c1a16121b19140e11110f0f0f0f0c0b13100d0c1512100f17130f0f171513121212110f0c0e0b090d0b0702080908070b0809090c0a07050c09070606050304050404030201000002fffcfe0604020002010000fdfffe0000fffdfd00fefcfffcf8f5f6fbfaf6f5f7f7f7f7fbfbfbfefefcfcfefbfafafdfafbfaf9fefdfefcf8fbfcfbf4f5f6f7f7f8f8f9f5f7f8f8f0f0f2f5f2f2f2f2f2f0f0f3f1eeedeff4f3f2f4f3f5f5f8f4f6f9fbf7f7f8f9f1f4f5f8efeef0f4f1f0f1f5eeeff2f6f4f7fcfef3f5f7faf4f5f7faf1f0f2f6f2f2f2f3f8fafafff7f8f8fbf7f8fafaf3f7fbfbf4f6f8faf5f4f7faf0f1f4f7f1f0f0f4f1eeeeefebedeff1f5f5f9fcebebf0f5f1f5f7faf1f2f4f7faf7f8faf7f8fcfef1f2f5f9f3f1f2f6f6f7fafdf8fbfcfdfcfcfcfef4f7fb00fafcfd00fafbfcfef3f6fcfff1f5f9fffafbfe00ecedeef1f4f4f7fbfbfd0001f5fbfefff5f6fc00f5f8fbfbf1f5fafcf9fbfefef8f8f9faf9fcfffefafbfcfcfafbfdfcfffefe000000010107090a07060a0b09050708060a08090607070606080808080a0a0b0704080d0b04060707080807050c0b0c0b070604040a09080406070702090705040d0701ff1409fdf91a16130e0f0c0805080607080e0c0c0a09090b0a080605080c0906070e0c0a080f0c0b090e0b0b0a05060707fffefdff0501fffd0807040205040303050303030403020201fefcfc0000fffcfffefcfcfffdfdfe00fefcfafffcf9f8fcfaf7f700fffffdf8f9fcfef5f5f9fcf7f8fafcff000101fefdfcfffefdfdfff8fbfefffcf9fafdfafafbfcf6f8f9fafbfbfbfbf8f9fbfdf8f9f9faf4f5f6f8f7fafdfff3f8fcfef7fafdfefafcff01ff000103fcfdff00fbff0001faff0000f9fd0001f7faff0000010203fbfe0102fe000002fbfe0000f7fafd0002050406fdfefe01f8f7f9fcfcfdfefffdff0100ff000003fe000101fafdff00f3f9fe02f2f7fbfeff020508f8f9f9fbfcff0001fafafbfbf9fafafdfffefbfcfbfdfefef9fdff02000204060103070900010203030301000405040200000102000100ff010200ff03020100f2f5f4f3fcfaf8f800faf8fafffefcfb030200fdf9f8f9fbfbfaf7f6fffefefbfaf8f7f6fdfefefbfd00fffffbfbfbfa000000ff00fffefd01fefdfd030000ff0301ff00030201040505040208090705050404030702fefe05040101040100000c0905010503010003010101fffe010200000002fefe0103f6f7fcff070400fb030100fe050100ff090400fd0a060201070400000501fefc06020100070503000600fcfc0301fefdfffffefffcfbfafa010201000100fefb01fefaf50100fdfbfdfefcfbf9f8f6f8fdfcfbfb000100fefbfcfcfff9fafbfdf9fcfefefeffff00ff000001ff000001fcfafafc010001010001010203020001fefcfcfefefefdfefbfaf6f8faf9f9f9fcffff01feffff00fbff0003fbfeff0000010003ffff00030104040304040202030304070100000300010203000103060205070b0202030504060507040506070205060a03060a0c04080c0e080c0a0a0306080b00050b1000040b0e00030a11050a131703070e130408101005090e11000103060b12181bfd02070a0304080dfd00080f02060a0bfe000407fdfe04070305060706070b0d090a0d100507080b0202060a02040a1205080f13ff000308fe00020400020504f1f0f0f1f8f9fbfefdfefbfcfbfafaf8fcfcfcfcf8f8f7f5f5f5f9f7fafafdfef7f6f8fbf6f5f7f9fcfbfbfcf8fafbfbfefdfdfdfcfafbfbfcfbfafafdfaf7f7fdfcfaf80200fffc0201fffd05060705020201feff0100fe010200fd010100fc000000fcfffefefb0200fefc01fbf6f301fefbf80500fbf5fffcf6f0f5f3f4f5fbf9f7f6fffdf9f5fdfbfaf900fdf7f4fcf9f4f3fbf9f7f8fffbf8f5fdf8f6f3f9f8f6f3fbfaf8f5fbf8f2eef6f5f3f2fdf9f6f3f7f4f0eff6f5f6f3fafcfcfbf9f8f8f8f9f9faf9fcfdfafafdfdfbfafffffefdfdfbfafafdfbfcfd01020504000001010100fffdff0103020406060305080909040a0e0d00040304fefeff02fdff0001fcfe0101010001020001020406090807020506060406090b06060709000204080406070d080d0f10080c0e0a090e0f0d0b0e0f0d0e111213080d10120c1013110608090f0d1214180f1115160c0e0f120c0f13150d11111311111113111216171313151616131315161717171412121113131212070a0c0f1c1d20220d0a0f1514171a1c131418190f0e13170b10161c0b101515090c11150f12181a121211120d1011120f12131314121213161414130b0e0e0b070709090404080cf3f7fbff00000407ff030808fd000404fd0000fff6f7f9fbf8f9fbfdffff0000fdfcfbfcfbfcfe00fcfdfcf9fcfbfbfcff000100faf9f9fafbfaf8f7f9f6f5f2f8f7f4f3f9f6f7f8fbf9f7f502fcfafafcf7f5f6f9f7f6f6f8f3f3f4f8f3f2f3faf9f8f7f9f6f3eff9f4efebf4f1ece9f8f5efeaf1ede9e7e8e0dadafbfffefaf7f9faf8f5f3f5f4f8f9f8f5f2f2f2f0f4f4f2f0f8f7f4f2f4f3f2f0f1efebe8f1f0efedf1edecebeeebe9e9f0edecebf2f1f2f4eef0f2f5f4f6f7f7f9f8f8f7f8f6f6f5f8f7f7f8f7f8f7f8fbf9f9fbfbf9fafafaf9f8f9fefbf8f901fefcfd00fdfbfbfcf9fafcfffbfbff010000ff080603020905070904060707050608080405090a0001050a0306080a060809090506080c06070e130b0e13150a0b0c0f0a0a0a0f1015171b10141c1d0a0e14170f1216170d0e121515171b1c13171b1c15181c1d1413171a1a1a17161717181a141518191617191b151717151514141216171a1c1516161a191d1f221618191913171716151b1d1e1117181725282a2b1b1e19171f23201b1b1b1a171d21211e2021201d1616181a161614181b1a1a1c12120f1211100f1012100e0f110e0b0c13110e0a0a0a0906050402020f0e0b0a04030100070605070908080803020405feff0003f9fbfc00fbfaf8fb000100fefafbf8f8fdf8f4f5f5f3f2f4fdfbfbfafefbfbfcfaf7f7f8f7f7f7f5f1f1f0eef0eeedecf7f4f3f2f3f2ededf7f3eeeaf4f4f2eff7f8f7f3f5f5f1eef4f2efeef6f4eeededebe9e7ebececebe9eae8e7e8e8e7e7eaeaececdcdfe3e9f5eeece9f4f0eeedf3f0f1f3f2f1f1f0eeeeeeeeedecebebf0efeeeeece8e7eae4e4e6e8ece9e7e7ecededefeae9e9e9eceae9e6f4f4f5f5f4f2efeff6f3f1eff7f7f6f5f6f5f5f7f6f7f6f5f8f7f6f6fdfefefdfbfaf8f7faf9fafdfd0000fefffefbf8fafbfafbfe00000300fefcfbfffefeff010101ff0a0703fe0602020107040303090602010908070609090707060301ff0e0b070412110f0e16131213101112161214110d1e1b17111d1c1d1d191816171918161218191b1b1e1f221f1e1b1a171e1917171d171312171a1a1b1c1c1c201b1c1d1b1c1b1b1913151b1e1115191e1e2023241e25292c262c302f1a1b1c1e1516171c1f232426181b1f1e2f36393b1b222828181b2021171c21251e2326291d202120191a1a1b1b1e1e1d1b1b1818161d1f1e13181a1a101415150f1316160b0e14160404080a03060b0e0b0d0f11000100ff0707080608090a08050506050505050603060503fe020200fbff0005f7f9f9faf5f4f3f2f4f6f5f7fafbf9f8fefdfbf7f7f8f9f8f2f1f2f2ebe9e7e7ededefedf3f5f5f4edf1f2efeaecedeeece9eae7ece7e4e4ebe8e6e6ece9e7e6ecebe7e6e6e7e7e7eae8e9e9e8e7e6e5e9e9e8e9f0f0f0eeeceae7e4e9e6e6e5eeecece8f3f1efebefeeedebefeff0eeeaeae9e9ecebe8e9edefedeae9e9e7e6e8e9e7e4efeeece9eaecebeae7e9ebe8f4f4f3f3f0f0f2f2eff2f4f6f4f5f9fbf6f5f7fbf3f3f5f9f7f6f9fbfefbfaf7f5f6f9fefcfcfcfefafafd00f6f9fe04fbfc000102fffdfcfafaf9fafffefdfefefefefcfcfdfefc0001020106050402000100010704040305040303fe0002040507090a0b0908091414130e1615140f0a0d11110f1112101b1819181717141312131312191614141c181615171615141c201e1b181d1e191a19191a22242422191b1c1e181c1e1d1e1b19191c19181a242023242d2c29272d2e2d2b202324252023232226282a2e1c1d21263a3a3d4227282a2f1f1f1d1e2624211f27282626212224241d201f1e1c1d2022181c1e1e1e1d1b1e1b1c1d1d131212161817181a1b1e211f0f1113101214141314171715fdff0000060a0a0e07080a100606080b080a0c0f02010206fdfc010305080809fbfdfd00f2f3f9fdf9fafbfcfafbf9f7f5f6f8f8f6f3f1f1f1edeae8e5e4e4e3edececebf4f3f2eee9e8e8e8edecedebe7e7e8e7e3e5e3e4e6e5e5e4e6e6e4e4e7e7e9e6eaebe7e3eaeae8e8e5e4e4e5ebe9e8e6ecebe9e6e0dedcdee4e3e4e6e5e6e8ebebebebebecebe9e9ecebebece9ededece9edececeaebecebe5e8e9e7e6e8e9e8e8e7e8e9e6e6e6e9e8e6e8ebf4f4f5f4f2f2f2f2f8f8f9f8fcfdfbfbff00fffcfefefefdfdfffefdfbfffffcfffffefefdfeff00000001030403030703000103fe000002fbfd0004ff03060afafe0309fbfb000500ff000204030300020305050302020304050405050505090a0805030601fefd090502040b0704020c0500ff0b0807061714120d110e0b06100d0b09110e0b0a1514110c171614111816161617151311191714141e1915141d1c19141b191917191a16171b1a1a17242627272728292828262828221d1c1d2423201d2d2c28272827262242413c3b2c2723201e2123221e20212025252323232220211f222122211e1c1e1e1b1c1d1d1d1d211d1d1d201a2023241c1c1e1f1e1c1d1c110f100f110f0f1114131310020205050b0b0b0c12111012101213141012100e070a080705060505090908070000fffc00fefdfcfdfbf6f5f8f9f8f8f8f7f7faf3f5f7f8ebedeceae5e8e8e7ebebebeaedefefeee7e8e9e9eaeaeae9e5e6e5e6e4e5e3e5e4e3e5e7e4e1e0e0e6e7e9ebe4e7eaece9eef0eee8ebecece9edf2f2e6eaf1f5dee0e7ece5e6e5e5e9e5e2e3eae8e6ebeaeeefefedf3f7f7e9eef1f3eaeff1f1e7eceeefe6e9eceee6eaedf0ecf0f1f3eaedf0f3ecedececf1efeff0efededeff4f4f3f1fafbfaf8fcfaf7f7fdfbf9f8fafbfafaf9fbfbfefdfdfdfffefdfbfb01000000080603020404040504060a09080a0a080e0b0b0a090a0706070708090205070a000204050404020300000003030305070908050205060400fbfdfefc0304020101000001fdfcfcfd050605050a08070604040505070604040707060409070709110e0e0f1715141112131614151716141414121112100f0b161516131818151313100f12231e1a1926211c1c292723221e1b17161e1c1c19292a2b29201f1e1b3b383836222125252224231c1f1d1f2022222726211f1e2023221e1d202222251f21211e262624212422211f241f1b1c1e1b1b1c1d1d1e2212161617151515130f101616090b0d0c0e100e0d131310101315110f0b0a0c0f050506080305050606050403f9fcfe00f9f9f8f7f6fafafbf7f9fafcfdfdfbfef7f9faf8e7eceef1e5e6e9ebe9ebeceeedeff1f2e7e8eaece7ebeff2e7ecf0f1e5eaededeaedebece3e8eaeaebedeceaebeae8e8eae9e9ebeaeae8e9efefefeef4f3f0efedecedede3e3e5e9e6eaedeeeeefeae7eeedeef0f7f5fafcf2f3f1efeff0f2f3eeefebe9ebe8e7e8edececedf0eff0f4efedecefececedeef2f6f6f9eff0f3f6efeff4f9f4f7fafdf6f6f7f9f9f9fbfbfafe0000fe010000fe020505fc00020201030607030608090506070207080803070707060d0e0d0d080909070a0a0704080701fb0300fcfe0003050805090b0605fef9f8ff000201fef9f5f4f7f8fc01fefbfdfd00fef9fcfdfcff0101fefafd0100feff01fdfbfc00fef9fa0004070d0600fdfe0a0401021011111414151112110f10131216161607080f14121216190e0f1016151616151c1a19191f1e1d18221d1a18181716161a1d1b1a251f1d1b1815130f3734291b25201d1b19191e1d22211e1b26201d1d232624202125231e231d1a1c1e1b181521201f1f2528282723272824242929232a2b2d271c1c1c191e2a2f29191b1e1c0c1520270f151815111211110f11100c0f100e0d0a0f0b0a080c0d0e03070c0bfffe0003f9f9fbfdfefefffefcfdfefeff00fdfbf9fafbfbf1f2f5f8ecedeff1eeeef0eff3f2f2f1f0f5f6f5f3f1f2f1f0eeeff1ecebebebe9e9e5e6e7e5e5e5e8e7ece9e9e8eae9eaebecece8e9ebeaededf1eeededecedededeff1ebebe9e9eeeeefefe8edf4f7f1f1efedfaf4eff0edeff1f3f3f1f0f0eaeff1f2ebf0f3f5eff3f4f3f6f4f3f2f2f6f7f7eeedf0f1f9f9f9faf6f5f6f9faf9f9f8fdfafbfcfcfdfefefcfcff01ffff00010000020404030203030102ff0807080a08080a0dfffe020502000305060503020c0907040808060303060603fbfdffff030808060401010002fe00fff9fdfe00fefcfdfdf5fafcfe01fffefffefd0003fafcfd010200fefe0106090d02090b0b0005080bfc0002070704050803080e11060b0e111212111013121010120f0e0f140f0f0e1714110f1a140f0c1613100c1514120b1b1b17111615120d191815131919140f1715100a1b1916150e0c0a070e0604021d1914101b18130f1b18140d1f1f1e181914100e161212101d1b1b1a16171515201e1a1625221f1a2322221e1e1d1c1c25211e1a181918191e1716151b1a181a2623211f0f0b0c0d121211110a0e10120c0e0b0a090d0b060e0f0c080c0c0b090604020200010102fefd0000fffefefffafbff03fbfbfe00f9faf8f9f2f5f7f7edefeff3f2f8fafcf4f6f7faf5f7f8f8f3f5f6f8f0f6f8f8e6ebeef2e8eaedf1eaebeff3e9e8ebefedededefeaeaecefedeaedefedeef1f5f1efeff1ebe8e6e6f0efededf8f8f7f7f1f4f3f2f1f3f5f6f2f3f3f5f0f0f0f0f1f0edecf3f0eff0f2f2f0f0f4f6f6f7f5f4f4f5f3f4f4f3fafbfbfdfbfbf9f7fbfbfdfcff000000fefefdfe0200000002020302050506060304050700000202070300fe0c07020008080704080a0905020404030505050502030304020203040002030307090909020203010000000100030509000306060003080e03090d110a121616070f1215010507091416171410131615101214120c0f13130e10131413121111121312100f1112121314120e111513120f0e0d0b0e0e0905100f0c040d0c0803050302000a080704050202060f0c0805060101010200feff0e07020102ffffff00fffbfb0b0806060b0a0a0909040301120908060c0b07030f0c0b071811100f100e0b08141211111514110f19150e0817110c0e15120f0b1817151413121313161714121a1715150a0604030f0b06030f0a050506040407010103040503020608080a0f0002050901020104000101040000020403070b0f0304080df9fe0105f7fafe00f6fafd00fdfffffffbfcfcfdf9fd0001f9f8f9fcf8fbfbfef3f6f8f8f7faf8f7f6f9f9faf2f5f9faf2f3f7f6f1f3f1eff2f3f4f6f7f8f4f5f3f4f0efe5e9edf2eeeff3f5f4f4f6f9f3f5f6f6f9fcfcfcf7f8f9fbf1f3f4f3eff2f2f1f0f1f0f3f1f2f4f8f7f9fbfdf7f9fafaf3f5f4f5feff00fdf7f8fd00fcff020300000203fefdfd00fffbfafa0100fdfc050202000402ff00000000fffefefe00fdfcfeff0200ff00010000000101ff00060908050303020205050403020200000704040300feff01020204070a0909090807060212110f0a1212110e13131111171915140909080b1314131414131415120f0c0c12100e0d13100b09100c08070e09080612100e0a0b0809070e0905020b0a0602020000fe010001000000fffdfefcfcfa02ff010005030201020000fe00fcfcfc000202000306050400000100fcfdfffe0605080704020204fffefefd0404030300020405060404000b090602060505030f0e0b090b0c0d0d050503010f0c08010a090705110f0908110f0906100b0b0d1611100f0302000007090a0a06080807070604040505040309090706131313101011121007090a0906080a0a08080b0c110e0c0d0f131411070b0f0f0102050901020202000205080001020301020506fe000003feffff00f8f9fbfdf7f8f9fcf8fafafefbf9fafbf7f8fafef1f5f7f8f8f9f9f9f6f7f7f7eff1eff0f5f9fcfdfafd0102fdff0102f9fbfdfdfbfeff00fe000000f4f6fbfef2f6fc00f8fe0000fcffff00fdff0002fd000203f7fafc00fbfafc0001010204020000030202050902020102fafcfd01fafafafd010001020000000000000000020408080001030400fffeff01020201020301ff040404030204050604060604fefe00000405080a05050405080809090b0d0d0d05070708080607070b090a090f0e0e0c100d0b0b0d0d09041513100a13100b080d0c0b070c0c080408080604080706010602fffc050200fc0402fdfbfffdfaf8fdf8f6f4fffbf8f300fbf8f5faf5f2f1fbfaf8f500fdf9f500fdfbf8fcfbfbf9fcf9f6f4fbf8f5f50200fefb0002fffcfefef9f7050300fd00fdf9f9faf8f7f6020101fd02fffbfafffcfcf9fefcfdfb00fefaf80300fcfa0e080300fffffdfcfefdfdfb0200fefe0401fefc030201000e0b08040f101012ff0002050a0a0b05060606030406060704060707060607050c0b0a090f0c0a0709090909090606060c0b0b0a0e0e0e0c0e0d0c0f0e0b0b0b0805020202010202090a090a04070705060405060101010500030507fe00030700030505ff010408fcfe0106ff000206fbfeff02f8fb0108f9fd0409f2f80007fefdfeff0300010103000000fdfdff0100000205ff0001030000010200020507020506070104060703050607030504070203030406090b0b05060402090b08050b0a09080302010203030404000102020302000100010002ff00000204010205050608080004060801020302fdff0204050506080303050500000206010000000a090808060504030b0c0d0e0d0c0b0c090b0b0b080a0907060400000a0b07040b08060602000103080708070707090804030504030302ff030101fffffd00fdfcfdfefdfbfcfd00f8f8f6f6f5f4f3f2f3eeededf2eeededf5f4f4f4f2f4f4f2f0eeedeef3f2f3f2f4f1f1f1f4eff0f1f5f5f4f2f9f9f8f5f9f9f9f6fafaf6f3f4f0ececf9f6f2f2faf9f8f6f3f4f4f6f7f4f4f7f8f7f6f4f6f2f0eff6f3f3f2f6f5f4f4fafaf9f7fefbf6f3faf7f3eef9f9f9f9fdfbf8f7fbfbf9f9fffdfbf902fefdfe110f0c0a04010002fffcfbfd00fffefd0706060604030201030200ff090807080400fffe0704000006060809080606061010100e1112110f0b0b0b0907090b0b06090b0d080a0c0e0505080e0a0c1110090e10120a0f1212090e1313070b10130c0e12130a0e1112090b0c0e070a0e10101312130c0b0d0f0b090604000002030504050303050a0b020307090606080704060506030506090807060707080808070808090a0c0d0b080a0c0a040504030c0b0b0802020202040606060b0b09070506090904040508030203030305040503020202020301010604020206040405070502020202000003020100080604000606060304010001000000fd09090909030202030b0603010e0b07080605040503020100fffffdff030101020501fffd02fefcfa0500faf80500fbf801fefefdfbf9f8f9fbf9f7f9faf7f6f9fdfaf8f500fffbf5f6f4f4f3f2f1f2f4f0f1f1f0edededf0f3f1f3f4f0eeeeedeef1f3f2f1f4f4f2f2f4f3f0eff1f1f2eff0f0eff2f2f3f4f3f2f5f7f1f1f2f3ebe9e5e5f2f2eeeff6f4f1f0f4f6f3f3f9fbfbf9f3f4f7f7f1f3f2f0f2f2f2f0f3f4f5f4f7f7f5f2eff1f0f0ebe9ebeaf7f6f4eff7f7f4eff8f7f6f5fafdfdf9020402ff0a0907050100fcf9fe030302fdfe00000608070602020200ff00020007070604ff0001000004070809090908080607070e0d0e0c0b0a0a0a0406090f09090b0e0d0e0b0b0e0f0f100e0e0a090f12111012131212101112141312100f1315121415151516121313120f101314131312111415120f0f1012120204080d06070706050607080d0f10120c0c0b0a07080a0b080a0f0e09070607070807090a0d0e0f0908080b0807080d0b0b0d0e05090c0d090b0d0f05080b0c070a0c0b080a0b0a0b0e0f0e0b0c0d0b0404040905050708030507060203020204030304060504040100fffe0000010100000000fefd0002020101030000ff00fcfafafc0a09070606050403000000000a0b0906070503010101010002030000040401fffefefdfdfcfefdf9fafaf8f8f7f8f8fbfefdfefdfcfdfdfefaf9f9f9fdfcfaf8f5f3f1f0f3f3f1eff5f4f3f0f6f7f5f4f1efeff1f2f3f1f0f5f2efefefecebebefeef0edeeecece9eeebeae6f0efede9ecebeaecf1eeebebf6f5f2eef2f1eeede4e5e2e1f0f3f3f0f0f3f4f4eeecebeef7f5f5f6f6f4f5f3eef0f1f1eef0f2f3f1f1efecedebe8e5efeeeeece7e7e6e7e8e6e8eceae8e9eaf1f0efeff4f1eff0fdfcf8f302020000f4f5f4f5ff00fe0000ff00ff00fefdfffffefcf9fdfbf8f801fefcfdfdfaf9f70502fffe03010000070605020d0b0704080505070f0f0c0a0f0c0a090b0a0a0b0f11100e080b0e0d0e0e0e0f13141514181819131112121116181715161616160f0f0d10141414141011100f0f101212141515131111171b05040303090a0907130f0b090d0d0f110c0f100f0e0d0e0f0b0e100f0a0f10110e0d0e0d0f0f0d0a1113100f10100f0e0d0e0e10111514130b0b0b0b0c0b0d0c0b0f10100a0809080907090a0909080a06040305030202040000020302020001030405040006070602030200ff0002020406080905080a0803070a0900040403060402000300fffd0001010004020100fffffdfe0000000000fffcfc00010100fc000101f7f8f9f9fafbfbf9fdfefdfbfcf9f9fbfbfaf8f8f9fcfcfdf7f6f6f7efeeeff0eeeff2f8eef0f3f4f6f8faf8f5f9f9f8f1f5f8f7f3f7f8f6eef2f4f3edeaebe9e7e8e9eae8eaedece9eaebeaebe9eaeaecebecedeae8e7e9ececebece1e3e8e7efebebebf3efefefefededeef3eeececf1ededebefeeedebf0edececeaebeef0e7eaeff3ebebedefe8e9e9e9ededefefe8e6e5e7edebebeceeefedecf0f0f2f3fefcf9fbf5f5f4f3fefbf8f7fcf9f8fa00fffefcf8f6f6f5f8f8faf7fefdfcfcf7f5f7f5fdfcfcfd0001010000fffefd030507070707080709090a0b090909090c0e0f0c0b0a0b0d0a0a0e100e0e101312110e0f0f0f0f0f0f11110e12100e0d1512110f11100d0c1411100e1111101012111111100c0a0a201d1c1a060a0f0f06060605080909090f0c0907100f0b070d0c0e0e0f0f0d0c0f0c0a0a0a070507080605050a0806020d0c0a0911110c0711100c09090706050a0703020b0602000402ff00070300000904fffd060707060201010200fdfdfd000001010200010200000000fbf9fb0000fcfdfe060401010401020306020000fffdfaf70000fcfbfdfaf7f6fefcf9f7fefdfafafaf8f6f8fefcfaf9fcfbfaf8fefcfcfa00fcf9f7f6f5f6f8f6f3f3f5f8f6f7f5fbfafafbf7f4f6f9fbf9f9f8f8f8f8f9f4f3f2f1f8f8f8f7f3f1f4f8f6f3f5f4f3f1f0f0f4f1f2f5f4f4f6f8f1eef0f0eaebedf1e9eaeef3eceaeaebedeeeff0ededeeeeeeeff0f2edf1f5f6efeff1f3e8e6e5e5eff1f2f0f2f4f4f3f1efedebeff2f2f2eff2f3f4ececedeeeef0f2f1f3f3f4f2f4f4f4f3eeeef0f2e9e9ebedf2f2f3f4ebeef0efedecedf0eceff1f0f4f5f6f9fdfffffef7f8f7f7f9ff0100fafbfbf9fbfbfbfaf7fafcfef7f8fafdfe00ff00f9fd0001fe00020201020301fe0205060605060807090a0a0f1111110a0b0e0f0a080a0a0e0e0f100f0d0b0b130f0b080d0d0d0c1010110e0c0c0c0b0e0f12121011110f0c0c0a090f111110100f0c0c0f0e0b090b0c0b0e140e090c1013141106080a0a090d100f080b0f0f06060b0f0e0f11120b0c0f0e0a0b0c09090b0c090708080500ff0102060300020200ff00050100020303040402020204ff0000040001030200000000fbfcfdfe0401030101010102fdfbf9fa00fefcfc0100fffefffefbfc0100ffff00fefdfdfefdfc00030100000000fffef4f1f1f5fbfeff00f8faf9f9f7f6f6f7fefefffef9fbfbfbf7f6f7f9f5f6f7f8f6f4f4f8f5f2f3f7f7f7f5f5f6f6f6f4f5f5f6f8fcfcfafafafafaf9f8f8fbfbf9f8fbfdf2f3f5f8f7f7f7f8fafcfaf9f6f9f8faf3f5f7f8f6f7f7f6f9fcfbfbf1f4f5f0f5f6f6f3f6f5f2f1eeefededf1efeeeff0f1f5f6f4f3f4f6f7f7f4f3f5f3f1ede2e1e0e0efedecedf4f3f2f2ebe8e9eaf2f0f0eef4f4f2f1eeeeededf0edebeaf1efeeecf0eae9eaf3f2f1eeeeedeae7f1ede9e7eeeeebeaf0f1eeedeeecebedfbfaf7f4ff00fffff7f7f4f400fffffcf8f9fafaf7f7fafffcfefe00fffffdfc010300ff020100fd020200fe00fffdfe060502000807030007060504100e0d0c0e0e0c090a0707071212100c0c0a0a0608090b0c0d0e0d0b0f0f0e0b09090907100f0d0b0e0e100e08090c0d0e0e0e100c0f10100a0e12151318181814181e220a09090d080707090e0a08070d0a060513110f0a12100e0d0b0d0d0e090707060805040205040303030505040303010103050502080909050502fffd050200ff05030101020100ff01030200010205040100000001fffd00fdfcfbfafdfcfcfafefdfefdff00fffd00fefbf8fdfefdfc0102020300010201feff0100fbfefffd00fefcfbfafbfcfafafcfdfefefcfbfafbf9f6f8f8f9f7f9f6f5f4f5fafbf8f8fbfcfdfef7fafaf9f7fafdfdf9fbfcfcfafaf9f8f7f5f4f3fafaf8f8fbf8f6f5f9f5f1eff9f8f5f3f9f9f6f2fbfefd00f9fdfdfbf7f6f6f6f7f9f8fbedf0f5f8f2f4f7faf3f8fc00f0f6f9fbf0f0f2f2f6f3f3f4f9f9fafaf3f4f7faeef2f7f8e3e8ecebeeeff0f1f2f2f4f4eeeff0f0f0eef0f2eff0f0f1eef0f0ede9eaeceae9e9eaedeaebeef0eae9eaf0e6e5e6e7e9ecefeee6e6e6e9ecededefefeeefeef4f4f4f4fe000000f4f6f7f7fbfafbfdfafbfd00ff000001fefefd00fcfd00fffdff0002f9f7fafefbfcfd00fdfe0000fefeff0100000304050606060a07060606060709090a0a0a0b0c0b0a040506060a0a0b0b080706080707080908090908070606090b0a0b0c0c0d0f100f0f0f100f101113171717171818161427221b140e0c0905070602ff070806030404050405030200090705030a06050206050200030301000403020205050505030405050100010102020102fefffefffffefefc020100ff000000ff00fefffe0200ffff0103020102040302fafcfe00fd000403fe000306fbfcfe00fafbff00fbfcfbfc02000001fffcfe00fdfafafcfaf7f7f8fcfdff00fafcfe00fefefefffcfc0001f9fbfefef8fafafafbfbfbfaf9fbfbfbfcfafbfbf9f9faf9fbfcfcfbfdfbf9f8f7f8fafdf4f5f7f9f9f9f9faf6f8f8f9f1f2f2f2f3f3f3f0f1f5f7f7fdfcf7f3f5f2f1f1f5f7f8f7fbfaf9f9f8f6f5f5fcfdfdfeffff0003fbf7f8fbf4f3f4f7f5f5f6f9faf7f6fafbfcfafaf8f8f8f8e9e9e8e7f3f6f4f4f7f9fafaf0f0f1f2f3f6f6f9f2f3f3f5eaeaeeefeaedf0f3eeefeff2f2f2f2f0f5f7f3eee9ececebeeececeeebedeceef1f2f1f0eeededf0f5f7f8f9fefd0001f6f8f9faff000101010101000100fefe01010000fefefe0104040201000201ff0000020300010305030607080507090d0707080508090b090908060409050300080706060506050409080607090808070807060806050506090605060a0808090b0603050e0e0e1014171714191a1918131516171619181cfff7f5f6fbf7f3f200fefcf801fffcfaffffffff01ffffff00ffffff00fffefb0000fffb020201fe050402000303020001020100010101010000fefdfcfcfdfdff000000fdfdfcfcfffffefdff00ffff01010202020204040000fffe03ff0000080707070004040500010202000305030405050402030303ff000101f9fcfbf903010200020404020000fefd03010000fefdfbfefafafbfcfbfdfdfdfefe0103fdff0102fafafdfffbfdfefef8fbff01fdfe0000fd000100fbfcff01f9fafcfff5f9fbfcf2f5f8faf2f4f8fcf1f3f7fbf1f1f1f4f5f4f5f5fbfcfefff6f8fafefefeff0003030100fbfafafbf7f8f8f9fbfcfcfbfafcfbfcfcfdfefef5f5f4f6e5e2e3e8f3f4f2f1fdfefdf9f5f7f9f6f8f9fafbf7f9f8f7efeff0f1f5f5f6f4f4f5f7f9eef1f3f6eaecf0f4eaebeceef1f1f3f2f1f4f5f4f3f7f9f9f1f3f4f6fafbfbfd03040507f9f8f8fb01000000fffdfdfefefefeff0000feff0303030203040406fcfcff000401000206050608090909090e0c0807050304050603020103020000fffdfbfb040400fd04030201060707060807060508070608060608090708070708060809060808080e0c0b0b100d0b0c14131011161513121d221b13f9fcfaf8f2f2f0eff5f3f1f2faf7f6f7fefdfbf9fffdf9f7fdfaf6f6f9f6f6f8f8f6f5f6f9f7f7f7fefdfbfbfefaf9fafefbf9f902020000fafbfcfefdfdfeffff000001fe000000fdffff00fefeff000000000104020101ff00000003020101070808050402040500ff010401000205050707060508080701010102f9f8fd00fffeff01fffdfcfdfeffff000205040400040304feff0203fdff00010404050404060404fe00ff00fffefeff00fdfbfcff000002010003030202030201020303fbfdfe00fcfd0000fdff0102fd000000f7fafdfcf8fafafbfffeffff00fefdfc01000001fffcfefefbfbfcfcf8f7f8f9f9f9f9f9fdfdfafbfefcfbfbf7f9faf9eaeae9e9f0f1f4f4f8fafafbf7f7f9f8fd0000fef6fafdfef4f7f8f7f4f6f9fbf8f8fafdfafbfcfcf6f8f9fbf0f2f3f3f3f6f9faf4f4f5f4f9f7f8f7f8f8f7f7fdfdfdfe07080607fe0000fdff0002040001020301020504ff01020302040303080a0c0b000407090409090c0a0f11110b111514090c100f070708070404050500fdfcfafcfcf9f9fcfbfbfc0100fdfb0601fffe0604020209070304080506070806080a0b090708090705050c0909090b080606100f0805100c07050c0907064300cc000f0000009b9a999796959392918f8e8d8b8a898786858382817f7e7d7b7a797776757372716f6e6d6b6a696766656362615f5e5d5b5a595756555251504e4d4c4a49484645444241403e3d3c3a39383635343231302e2d2c2a29282625242221201e1d1c1a19181615141211100e0d0c0a0908060d7200000ca3100b12208ea21c83d44cd3235915656118a66dd95469d45551d72549d19265d0756d9de6791d3569d9e67999d451228871dec66dd7b6695cb769d5453918f65094f45496c631cc645dd7d43845911800a130 -''') -assert expected == actual -sensor.process_calibration_results(bulk_xfers[2]) - -# Validate calibration results? (no feedback to calibration state) -actual = sensor.build_cmd_02(CaptureMode.CALIBRATE) -expected = unhex(''' -027800a10223000000200008000020008000000100320074000000008020200400242000005020773628200100302001003c208000082138000c210000482107004c210000582000005c20000060200000682005006c20014970200141742001887820018084202000942001809c200902a0200b19b4200300b8203b04bc201400c0200200c4200100c82002003300100000000080cc200000f503d0200000a1013200440000000080dc20e803e0206401e420d002e8200001f0200500f8200500fc200000b8203a00000804001408000008080000080800001408300008080000140831001c081a0032000c0000000080501101004c111e0034007801e7f4f6f3f1f4f5f6f5f1eeeceef0f5f6f7f8faf8f7f7f8fc00040d10111111131515141211151a1e1d191a1a1b1c1b1813101012161617161514120c06030200fefbfcfafbfaf8f3efecededeef0f2f1efeeefecedeaeae9e9ebedf1f5f6f5f3f2f4f6f9fcfcfdfefdfeff000100000110232e10232e10232c10232c10232c01065010250101000007c8078c06ff0000000000004f80006d0300280307030990098db00b90880991858e08c1810b9190910ac1b8928a0993878a890b9388898908c88191890ac8889289099a818a890b9a88898908d08191890ad08892890802818a095a810a0288890b5a8808d98189890ad9908989095e8289890b5e88898908e18189890ae190898909648289890b648889096e8108e981890b6e880ae99091b9096f828a8f0b6f88918908f0818a890af090898909768289910b76b8918a08f88792910af8888a92097c81898a0b7c09018089890b01888991097f8189920b7f09088089920b088889920c07030307200402000000002f00040070000000290004007000000035000400800000001700000044000400010000003000f4311e000000ff0000008d002007ff00000095003007ffffffff00000085ffffffff04000085ffffffff08000085ffffffff0c000085ffffffff10000085ffffffff14000085ffffffff18000085ffffffff1c000085ffffffff20000085ffffffff24000085ffffffff28000085ffffffff2c000085ffffffff30000085ffffffff34000085ffffffff38000085ffffffff3c000085ffffffff40000085ffffffff44000085ffffffff48000085ffffffff4c000085ffffffff50000085ffffffff54000085ffffffff58000085ffffffff5c000085ffffffff60000085ffffffff64000085ffffffff68000085ffffffff6c0000856f34120a130f0f1011100f10140d0c0b08080c0e0e0b0f0f1a0f0f11120f12160c0e0e110f0a080a0d090a0e0b05080b10070c10030a0f130507090bfcffff02ff05050500020405faff0003f9020404fb040604f9010404f6fe00fef3fdfefdeff9fbfdf0f8fafbf500fefeeaf6f7f7f0fbfefff4f7fcfff3f6f9fd140f00fdf6fbfdfdedf3f6f7edf0f3f4f1f5f5f7ecf3f6f7eef5f6f5f1f5f6f5f2f3f7f9f1f1f2f2f7f1f3f2f3f5f2f3ebf3f4f2f3f2f5f5eaeff0f1eef5f5f4e7f2f3f3e6f2f2f1f7fffefbf700fefbe7f4f6f6e9f6f5f2f2f4f3f3f5f5f5f4ebf5f5f1e7f4f6f3e2f1f3f2dff3f7f8e1f5fbfbe4eff2f1ecf1f4f5e1f1f5f4e8edf1f6f4060504e2f4f5f4e8f3f6f8e1eff1f1e2f3f7f9e5f3f5f6e7f5f7f8edfbfbfaf2fe0000effefffef0ff00fc131101fbedfdfdfbe7f9fbf8e1f0f3f1dfedf1f1e9f2f6f6d9dfe0e1e5ecedeff2f3f5f3e7f3f4f1eaf7fbfaf2f5f8f9e8eff4f8edf6fafdf0f3f4f5f2f4f6f9f0fafdfcf3fefffef301010304110905090a0906ffff0405fc060707fd090d0dfd070709fe0c0c0d010a0d0d0205090a020608050d070a070d05070605040606080203020bfdfdff07ff00020a0201056f2909080f151e22100e0f130f0d0e130a0f13170f1011131011131414171a1a18191714111213120d1214160d0e0d0e0a0707080f0e090714100b0a0a080604070a09080506080a0504040705060505020000020200ffff0300fffffbf7f6f7fefcf9fafffffcfcfafaf9f9fcfaf5f3f6f4f3f1fdf9f4f10201fffbfffffdfefaf9f9f9fefefcfcfbfefefff6f9f8f7f8fafbfaf6f5f6f8f4f2f1f2f5f3f2f2faf7f7f8f1eff0f3f3f0efecf4f3f2f0f4f5f5f4f5f6f8f9f3f7f9fbf3f2f1f3f3f2f2f3f1f1f1f2f8f3f0eff8f2efecf6f4f2f0f0edeaebf4f3f1f0f8fbfbfaf0eff1f3f1f4f5f6f2f4f6f4f6f5f5f3f8f5f5f5f0f1f5f6f1f1f1f3f1efeeeff3f2f1ef00fcf8f6f0eeefecf6f7f5f3eff1f2f2f8f7f5f4f8f8f6f5f6f5f2f1f8f8f8f7ff00fefcfbfaf8f8f8f8f8f9f9f9f9f8fafafafbf6f8f9f9f2f4f8f9eff0f3f6f7f6f7f9e3e7eaebeef0f2f3f2f4f8f8f0f1f8faf5f5f7fafafafbfbfbfcfdfcfdfe0002f9fcfcfcfdfefdfcfdfefefefefefdfd04060503010000000505050307050705040301010c0a0705090804010d0a07050e0e0d0a0c0d0f0f0808090808090b0a0a0e0f100604040605050506010406070303030205040102040300022222201e181a1a19181b1a181c20201f1618191a141515171a1a1a1c16191c1b120f0f0f161312110d0b0b0d0908080a06070b0f0b0c0d0e0403060908080c0d0c0c0d0a070604020607060503030405fe00010200020506fbfcfefffbfdfefffbfbfcfef8f7f7f6f4f5f7f6f5f7fcfcf3f9fe01f9f9fdfefefefefef8fafaf9f9f9fbfdfbfafaf9f6f7f8f9f5f3f4f7f7f6f6f7f2f5f5f4f4f6f5f6faf9f7f5f6f6f2f2ebeef1f3efeef0f1f6f6f5f3f8f6f4f4faf9f7f5f3f4f3f3f3f2f4f4f2f1f0f0eff3f4f7ecf0f3f7efeff0f2edf2f4f3f0f2f3f3fafaf8f8f2f1eef0f5f1eeecf3f1f1eff1eceaecf3eeededf6f3f1eff3f3f2f1eff0f0f0eeeaeceef7f7f8f9ececeeeef4f2f3f2f0ececeff1ededeef5f4f2f0f1f2f2f0f6f3f3f2faf7f8f7f8f9f7f6f5f3f1f0f6f4f2f0fbfcfaf7fafaf7f6f6f2f1f0f7f4f1f0f9f7f7f6ebebebe8f6f6f6f3f7f7f5f7faf6f3f4fdfbfaf7faf8f8f5faf9f7f50201fffcfbfaf8f6fcfcfaf8fbfaf7f6fbfaf8f7020200fe00030200030404030504030300000002030302040203020203050202070504050d0c09070707050408080706121211100809090908090a0d080a0d0f0405080d0405090f070910131d1c1d1d1a1b1d1e1716171b1b18141218151111161414141a1717161b1a1a1b12131818111214151011100f0d0e0d0e100d0b0a1113130f0f100f0f0e0d0d0f0a090a09040708080304060504060706040405070404030200fffdfd00000000fefe0000f7f5f7fcf5f5fafdfcfaf9f70302fffd000202010000fffdf9f9fafafbfbfcfef7f5f3f4f7f5f3f3f7f7f8f8f6f5f5f4f3f4f3f2f6f7f6f3f6f8f6f3f1f4f5f4f4f6f6f6f1f3f3f3f3f4f4f5f4f5f5f7f0efeeeff0f1f2f1f2f2f1f2f0f0eeedf5f3f1f1f8f7f6f3f1efeff0f2f1f0eff2f1f2f1f6f6f8f8f1f5f7f8eef0f5f6eeeeeeefefeff1f2f1f3f4f3f0f2f2f1f1f1f0f2f1f2f1f2efecebebfafbfaf7eeeff1edf2f0eff0f0f0eeeff1f2f6f8f0eeeff1ede9eceef3f4f5f5f5f4f4f5f5f4f4f6f2f6f9fbefefeff1f4f5f7f8f6fafbfbf1f1f2f1f0f1eff0f6f8f9fae7e8e8e9f2f1f3f5f9fafbfaf5f5f2f3f6f5f6f3f4f3f4f3f4f2efeefaf9f9f8f7f9faf8f9f9f9f9f6f6f8f9f8fafaf9fbfbfdfdfe000000040709080304030403040605050608080000010402030305060709090504040305030202050607070e0f0c0c090806070f0f0e0d0f0d0807100f0d0c13141413181617192223261f1d1a17131c1a140e11111011110f0d0c13100e0d1514111118140f0f18161512131211100e0f0d090e0d0702090a09080d09090a0e0a08050c09080706050305060504040301000002fffcfe0604020002010000fdfefe0000fefdfd00fdfbfefcf8f5f6fbf8f5f5f7f7f7f7fbfbfbfefefcfcfefaf8fafdfafaf9f9fefdfefcf7fbfcfbf3f4f6f7f7f8f7f9f4f6f8f8eff0f1f5f2f2f1f2f1f0f0f2f1edeceff4f3f1f3f3f4f5f7f4f6f8fbf7f7f7f8f1f3f5f8efeef0f4f1f0f1f5eeeff1f5f4f7fcfef3f5f7f9f4f5f7f9f0eff0f5f1f0f2f3f8f8fafff7f7f8fbf7f8faf8f3f7fafbf4f6f8f9f5f4f7faf0f0f3f7f1f0eff3f0eeeeeeeaedeef0f4f5f9fbeaebeff3f0f4f6faf1f1f4f7faf7f8faf7f8fbfef1f2f5f8f2f0f2f5f6f7fafdf8fbfbfdfcfafcfef4f7fb00f9fbfd00fafbfcfef2f6fcfff1f5f9fffafbfe00ebecedf0f4f4f7fafbfd0002f5fafefef3f6fc01f4f7fbfbf0f5fafbf9fbfefef8f8f9faf9fcfefdfafbfcfcf9fafdfbfffefe00ff00010107090c08060b0d09050708060a08090607070606080808080b0b0d0704080e0c04070707080808060d0c0d0d070604040b090805060807020a0705040e0701ff1409fdf91a17130e0f0c0905080608080f0e0d0b0a0a0b0b080606080e0a08070f0d0b08100e0d090e0c0b0a06070707fffefdff0501fffd0807040205040303050303030403020201fefcfc0000fffcfffefcfcfffdfcfe00fefcfafffcf9f8fcfaf7f700fffefcf8f9fcfef5f5f8fcf7f8fafcff000101fdfdfcfffefdfdfef8fafefffcf9f9fcfaf9fbfbf6f7f9fafafbfbfbf8f8fbfcf8f9f9faf4f4f6f8f6fafdfff1f7fbfef7fafcfefafcff01ff000103fbfdff00fbff0001faff0000f9fc0001f7fafe0000000204fafe0102fe000002fafe0000f7f9fd0002050406fdfefe01f7f7f8fcfcfdfefefdff0100fe000003fd000101f9fdff00f3f8fe02f2f7fbfeff040609f8f9f9fafbff0001fafafbfbf9fafafcfffefbfcfbfdfefef9fcff02000204060103070900010203030301010506040200000102000100ff020201ff03010100f2f4f4f3fcfaf8f800faf8f9fffdfcfb030300fdf9f8f9fafaf9f7f5fffefefbfaf8f7f5fdfefefafdfffffefbfbfbf9000000ff00fefefd01fefdfd0300ffff0301ff00030201040605050308090805050505030702fdfe06040101040100000d0a05010504010003010101fffe010300ff0002fefd0103f6f7fcff070400fb030200fd0501ffff090400fd0a070301070400000601fefc06030100070503010600fcfb0401fefdfffffdfefcfbfaf9010201000100fefb01fefaf50100fdfafdfefcfbf9f8f6f7fdfcfbfbff00fffefbfbfcfef8fafbfdf9fcfefefdffff00ffff0001ff000001fcfafafb020001010002010202020001fefcfcfdfefefdfefbf9f6f8f9f8f9f9fcfeff01fdffff00fbff0003fbfeff0000010103ffff00030104050304050202030304070200000301010204000103070205080c0202030504060607040606070205060a04060a0d04080d0e080d0a0a0407080b00050d1000050b0f00040b11050a131903070e130408101105090f12000104060c13191cfd02070a03050a0dfd00080f02060a0bfe000407fdfe04080305070806070b0e090a0d100507080c0203070b03040b1205081015ff000308fe00030500020504f1eff0f1f7f9fbfefdfdfbfbfbfafaf8fbfcfbfcf8f8f7f5f5f5f9f7fafafdfef7f6f8fbf6f5f7f9fcfbfbfbf8f9fafbfefdfcfdfbf9fbfbfcfbf9f9fdfaf7f7fdfbf9f80201fffc0201fffd05060706020401feff0100fe010200fc010100fc000000fcfffefdfb02fffefb01fbf6f301fefaf80500fbf5fffcf6f0f5f3f3f5faf9f7f6fffdf9f5fdfafaf800fdf7f4fcf9f4f2fbf9f7f8fffbf8f5fcf8f4f3f8f8f6f2fbf9f8f5fbf7f0edf6f4f3f2fdf8f5f3f7f4f0eef5f5f4f3fafcfcfbf9f8f8f8f9f9faf9fcfdfafafdfcfbfafefffdfcfdfbfafafcfbfafd01020505000001010100fefcff0204020406060305080909040a0e0e00040405fdfeff02fcff0001fcfe01010101010200020204070a09070205060604070a0c06070709000204080407070e080e1111080c0e0b090e0f0e0b0f100e0f111213090e10120d11131206080a0f0d1215190f1215170d0e0f130c0f14150d11131411111113121317181415151617141316161817171513121213141213080a0d0f1d1d20230d0a0f1514181a1c141518190f1015180c10171d0d1115150a0d12160f13181c121312130d1011120f12141414131314171515140c0e0f0d070709090404080cf3f6faff00010407ff030808fc000405fd0000fff6f7f9faf8f9fbfdffffff00fcfcfbfcfbfcfe00fcfcfcf9fcfafbfcff000100faf9f9f9fafaf8f7f8f5f5f2f7f6f4f2f9f6f7f7faf8f6f502fcfafafbf7f5f6f9f7f6f6f8f3f3f3f7f3f2f3faf8f8f7f9f6f3eff8f4efebf4f1ece8f7f4eee9f1ede9e7e8dfdad9fafefefaf6f8f9f7f4f3f5f4f8f7f7f4f2f2f2f0f3f3f2f0f8f6f4f1f4f3f2eff1edeae7f0efefedf1ebeaebeceae8e8f0edebeaf2f0f1f4eef0f1f4f4f6f7f7f9f8f8f7f7f5f6f5f8f7f7f7f7f8f6f7f9f9f9fbfbf9f9fafaf8f8f8fefbf8f901fdfcfd00fdfbfbfbf9fafbfffafbff020000ff080604020a06070904060707050709080505090a0001050a0306090a060809090506080c06080f130d0e14170a0c0d0f0a0b0c101115181c11151c1d0b0e15170f1216180d0e131516191c1d14181c1d14181d1e1414171a1c1b18181918191a151618191618191b161818161515141217171a1d1618181b191d20231618191914181816161c1e1e1218181827292c2d1c1e1a172023201d1c1b1a181d21221f2023211d1617181a161615181c1b1b1c131310131311101012100f10110e0c0d13130f0b0b0a0b06070402020f0e0c0a04030100070606070908080803020405fdff0004f9fbfc00fbf9f8fa000100fefafbf8f8fdf8f4f4f5f3f2f4fcfbfbfafdfbfafbf9f6f7f7f7f7f7f4f1f1efeef0eeedecf6f4f2f2f3f2edecf7f3edeaf4f4f1edf7f8f7f3f5f4f1eef3f2efedf6f2eeedeceae9e7ebeaece9e9e9e8e7e8e7e7e7eaeaebecdadde3e8f5eeece8f3f0ededf3f0f0f3f2f1f0f0eeeeedeeedecebebf0efeeeeece8e7e9e4e2e5e7eae8e6e6ebededefeae9e9e9eceae9e6f4f4f4f4f4f2efeff6f2f0eef7f7f6f5f6f5f5f6f6f6f5f4f8f7f5f6fdfefefcfaf9f7f6f9f9fafcfd0000fdfffefaf8fafafafafe00000300fefbfbfefefefe010101ff0b0703fe0602020108050303090602010908070709090707070401ff0f0b07051412100f16151214101113161314110d1e1b17121d1c1d1e1a1817181a181814181a1c1b1e2122211f1c1b17201a17181e181413181b1b1b1c1d1d211c1e1f1c1d1d1c1915171c1e11151a1e1f2224251f262b2d272e32321a1b1d1f1717181c1f242626191d211f31393d3f1c222929191d2122171d22261e23262b1d2021211a1b1c1c1c1f1e1e1c1b1818181e1f1f13191b1c11151516101316170c1016180404080b04060b0e0c0d1011000100ff0707080608090a08050506060506050703060603fd020200fbff0005f7f9f9faf4f4f2f2f4f6f5f7fafaf8f7fdfcfaf7f7f8f8f8f2f1f2f2eae9e6e6ecedefecf3f5f5f4ecf0f1eeeaebedeeece9e9e6ece6e4e3eae8e6e5ebe9e7e6eceae7e5e6e7e6e7eae8e8e9e7e7e6e5e7e8e8e9efeff0eeebeae7e3e8e6e6e4eeecebe7f3f0edebefeeecebefeeefede9e9e9e8ecebe8e8eceeede9e9e8e6e5e7e8e5e4eeeeebe9eaebebeae7e9eae8f4f3f3f2f0f0f2f2eff1f4f6f4f5f9fbf5f5f6fbf3f3f5f9f7f6f9f9fefbf9f7f5f6f9fefcfcfcfdfafafd00f5f9fe04fbfc000102fffdfcfaf9f9fafefefcfefefefefcfcfdfefc0101020106050402000100010704040306040303fe00020405070a0a0c0a09091416130f1717140f0b0d1311111113111b19191918171513131414121a1715141d191716181715141d201f1b191e1e1a1b1b1b1c232526221a1b1d1e191d1f1e1e1d1a191d191a1a242123242f2c2a2730302d2d212525262024242427292b2f1d1e22273d3d414728282b2f201f1e1f2726221f28282728222224261f2120201d1f2023191d201f1f1e1d1e1c1d1d1e141313171818191b1c1f211f101113111315151515171716fdff0001060a0b0e07080a100606090c090a0d1002010206fdfc010305080809fbfcfd00f2f3f9fcf9fafbfcfafaf9f7f5f6f8f8f5f2f0f0f1edeae8e5e3e4e2edebeceaf4f3f0eee8e7e8e8ecebecebe7e7e7e6e3e3e3e4e5e4e5e4e6e6e4e3e6e7e9e6eae9e7e3eaeae8e6e4e4e4e4ebe9e8e6ecebe8e5e0dddbdde3e3e4e5e5e4e7eaeaebebebebe9e8e8ebebe9ece9ecebece9ececece9eaecebe5e7e9e7e4e8e7e6e8e7e8e9e6e5e5e9e7e6e8eaf3f3f4f3f2f1f2f1f7f8f9f7fcfdfbfbff00fffcfefefefdfcfefefdfbfffffcfffffefdfdfeff00000001030504030703000103feff0103fbfd0004ff03060afafe0309f9fa000500ff000205040300020305050303020304050405050506090b0905040602fefc0a0502040c0704020d0600ff0d0808061815120d110f0c06110f0c0a120f0c0b1615110d1817151318171716181614111a181516201a15141e1d1a151b1a19191a1a17181b1c1b182526272728282a2929282a29221e1d1d2524211e2f2d2a282a2826224845413f2d2824211f2223231f212220262524232322212220222223211e1e1e1e1c1d1d1e1e1f231d1d1e201b2124251c1d1f1f1f1d1d1d11101110120f0f1214141410020205050d0d0d0e12121112101315151212110e080a0807050606050a0909070000fffc00fefdfcfdfaf6f5f8f9f8f8f8f7f7faf2f5f5f8ebedeceae5e8e8e7eaeaebeaedefeeeee7e8e8e8eaeae9e9e4e6e5e6e4e4e3e4e4e3e3e7e3e1dfdfe6e6e8ebe3e7eaebe7ecefeee8eaebeae9ecf1f2e5eaf1f4dde0e7ece5e5e5e4e7e5e1e3e9e7e6e9e9edeeeeedf3f7f7e9eef0f3eaeff0f0e7ecedefe6e8ebede5eaecefeceff0f3eaedeff2ecedececf1efeeefeeededeef4f3f3f1f9fbf9f7fbfaf7f7fdfbf9f8fafbfafaf9fbfafefcfcfcfefefdfbfb0200ff00080603020405040505070a0a080a0a080f0d0c0a090a0706070809090206070a000204060404030400000103030406080a08050205060400fbfdfefa0305020201000001fdfcfcfd070605050a0807060404050508060404070707040a08080a120f0f0f1816141113131615161816151515131312110f0b171516131819161313101012241e1a1927211d1c2a2725231f1c18161e1c1c192a2c2c2921201f1b3d3a3a3b222326252424241c201e1f2124242727221f1f2025221e1d222324272122221e262625212523212026201c1d201c1c1d1e1e1e2213161617161516140f1217180a0d0d0c10100e0d131511111515120f0c0a0e10050607080405050606050403f9fcfefff9f9f8f7f6fafafbf7f9fafcfcfdfbfdf7f9f9f8e7ebeef1e4e6e9eae9eaecedeceef0f1e6e8e9ece7eaeef0e7ebeff0e5e9ececeaedebeae1e8eaeaeaedece9eae9e8e8eae8e9eaeaeae8e9efefefeef4f3f0eeedecebece2e3e5e9e4eaedededefe9e6ededeeeff7f5fafbf1f1f1efefeff2f3eeeeebe9eae8e6e7edecebedefeff0f4efedebeeeaebededf1f5f6f9eff0f3f6efedf4f8f4f7fafdf6f6f7f8f7f9fafbfafe0000fe010000fe020506fc00020201030607030608090506070208080803080707060d0e0f0e08090a070a0a0704080701fb04fffbfe0003050805090c0705fdf7f8ff000201fdf9f5f4f7f8fc01fefbfcfd00fdf9fbfcfbff0101fefafd0100feff01fdfbfc00fef9fa0004070d0601fdfe0b0401021212121414151214111111141216171708090f151212161a0e0f1116161617161c1a1919201f1d19231f1b18181816171b1d1c1a27211e1d1915130f3b36291b27211e1b1a1a1f1e24221e1d27211d1e242725212226241e251f1c1d1e1b18162221202026292a2924282926262a2a252b2c2e281d1c1e1a1f2b312a1b1b1f1c0c16212810151916121212121011100d10110e0d0b100c0a080c0e0f04070d0dfefe0003f9f9fbfdfdfefffefcfdfefefffffdfbf9f9fbfbf1f2f4f7ebedeef1eeeeeeeff2f1f2f1f0f4f6f5f2f1f1f1efedeff1eceaeaeae8e7e5e5e7e4e5e5e8e7ebe9e8e8eae9eaebebece8e9ebeaecedf1eeececececededeff0eaeae9e9edededefe6ecf4f7f1f0eeedf9f4efefedeff1f3f2f1eff0e9eff1f1eaf0f3f5eff1f3f3f6f4f2f1f2f5f6f7eeeef0f1f9f8f9faf6f6f6f9faf9f9f9fdfafbfcfcfdfefefcfcff01ffff00010001020404030203030202ff0807090a08090b0dfffe020602000306060503020d0a07040808060403060703fbfdffff030808060401010002fe00fff9fcfe00fefcfcfdf5fafcfe01fffefffefd0003fafcfd010300fdfd01070a0e02090c0c0005080cfc0002070804050903080e11060b0e13131411101312101012100f0f15100f0e1715120f1a140f0e1714100d1514120c1b1b18121716120e191915131919150f1815110a1c1a17150e0d0b080e0705021e1a14101c1813101c1a150e20201e191916110f171312101e1c1c1c17181615201f1b1727241f1a2524221e1e1d1c1c27221e1c1919191a1f1816151d1a181b272522200f0b0c0d131312110a0f11120d0e0d0a090e0b070f100c090e0d0c0a0604020200010102fefcff00fffefefffafbfe03fafbfd00f8faf8f9f1f5f6f7edefeff3f2f7f9fcf4f6f7faf5f7f7f8f2f5f6f8f0f6f8f8e6ebeef1e8eaecf1eaeaeff3e8e8eaefededeceee9eaebefeceaedefebeef1f5f1efeef0e9e7e6e4f0eeececf7f8f7f7f0f2f3f2f1f3f5f6f2f3f3f5f0f0f0eff1f0edecf2f0efeef2f2f0eff4f6f6f7f4f4f4f4f3f4f4f3fafafbfcfbfaf8f7fafbfdfbff000000fefdfdfd0200000002020302050507060304070700ff0202080300fe0d07020009080704090a0905020404030505050602030304020203040002040307090a09020203010000000100030609000407060003090e03090e110a121716080f1215010508091517181510131715111314130e1114130e1014141413121213131210101113121415130e1215141211100d0c0f0e090511110d040d0d0803060302000a08070405020306100c08060601010102fffeff0f07020103ffffff00fffafb0c0806060c0a0b0909040301120a08060c0c07030f0d0b071813110f110f0c0814131111151411101a150e0917110d0e16120f0e1918171413131314181714121b1717160a0604040f0c06040f0a060506040407010103040503020608090a0f0002050901020105000101040000020503070b100305080df9fe0105f7faff00f6fafd00fcfffffffafcfcfcf9fd0001f9f8f9fcf8fafbfef3f6f8f8f7faf8f6f6f9f9f9f2f5f8f9f1f3f6f6f1f3f1eff2f3f3f6f7f8f4f5f3f3f0eee4e9ecf1eeeff3f5f4f4f6f9f3f4f5f6f9fbfcfcf6f8f9faf1f2f3f3eef1f2f1f0f1f0f3f1f2f3f7f7f8fbfcf7f9fafaf3f5f4f5fdff00fdf7f8fc00fcff020400010303fdfdfd00fffbfaf90100fdfc050202010402ff00000000fffefefe00fdfcfeff0200ff00010000000101ff00060908050303020305050404020200ff0504040300fdff01020404070b09090a0908060313120f0a1312110e14151111171916150a0a080c1314151514131516130f0e0d13100e0e14100c09100e08070e09080612120f0a0c0909070e0905020b0a0702020000fe010001000100fefcfefbfcfa02ff010005030201030000fd00fcfbfc000202000306050401000100fcfdfffe0605080705030205fffefefd0504030300030406060404000c090602060705030f0e0d0a0d0d0e0e07050401100d08010a0a0706120f0908130f0a06100c0d0e161111100302000007090a0a070a08080706040405050403090a0807131313111013121107090a0a06080b0a08080b0c110e0d0d10131412070c10100102060901020303000207090001020301020507fe000003feffff00f8f9fbfcf7f8f9fbf8f9fafefaf9faf9f7f8f9fdf0f5f7f8f7f9f9f8f6f7f7f7eef1efeff3f9fcfdfafd0103fdff0102f9fbfdfdfafdff00fdff0000f3f6fbfdf2f6fc00f8fe0000fcfffffffdff0002fd000203f7fafc00fbfafc0101010205020000040202050a02020103f9fcfd01fafafafd010001020001000000000000020508090001030400fffeff01020201020401fe050404030204050605060604fefe00000405080a050604050808090a0c0e0e0f05070708080607080c090a0a0f0e0e0c110e0c0b0d0d09051514100b14110c080d0e0c080d0c080408080604080706010602fffc060200fc0402fdfbfffdfaf7fdf8f6f4fffbf8f3fffbf8f5faf4f1f0fbfaf8f3fffcf8f500fdfbf8fcfbfbf9fcf9f6f4fbf8f5f40301fefb0002fffcfefdf9f7050300fd00fbf9f9f9f8f7f6020201fd02fffbfafffcfbf9fefbfdfb00fefaf70500fbfa0e080400fffffdfcfefdfdfb0200fefd0401fefc030201000f0c080410111113ff0102050b0b0b05060606030406070704070708060708050e0c0a090f0d0a07090a0b090a0606060d0d0c0a0e0e0e0e0f0e0d0f0e0d0c0c0805020303010202090b090a04070706060405070102010500030507fe00040700030506ff010408fbfe0206ff000206fbfeff03f8fb0109f9fd040af2f70007fefdfeff0300010103010000fdfdfe0100000205ff00020400000102000205080205060701050608030606070305050703030304060a0b0b06060402090c08050c0a09090302010203030404000102020302000100010002ff00000204010205050609090105070801020303fdff0204050607080303050600000306010100000a090909060504030d0d0e0e0e0d0d0e090d0c0b090a0907080401000b0b07050c08070602000103080708070707090804030504030302ff030101fffffdfffdfcfdfefdfbfcfd00f8f8f6f6f4f3f2f2f2eeededf2eeededf5f4f3f3f1f4f4f2efecededf3f2f3f2f4f1f0f1f2eeefeff4f5f4f1f7f9f8f5f9f9f9f6f9faf6f3f3f0ecebf9f6f2f1faf9f8f5f3f3f4f6f7f4f4f5f8f7f6f3f6f2f0eef6f3f2f1f6f5f4f4f9faf9f7fefbf6f3faf7f3eef9f9f9f9fdfaf8f7fbfaf9f8fffdfbf902fefcfe11100d0b04010002fffcfbfd00fffefd0706060604030201030200ff090808080401fffe0704000007070809080607071010110f1113120f0b0d0c09070a0c0c06090d0d080a0d0e0507090e0a0e1111090f11120c1013130a0e1414080d11150d0f12140b0e1214090c0e0f070a0f11101314130d0d0e0f0c0a0604000002040504050303060a0c0204070a07060807050605060305060a08080608070808090708080a0a0d0e0c080b0c0b050504040d0d0c0a02040202040606070c0b0a090506090a04040508030203030305040503030202020302010604020207040405080602020202000004020100080604000606060405010001000000fd090a090a030202030d0603010f0c08080805040603020100fffffdff030101020501fffd02fdfbfa0500faf80500fbf801fefefefbf9f8f9fbf8f7f9faf7f6f9fdfaf8f400fffbf5f6f3f4f2f1f1f2f4f0f1f1f0ecededf0f2f1f1f3f0eeededeef0f2f1f1f4f3f1f2f4f2f0eff1f1f1efeff0eef2f1f2f3f2f2f5f7f1f1f2f3ebe9e5e5f2f2eeeff6f4f1f0f4f4f3f3f9fbfaf9f3f4f7f6f1f3f1eff1f2f1f0f3f4f5f4f7f7f5f2eff0f0f0ebe9eaeaf7f6f4f0f7f7f4eff8f7f6f5fafdfdf9020402ff0a0a08060100fbf8fd030302fdfe00000608070602030201ff00020007070605ff0101000004070909090908080607070f0e0f0e0c0a0a0a0606090f09090b0e0e0e0d0c0e100f110e0e0a091012121112141214111114151412110f14151314151516171214141310121314141412111415120f0f1012140304080e06080706050607080d0f11130c0c0c0b07080a0b080a0f1009070708080808090a0d0f0f0908080d0908080e0b0b0e0f060a0d0d090c0e1005080b0c080a0d0d080a0c0b0b0e100e0d0e0e0b0404050905050708040607060203030204030404060504040100fffe0000010200000000fefd0002020102030000ff00fcf9f9fc0b0a070707060404000000000a0c0906070603010101020003030100050401fffefefdfcfcfefcf9faf9f8f8f7f8f8fbfefdfefdfcfcfdfdfaf9f8f9fdfbfaf8f5f3f1f0f3f2f0eff5f3f3eff6f6f5f4f1efeff1f2f2f0eff5f1efeeeeebebebefeeefeceeecece9edebe9e6f0eeebe9eceaeaebf1edebebf6f3f2eef1efedece4e5e1dff0f3f2efeff2f4f4edebeaeef7f5f5f5f6f4f5f2edeff1f1eeeff2f3f0f0efecedebe8e5edeeeeece7e6e6e7e8e5e6ebe9e7e9e9f1f0efeff3f1eff0fcfcf8f302020000f4f4f3f5ff00fe0000ff00ff00fefdfffffefbf9fdfbf8f601fefbfdfdfaf8f70502fffe04020000070605020e0c0804080605070f0f0c0a0f0c0b090c0a0c0c0f12100f080d0e0d0f0e100f1414151418191914111413111718171517171816100f0e10141414151112111010111313141516141112171c05050303090a090713110c0a0d0e10110d0f11100e0d0e0f0c0e100f0b0f10120e0e0e0d0f100e0b1113110f1111100e0f0f1011131715150d0c0d0c0d0d0d0d0c1011100a0909080907090b0909080b06040305040303040000020302020001050405040006070602030200ff0002020406090906080b0803070a0900040403070502000300fffd0001010004020100fffffdfe0000fffffffffcfc00010200fc000101f7f8f9f7f9fbfaf9fdfefcfafcf9f8fbfbfaf8f8f9fcfcfcf7f6f6f7efeeeef0eeeef2f7eef0f3f4f5f8faf8f4f9f9f7f0f5f8f7f2f7f8f6eef2f4f3edeaeae9e7e7e9eae8e9edece8eaeae9ebe9eaeaecebecedeae7e6e9ececebece1e3e7e7eeeaeaebf3eeefefefededeef3eeececf1edebebefeeecebf0edececeae9edf0e6eaeff3eaeaedeee8e8e9e8ececedefe7e5e5e6ecebeaebeeefedecf0f0f1f3fefbf9faf5f4f3f3fefbf8f7fcf8f8fa00fffdfcf7f6f6f5f8f7f9f7fefcfcfcf7f5f6f5fcfcfcfd0001020001fffdfd0406080707070808090a0a0d0a0909090d0f0f0c0c0b0d0d0a0a0f100e0f121312121010110f0f0f1012120f12100e0e1512111011100e0d1411100f1111121214121211110d0b0b211e1c1a070a0f1006060705080a0909100d0907100f0c080e0e0e0f0f0f0e0c100e0b0a0a070607080605050b0806020e0d0a0a11110c0712100f09090706050a0704030b0602000402ffff070300000905fffd060807060201010200fdfdfd00000102020101020100ff00fbf8fbff00fcfdfe060402010501020306020000fffdf9f700fffcfafcfaf7f6fefbf9f7fefdfafafaf8f6f7fdfcfaf8fcfbfaf8fdfcfcfafffcf9f7f6f5f5f8f6f3f3f4f7f6f6f5fbfafafaf6f4f6f8faf9f9f9f7f8f7f8f3f3f2f1f8f8f8f7f2f1f4f8f5f3f5f4f3f1eff0f3f0f2f5f3f2f6f8f0eef0f0e9ebedf1e9eaeef3eceaeaebebedefefededededeeeef0f2edf1f3f6efeff1f2e7e4e5e4eef0f2f0f2f4f4f3f0efedeaeff2f2f2eff2f2f3ebecedeceef0f2f1f3f3f4f2f4f4f4f2edeef0f2e8e9eaecf1f1f2f3eaedefeeedececefeceef0eff4f5f6f9fdfffffef6f8f7f7f9fe0100fafafaf9fbfbfbfaf6fafcfef7f7fafdfe00ff00f9fc0001fe00020201030402fe02050706060708080a0a0a0f1112110a0c0e0f0a080a0b0f0f10100f0f0c0c130f0b090e0e0e0e1011110e0d0d0d0b0f1112121113110f0d0d0a091012121011100d0d110f0d0a0b0c0c10140f090c1113151206080b0a090d100f090c0f1006060b0f0e0f12130d0e0f0e0b0b0c09090d0d0b0708070600ff0102060300020200ff00060200020403040502020304ff0001050001030200ffff00fbfcfdfe0402030101010102fdfbf9fa00fefbfc0101fffefffdfbfb0100ffff00fefdfdfefcfbff0302010000fffffef4f1f1f5fbfeff00f7f9f9f9f7f5f5f7fdfefffef9fbfbfaf6f6f7f9f5f5f6f8f6f3f4f8f5f2f3f6f7f6f5f5f6f5f5f4f5f5f5f8fcfcf9fafafafaf8f8f8fafbf8f8fafcf1f3f5f8f6f6f6f8fafcfaf9f6f8f8faf3f5f6f8f6f7f7f6f9fcfbfaf1f4f4eff5f6f5f3f6f3f0efedeeededf1efeeeff0f0f4f6f3f3f3f6f7f6f4f1f4f2f0ede2e0dfdfededecedf3f3f2f1eae8e9eaf2f0f0eef3f3f2f0edededecefecebe9f1efeeebf0eae9eaf3f2f0eeedece9e7f1ede9e7edeeebe9f0f0edededebebedfbfaf7f4ff00fffff6f6f4f200fffefcf8f9fafaf7f7fafffbfefe00fffffdfb010300ff020100fd020200fd00fefdfe060502000807030008060504110e0d0d0f0f0d0a0a0807081214110e0c0b0a06080a0b0d0e0f0d0d0f0f0e0c09090907110f0e0c0e0f100e080a0c0e0f0f0f100d1010110b0f121514191919141a1e240a09090d080708090e0a09070d0a060513120f0a12110f0d0d0e0e0e090808060805040205040303040505050303010204050502080a09050502fffd050200ff05040201020100ff02030302010205040100000001fffd00fdfcfafafcfcfcfafdfdfefcff00fffd00fefbf8fdfefdfb0103030300010201feff0100fafefffc00fefcfbfafbfcfaf9fcfdfefefcfbfafaf9f6f6f8f7f7f8f6f4f4f5faf9f8f7fbfcfdfdf7fafaf9f7fafdfdf9fbfbfcf9faf8f8f7f4f3f3faf9f8f8fbf8f5f5f9f5f1eff8f8f5f3f9f8f6f2fafdfd00f9fdfdfbf6f6f6f6f6f8f8fbedf0f5f8f2f4f6f9f3f8fcfff0f5f9fbf0f0f1f2f6f3f3f4f8f9faf9f3f4f7faedf1f6f8e3e7ebe9edeeeef1f2f2f3f4eeeeefeeeeeef0f1eff0eff1edeff0ece9eaebeae9e9eaeceaebedf0eae8eaf0e4e5e5e6e9ecefeee6e6e5e8ececedefeeeeeeedf3f4f4f4fe0000fff3f6f7f7fbfafbfdf9fbfd00ff000001fdfdfd00fcfd00fffdfe0002f9f7f9fdfbfcfd00fdfeff00fdfeff0100000304060707060a0806060606070a0a0a0a0a0c0d0d0b040506060a0b0c0b080707090707080a080909090706060a0d0b0d0d0d0d0f100f10101110121213171818171919161428231c150e0c0a05080602ff070806030404060406030200090705030a06050306050200030301000403020205060605030405050100010102020202fefffefffffefdfc020100ff000000ff00fefffe0300ffff0103020202050403fafcfd00fd000404fe000306fbfcfe00f9fbff00fbfcfbfc02000001fffcfe00fdf9fafbfaf7f6f8fbfcff00fafcfefffefefefffcfc0001f8fbfdfef8fafafafbfbfbfaf9fbfbfbfcfbfafbf8f9faf9fbfcfcfbfdfbf9f8f7f8fafcf4f5f7f9f8f9f9faf6f6f8f9f0f2f2f2f3f3f3f0f1f5f7f5fdfbf6f3f5f2f1f1f4f6f8f7fbfaf9f8f7f6f5f5fcfcfdfeffff0003fbf7f8faf4f3f4f6f4f5f6f8f9f7f6f9fbfbfafaf7f6f7f8e9e8e7e7f3f6f4f4f7f9fafaf0eff1f2f3f6f6f8f1f3f3f5e9e9ecefeaedeff2eeeeedf1f1f2f2eff5f6f3eee9eaebebedececedeaececeef1f2f0f0edecedeef5f7f8f9fefd0001f6f6f9faff0001010101010001fffefe01010000fdfefe0105040201000201fe0000020300010406030607080607090e0707080608090c0909080605090503000809070606060505090906070a0808080807060807050606090606070a0908090c070306100e101114171816191b1919141516171719191cfef6f4f6fbf7f3f200fefcf801fffbfaffffffff01fffeff00fffffffffffdfa0000fffb020201fe050402000303030001020101030101010000fefdfbfcfdfdff000000fdfdfcfcfffffefdff01ffff010202030203040400fffefe03ff0000080807070004050500010202000305040405050403030304ff000101f9fcfbf903010200020404020000fdfd0301ff01fefdfbfefafafbfcfbfcfdfdfdfe0203fdff0102fafafdfefbfdfdfdf8fafe01fdfe0000fd000100fbfcff01f8fafcfff5f8fbfcf1f5f8faf2f4f8fbf1f3f7faf1f1f1f3f5f4f4f5fafcfdfff6f8fafefdfeff0003030100fbfafafbf7f8f8f9fafbfcfafafcfafcfbfdfdfdf5f4f4f6e3e2e3e8f3f3f2f1fdfefdf9f5f7f8f6f8f9fafbf7f9f8f6efeef0f1f4f5f5f4f4f5f7f8eeeff3f6eaeceff3ebeaebedf1f1f1f2f0f4f4f4f3f7f9f9f0f2f4f6fafafbfd03040607f8f8f8fb010000fffffdfdfefefefeff0000fefe0304030303040406fbfcff000401000206060609090909090f0e0807050304070603030203020000fffdfbfb060401fd04030201060707070907060508070608070608090708070708070809070808080f0e0b0c110f0d0d15141212161614141e231c15f9fcfaf8f1f1f0eff5f3f1f2f9f7f6f7fefdfaf8fffcf8f6fdfaf6f6f9f6f6f8f8f6f5f5f9f7f7f7fefcfbfbfdfaf8fafdfbf9f9020201fffafbfcfefdfdfefefe000001fd000000fdffff00fefeffff0000000004020101ff00000003030201070809050403040500ff010403000205060708060508080701010102f8f8fc00fffeff01fffcfdfcfdfffffe0306040400040404feff0203fdff00010405050504060505fe00ff00fffefeff00fdfbfcff000002010103030202030201020303fbfdfe00fbfd0000fcff0202fd000000f6fafdfbf8fafafafefeffff00fefcfc01000001fffcfefefbfbfcfbf8f7f8f8f9f9f9f9fdfdfafafdfcfafbf7f8f8f8eaeae9e9f0f0f3f4f8f8fafbf7f7f8f8fd0000fdf6f9fdfef4f7f8f6f4f5f9fbf7f6fafcf9fafcfcf6f8f9fbf0f2f3f3f3f6f9faf4f4f5f4f9f7f7f7f7f8f7f6fdfdfdfe08080608fe00fffdff0002040001030301030504ff01020303040404080a0c0c0004070905090a0d0a0f11120d111514090d110f080808070405050600fdfcfafcfcf9f9fcfbfbfc0100fdfb0601fffd0604020309070305090506070907080a0c090708090805050d0a09090b080606110f0805110d07050d0907064300cc000f0000009b9a999796959392918f8e8d8b8a898786858382817f7e7d7b7a797776757372716f6e6d6b6a696766656362615f5e5d5b5a595756555251504e4d4c4a49484645444241403e3d3c3a39383635343231302e2d2c2a29282625242221201e1d1c1a19181615141211100e0d0c0a0908060d7200000ca3100b12208ea21c83d44cd3235915656118a66dd95469d45551d72549d19265d0756d9de6791d3569d9e67999d451228871dec66dd7b6695cb769d5453918f65094f45496c631cc645dd7d43845911800a130 -''') -assert expected == actual - -# Identify finger -actual = sensor.build_cmd_02(CaptureMode.IDENTIFY) -expected = unhex(''' -027800000023000000200008000020008000000100320074000000008020200400242000005020773628200100302001003c208000082138000c210000482107004c210000582000005c20000060200000682005006c20014970200141742001887820018084202000942001809c200902a0200b19b4200300b8203b04bc201400c0200200c4200100c82002003300100000000080cc200000f503d0200000a1013200440000000080dc20e803e0206401e420d002e8200001f0200500f8200500fc200000b8203a00000804001408000008080000080800001408300008080000140831001c081a0032000c0000000080501101004c111e0034007801e7f4f6f3f1f4f5f6f5f1eeeceef0f5f6f7f8faf8f7f7f8fc00040d10111111131515141211151a1e1d191a1a1b1c1b1813101012161617161514120c06030200fefbfcfafbfaf8f3efecededeef0f2f1efeeefecedeaeae9e9ebedf1f5f6f5f3f2f4f6f9fcfcfdfefdfeff000100000110232e10232e10232c10232c10232c01065010250101000007c8078c06ff0000000000004f8b006d0300280307030990098db00b90880991858e08c1810b9190910ac1b8928a0993878a890b9388898908c88191890ac8889289099a818a890b9a88898908d08191890ad08892890802818a095a810a0288890b5a8808d98189890ad9908989095e8289890b5e88898908e18189890ae190898909648289890b648889096e8108e981890b6e880ae99091b9096f828a8f0b6f88918908f0818a890af090898909768289910b76b8918a08f88792910af8888a92097c81898a0b7c09018089890b01888991097f8189920b7f09088089920b088889920c07030307200402000000002f0004007000000029000400700000003500040080000000170000004e002800fbb20f0000000f00300000008700020067000a00018000000a0200000b1900008813b80b010910002e001c000200180002000000700070004d010000a0008c003c32321e3c0a020244000400010000003000f4311e000000ff0000008d002007ff00000095003007ffffffff00000085ffffffff04000085ffffffff08000085ffffffff0c000085ffffffff10000085ffffffff14000085ffffffff18000085ffffffff1c000085ffffffff20000085ffffffff24000085ffffffff28000085ffffffff2c000085ffffffff30000085ffffffff34000085ffffffff38000085ffffffff3c000085ffffffff40000085ffffffff44000085ffffffff48000085ffffffff4c000085ffffffff50000085ffffffff54000085ffffffff58000085ffffffff5c000085ffffffff60000085ffffffff64000085ffffffff68000085ffffffff6c0000856f34120a130f0f1011100f10140d0c0b08080c0e0e0b0f0f1a0f0f11120f12160c0e0e110f0a080a0d090a0e0b05080b10070c10030a0f130507090bfcffff02ff05050500020405faff0003f9020404fb040604f9010404f6fe00fef3fdfefdeff9fbfdf0f8fafbf500fefeeaf6f7f7f0fbfefff4f7fcfff3f6f9fd140f00fdf6fbfdfdedf3f6f7edf0f3f4f1f5f5f7ecf3f6f7eef5f6f5f1f5f6f5f2f3f7f9f1f1f2f2f7f1f3f2f3f5f2f3ebf3f4f2f3f2f5f5eaeff0f1eef5f5f4e7f2f3f3e6f2f2f1f7fffefbf700fefbe7f4f6f6e9f6f5f2f2f4f3f3f5f5f5f4ebf5f5f1e7f4f6f3e2f1f3f2dff3f7f8e1f5fbfbe4eff2f1ecf1f4f5e1f1f5f4e8edf1f6f4060504e2f4f5f4e8f3f6f8e1eff1f1e2f3f7f9e5f3f5f6e7f5f7f8edfbfbfaf2fe0000effefffef0ff00fc131101fbedfdfdfbe7f9fbf8e1f0f3f1dfedf1f1e9f2f6f6d9dfe0e1e5ecedeff2f3f5f3e7f3f4f1eaf7fbfaf2f5f8f9e8eff4f8edf6fafdf0f3f4f5f2f4f6f9f0fafdfcf3fefffef301010304110905090a0906ffff0405fc060707fd090d0dfd070709fe0c0c0d010a0d0d0205090a020608050d070a070d05070605040606080203020bfdfdff07ff00020a0201056f2909080f151e22100e0f130f0d0e130a0f13170f1011131011131414171a1a18191714111213120d1214160d0e0d0e0a0707080f0e090714100b0a0a080604070a09080506080a0504040705060505020000020200ffff0300fffffbf7f6f7fefcf9fafffffcfcfafaf9f9fcfaf5f3f6f4f3f1fdf9f4f10201fffbfffffdfefaf9f9f9fefefcfcfbfefefff6f9f8f7f8fafbfaf6f5f6f8f4f2f1f2f5f3f2f2faf7f7f8f1eff0f3f3f0efecf4f3f2f0f4f5f5f4f5f6f8f9f3f7f9fbf3f2f1f3f3f2f2f3f1f1f1f2f8f3f0eff8f2efecf6f4f2f0f0edeaebf4f3f1f0f8fbfbfaf0eff1f3f1f4f5f6f2f4f6f4f6f5f5f3f8f5f5f5f0f1f5f6f1f1f1f3f1efeeeff3f2f1ef00fcf8f6f0eeefecf6f7f5f3eff1f2f2f8f7f5f4f8f8f6f5f6f5f2f1f8f8f8f7ff00fefcfbfaf8f8f8f8f8f9f9f9f9f8fafafafbf6f8f9f9f2f4f8f9eff0f3f6f7f6f7f9e3e7eaebeef0f2f3f2f4f8f8f0f1f8faf5f5f7fafafafbfbfbfcfdfcfdfe0002f9fcfcfcfdfefdfcfdfefefefefefdfd04060503010000000505050307050705040301010c0a0705090804010d0a07050e0e0d0a0c0d0f0f0808090808090b0a0a0e0f100604040605050506010406070303030205040102040300022222201e181a1a19181b1a181c20201f1618191a141515171a1a1a1c16191c1b120f0f0f161312110d0b0b0d0908080a06070b0f0b0c0d0e0403060908080c0d0c0c0d0a070604020607060503030405fe00010200020506fbfcfefffbfdfefffbfbfcfef8f7f7f6f4f5f7f6f5f7fcfcf3f9fe01f9f9fdfefefefefef8fafaf9f9f9fbfdfbfafaf9f6f7f8f9f5f3f4f7f7f6f6f7f2f5f5f4f4f6f5f6faf9f7f5f6f6f2f2ebeef1f3efeef0f1f6f6f5f3f8f6f4f4faf9f7f5f3f4f3f3f3f2f4f4f2f1f0f0eff3f4f7ecf0f3f7efeff0f2edf2f4f3f0f2f3f3fafaf8f8f2f1eef0f5f1eeecf3f1f1eff1eceaecf3eeededf6f3f1eff3f3f2f1eff0f0f0eeeaeceef7f7f8f9ececeeeef4f2f3f2f0ececeff1ededeef5f4f2f0f1f2f2f0f6f3f3f2faf7f8f7f8f9f7f6f5f3f1f0f6f4f2f0fbfcfaf7fafaf7f6f6f2f1f0f7f4f1f0f9f7f7f6ebebebe8f6f6f6f3f7f7f5f7faf6f3f4fdfbfaf7faf8f8f5faf9f7f50201fffcfbfaf8f6fcfcfaf8fbfaf7f6fbfaf8f7020200fe00030200030404030504030300000002030302040203020203050202070504050d0c09070707050408080706121211100809090908090a0d080a0d0f0405080d0405090f070910131d1c1d1d1a1b1d1e1716171b1b18141218151111161414141a1717161b1a1a1b12131818111214151011100f0d0e0d0e100d0b0a1113130f0f100f0f0e0d0d0f0a090a09040708080304060504060706040405070404030200fffdfd00000000fefe0000f7f5f7fcf5f5fafdfcfaf9f70302fffd000202010000fffdf9f9fafafbfbfcfef7f5f3f4f7f5f3f3f7f7f8f8f6f5f5f4f3f4f3f2f6f7f6f3f6f8f6f3f1f4f5f4f4f6f6f6f1f3f3f3f3f4f4f5f4f5f5f7f0efeeeff0f1f2f1f2f2f1f2f0f0eeedf5f3f1f1f8f7f6f3f1efeff0f2f1f0eff2f1f2f1f6f6f8f8f1f5f7f8eef0f5f6eeeeeeefefeff1f2f1f3f4f3f0f2f2f1f1f1f0f2f1f2f1f2efecebebfafbfaf7eeeff1edf2f0eff0f0f0eeeff1f2f6f8f0eeeff1ede9eceef3f4f5f5f5f4f4f5f5f4f4f6f2f6f9fbefefeff1f4f5f7f8f6fafbfbf1f1f2f1f0f1eff0f6f8f9fae7e8e8e9f2f1f3f5f9fafbfaf5f5f2f3f6f5f6f3f4f3f4f3f4f2efeefaf9f9f8f7f9faf8f9f9f9f9f6f6f8f9f8fafaf9fbfbfdfdfe000000040709080304030403040605050608080000010402030305060709090504040305030202050607070e0f0c0c090806070f0f0e0d0f0d0807100f0d0c13141413181617192223261f1d1a17131c1a140e11111011110f0d0c13100e0d1514111118140f0f18161512131211100e0f0d090e0d0702090a09080d09090a0e0a08050c09080706050305060504040301000002fffcfe0604020002010000fdfefe0000fefdfd00fdfbfefcf8f5f6fbf8f5f5f7f7f7f7fbfbfbfefefcfcfefaf8fafdfafaf9f9fefdfefcf7fbfcfbf3f4f6f7f7f8f7f9f4f6f8f8eff0f1f5f2f2f1f2f1f0f0f2f1edeceff4f3f1f3f3f4f5f7f4f6f8fbf7f7f7f8f1f3f5f8efeef0f4f1f0f1f5eeeff1f5f4f7fcfef3f5f7f9f4f5f7f9f0eff0f5f1f0f2f3f8f8fafff7f7f8fbf7f8faf8f3f7fafbf4f6f8f9f5f4f7faf0f0f3f7f1f0eff3f0eeeeeeeaedeef0f4f5f9fbeaebeff3f0f4f6faf1f1f4f7faf7f8faf7f8fbfef1f2f5f8f2f0f2f5f6f7fafdf8fbfbfdfcfafcfef4f7fb00f9fbfd00fafbfcfef2f6fcfff1f5f9fffafbfe00ebecedf0f4f4f7fafbfd0002f5fafefef3f6fc01f4f7fbfbf0f5fafbf9fbfefef8f8f9faf9fcfefdfafbfcfcf9fafdfbfffefe00ff00010107090c08060b0d09050708060a08090607070606080808080b0b0d0704080e0c04070707080808060d0c0d0d070604040b090805060807020a0705040e0701ff1409fdf91a17130e0f0c0905080608080f0e0d0b0a0a0b0b080606080e0a08070f0d0b08100e0d090e0c0b0a06070707fffefdff0501fffd0807040205040303050303030403020201fefcfc0000fffcfffefcfcfffdfcfe00fefcfafffcf9f8fcfaf7f700fffefcf8f9fcfef5f5f8fcf7f8fafcff000101fdfdfcfffefdfdfef8fafefffcf9f9fcfaf9fbfbf6f7f9fafafbfbfbf8f8fbfcf8f9f9faf4f4f6f8f6fafdfff1f7fbfef7fafcfefafcff01ff000103fbfdff00fbff0001faff0000f9fc0001f7fafe0000000204fafe0102fe000002fafe0000f7f9fd0002050406fdfefe01f7f7f8fcfcfdfefefdff0100fe000003fd000101f9fdff00f3f8fe02f2f7fbfeff040609f8f9f9fafbff0001fafafbfbf9fafafcfffefbfcfbfdfefef9fcff02000204060103070900010203030301010506040200000102000100ff020201ff03010100f2f4f4f3fcfaf8f800faf8f9fffdfcfb030300fdf9f8f9fafaf9f7f5fffefefbfaf8f7f5fdfefefafdfffffefbfbfbf9000000ff00fefefd01fefdfd0300ffff0301ff00030201040605050308090805050505030702fdfe06040101040100000d0a05010504010003010101fffe010300ff0002fefd0103f6f7fcff070400fb030200fd0501ffff090400fd0a070301070400000601fefc06030100070503010600fcfb0401fefdfffffdfefcfbfaf9010201000100fefb01fefaf50100fdfafdfefcfbf9f8f6f7fdfcfbfbff00fffefbfbfcfef8fafbfdf9fcfefefdffff00ffff0001ff000001fcfafafb020001010002010202020001fefcfcfdfefefdfefbf9f6f8f9f8f9f9fcfeff01fdffff00fbff0003fbfeff0000010103ffff00030104050304050202030304070200000301010204000103070205080c0202030504060607040606070205060a04060a0d04080d0e080d0a0a0407080b00050d1000050b0f00040b11050a131903070e130408101105090f12000104060c13191cfd02070a03050a0dfd00080f02060a0bfe000407fdfe04080305070806070b0e090a0d100507080c0203070b03040b1205081015ff000308fe00030500020504f1eff0f1f7f9fbfefdfdfbfbfbfafaf8fbfcfbfcf8f8f7f5f5f5f9f7fafafdfef7f6f8fbf6f5f7f9fcfbfbfbf8f9fafbfefdfcfdfbf9fbfbfcfbf9f9fdfaf7f7fdfbf9f80201fffc0201fffd05060706020401feff0100fe010200fc010100fc000000fcfffefdfb02fffefb01fbf6f301fefaf80500fbf5fffcf6f0f5f3f3f5faf9f7f6fffdf9f5fdfafaf800fdf7f4fcf9f4f2fbf9f7f8fffbf8f5fcf8f4f3f8f8f6f2fbf9f8f5fbf7f0edf6f4f3f2fdf8f5f3f7f4f0eef5f5f4f3fafcfcfbf9f8f8f8f9f9faf9fcfdfafafdfcfbfafefffdfcfdfbfafafcfbfafd01020505000001010100fefcff0204020406060305080909040a0e0e00040405fdfeff02fcff0001fcfe01010101010200020204070a09070205060604070a0c06070709000204080407070e080e1111080c0e0b090e0f0e0b0f100e0f111213090e10120d11131206080a0f0d1215190f1215170d0e0f130c0f14150d11131411111113121317181415151617141316161817171513121213141213080a0d0f1d1d20230d0a0f1514181a1c141518190f1015180c10171d0d1115150a0d12160f13181c121312130d1011120f12141414131314171515140c0e0f0d070709090404080cf3f6faff00010407ff030808fc000405fd0000fff6f7f9faf8f9fbfdffffff00fcfcfbfcfbfcfe00fcfcfcf9fcfafbfcff000100faf9f9f9fafaf8f7f8f5f5f2f7f6f4f2f9f6f7f7faf8f6f502fcfafafbf7f5f6f9f7f6f6f8f3f3f3f7f3f2f3faf8f8f7f9f6f3eff8f4efebf4f1ece8f7f4eee9f1ede9e7e8dfdad9fafefefaf6f8f9f7f4f3f5f4f8f7f7f4f2f2f2f0f3f3f2f0f8f6f4f1f4f3f2eff1edeae7f0efefedf1ebeaebeceae8e8f0edebeaf2f0f1f4eef0f1f4f4f6f7f7f9f8f8f7f7f5f6f5f8f7f7f7f7f8f6f7f9f9f9fbfbf9f9fafaf8f8f8fefbf8f901fdfcfd00fdfbfbfbf9fafbfffafbff020000ff080604020a06070904060707050709080505090a0001050a0306090a060809090506080c06080f130d0e14170a0c0d0f0a0b0c101115181c11151c1d0b0e15170f1216180d0e131516191c1d14181c1d14181d1e1414171a1c1b18181918191a151618191618191b161818161515141217171a1d1618181b191d20231618191914181816161c1e1e1218181827292c2d1c1e1a172023201d1c1b1a181d21221f2023211d1617181a161615181c1b1b1c131310131311101012100f10110e0c0d13130f0b0b0a0b06070402020f0e0c0a04030100070606070908080803020405fdff0004f9fbfc00fbf9f8fa000100fefafbf8f8fdf8f4f4f5f3f2f4fcfbfbfafdfbfafbf9f6f7f7f7f7f7f4f1f1efeef0eeedecf6f4f2f2f3f2edecf7f3edeaf4f4f1edf7f8f7f3f5f4f1eef3f2efedf6f2eeedeceae9e7ebeaece9e9e9e8e7e8e7e7e7eaeaebecdadde3e8f5eeece8f3f0ededf3f0f0f3f2f1f0f0eeeeedeeedecebebf0efeeeeece8e7e9e4e2e5e7eae8e6e6ebededefeae9e9e9eceae9e6f4f4f4f4f4f2efeff6f2f0eef7f7f6f5f6f5f5f6f6f6f5f4f8f7f5f6fdfefefcfaf9f7f6f9f9fafcfd0000fdfffefaf8fafafafafe00000300fefbfbfefefefe010101ff0b0703fe0602020108050303090602010908070709090707070401ff0f0b07051412100f16151214101113161314110d1e1b17121d1c1d1e1a1817181a181814181a1c1b1e2122211f1c1b17201a17181e181413181b1b1b1c1d1d211c1e1f1c1d1d1c1915171c1e11151a1e1f2224251f262b2d272e32321a1b1d1f1717181c1f242626191d211f31393d3f1c222929191d2122171d22261e23262b1d2021211a1b1c1c1c1f1e1e1c1b1818181e1f1f13191b1c11151516101316170c1016180404080b04060b0e0c0d1011000100ff0707080608090a08050506060506050703060603fd020200fbff0005f7f9f9faf4f4f2f2f4f6f5f7fafaf8f7fdfcfaf7f7f8f8f8f2f1f2f2eae9e6e6ecedefecf3f5f5f4ecf0f1eeeaebedeeece9e9e6ece6e4e3eae8e6e5ebe9e7e6eceae7e5e6e7e6e7eae8e8e9e7e7e6e5e7e8e8e9efeff0eeebeae7e3e8e6e6e4eeecebe7f3f0edebefeeecebefeeefede9e9e9e8ecebe8e8eceeede9e9e8e6e5e7e8e5e4eeeeebe9eaebebeae7e9eae8f4f3f3f2f0f0f2f2eff1f4f6f4f5f9fbf5f5f6fbf3f3f5f9f7f6f9f9fefbf9f7f5f6f9fefcfcfcfdfafafd00f5f9fe04fbfc000102fffdfcfaf9f9fafefefcfefefefefcfcfdfefc0101020106050402000100010704040306040303fe00020405070a0a0c0a09091416130f1717140f0b0d1311111113111b19191918171513131414121a1715141d191716181715141d201f1b191e1e1a1b1b1b1c232526221a1b1d1e191d1f1e1e1d1a191d191a1a242123242f2c2a2730302d2d212525262024242427292b2f1d1e22273d3d414728282b2f201f1e1f2726221f28282728222224261f2120201d1f2023191d201f1f1e1d1e1c1d1d1e141313171818191b1c1f211f101113111315151515171716fdff0001060a0b0e07080a100606090c090a0d1002010206fdfc010305080809fbfcfd00f2f3f9fcf9fafbfcfafaf9f7f5f6f8f8f5f2f0f0f1edeae8e5e3e4e2edebeceaf4f3f0eee8e7e8e8ecebecebe7e7e7e6e3e3e3e4e5e4e5e4e6e6e4e3e6e7e9e6eae9e7e3eaeae8e6e4e4e4e4ebe9e8e6ecebe8e5e0dddbdde3e3e4e5e5e4e7eaeaebebebebe9e8e8ebebe9ece9ecebece9ececece9eaecebe5e7e9e7e4e8e7e6e8e7e8e9e6e5e5e9e7e6e8eaf3f3f4f3f2f1f2f1f7f8f9f7fcfdfbfbff00fffcfefefefdfcfefefdfbfffffcfffffefdfdfeff00000001030504030703000103feff0103fbfd0004ff03060afafe0309f9fa000500ff000205040300020305050303020304050405050506090b0905040602fefc0a0502040c0704020d0600ff0d0808061815120d110f0c06110f0c0a120f0c0b1615110d1817151318171716181614111a181516201a15141e1d1a151b1a19191a1a17181b1c1b182526272728282a2929282a29221e1d1d2524211e2f2d2a282a2826224845413f2d2824211f2223231f212220262524232322212220222223211e1e1e1e1c1d1d1e1e1f231d1d1e201b2124251c1d1f1f1f1d1d1d11101110120f0f1214141410020205050d0d0d0e12121112101315151212110e080a0807050606050a0909070000fffc00fefdfcfdfaf6f5f8f9f8f8f8f7f7faf2f5f5f8ebedeceae5e8e8e7eaeaebeaedefeeeee7e8e8e8eaeae9e9e4e6e5e6e4e4e3e4e4e3e3e7e3e1dfdfe6e6e8ebe3e7eaebe7ecefeee8eaebeae9ecf1f2e5eaf1f4dde0e7ece5e5e5e4e7e5e1e3e9e7e6e9e9edeeeeedf3f7f7e9eef0f3eaeff0f0e7ecedefe6e8ebede5eaecefeceff0f3eaedeff2ecedececf1efeeefeeededeef4f3f3f1f9fbf9f7fbfaf7f7fdfbf9f8fafbfafaf9fbfafefcfcfcfefefdfbfb0200ff00080603020405040505070a0a080a0a080f0d0c0a090a0706070809090206070a000204060404030400000103030406080a08050205060400fbfdfefa0305020201000001fdfcfcfd070605050a0807060404050508060404070707040a08080a120f0f0f1816141113131615161816151515131312110f0b171516131819161313101012241e1a1927211d1c2a2725231f1c18161e1c1c192a2c2c2921201f1b3d3a3a3b222326252424241c201e1f2124242727221f1f2025221e1d222324272122221e262625212523212026201c1d201c1c1d1e1e1e2213161617161516140f1217180a0d0d0c10100e0d131511111515120f0c0a0e10050607080405050606050403f9fcfefff9f9f8f7f6fafafbf7f9fafcfcfdfbfdf7f9f9f8e7ebeef1e4e6e9eae9eaecedeceef0f1e6e8e9ece7eaeef0e7ebeff0e5e9ececeaedebeae1e8eaeaeaedece9eae9e8e8eae8e9eaeaeae8e9efefefeef4f3f0eeedecebece2e3e5e9e4eaedededefe9e6ededeeeff7f5fafbf1f1f1efefeff2f3eeeeebe9eae8e6e7edecebedefeff0f4efedebeeeaebededf1f5f6f9eff0f3f6efedf4f8f4f7fafdf6f6f7f8f7f9fafbfafe0000fe010000fe020506fc00020201030607030608090506070208080803080707060d0e0f0e08090a070a0a0704080701fb04fffbfe0003050805090c0705fdf7f8ff000201fdf9f5f4f7f8fc01fefbfcfd00fdf9fbfcfbff0101fefafd0100feff01fdfbfc00fef9fa0004070d0601fdfe0b0401021212121414151214111111141216171708090f151212161a0e0f1116161617161c1a1919201f1d19231f1b18181816171b1d1c1a27211e1d1915130f3b36291b27211e1b1a1a1f1e24221e1d27211d1e242725212226241e251f1c1d1e1b18162221202026292a2924282926262a2a252b2c2e281d1c1e1a1f2b312a1b1b1f1c0c16212810151916121212121011100d10110e0d0b100c0a080c0e0f04070d0dfefe0003f9f9fbfdfdfefffefcfdfefefffffdfbf9f9fbfbf1f2f4f7ebedeef1eeeeeeeff2f1f2f1f0f4f6f5f2f1f1f1efedeff1eceaeaeae8e7e5e5e7e4e5e5e8e7ebe9e8e8eae9eaebebece8e9ebeaecedf1eeececececededeff0eaeae9e9edededefe6ecf4f7f1f0eeedf9f4efefedeff1f3f2f1eff0e9eff1f1eaf0f3f5eff1f3f3f6f4f2f1f2f5f6f7eeeef0f1f9f8f9faf6f6f6f9faf9f9f9fdfafbfcfcfdfefefcfcff01ffff00010001020404030203030202ff0807090a08090b0dfffe020602000306060503020d0a07040808060403060703fbfdffff030808060401010002fe00fff9fcfe00fefcfcfdf5fafcfe01fffefffefd0003fafcfd010300fdfd01070a0e02090c0c0005080cfc0002070804050903080e11060b0e13131411101312101012100f0f15100f0e1715120f1a140f0e1714100d1514120c1b1b18121716120e191915131919150f1815110a1c1a17150e0d0b080e0705021e1a14101c1813101c1a150e20201e191916110f171312101e1c1c1c17181615201f1b1727241f1a2524221e1e1d1c1c27221e1c1919191a1f1816151d1a181b272522200f0b0c0d131312110a0f11120d0e0d0a090e0b070f100c090e0d0c0a0604020200010102fefcff00fffefefffafbfe03fafbfd00f8faf8f9f1f5f6f7edefeff3f2f7f9fcf4f6f7faf5f7f7f8f2f5f6f8f0f6f8f8e6ebeef1e8eaecf1eaeaeff3e8e8eaefededeceee9eaebefeceaedefebeef1f5f1efeef0e9e7e6e4f0eeececf7f8f7f7f0f2f3f2f1f3f5f6f2f3f3f5f0f0f0eff1f0edecf2f0efeef2f2f0eff4f6f6f7f4f4f4f4f3f4f4f3fafafbfcfbfaf8f7fafbfdfbff000000fefdfdfd0200000002020302050507060304070700ff0202080300fe0d07020009080704090a0905020404030505050602030304020203040002040307090a09020203010000000100030609000407060003090e03090e110a121716080f1215010508091517181510131715111314130e1114130e1014141413121213131210101113121415130e1215141211100d0c0f0e090511110d040d0d0803060302000a08070405020306100c08060601010102fffeff0f07020103ffffff00fffafb0c0806060c0a0b0909040301120a08060c0c07030f0d0b071813110f110f0c0814131111151411101a150e0917110d0e16120f0e1918171413131314181714121b1717160a0604040f0c06040f0a060506040407010103040503020608090a0f0002050901020105000101040000020503070b100305080df9fe0105f7faff00f6fafd00fcfffffffafcfcfcf9fd0001f9f8f9fcf8fafbfef3f6f8f8f7faf8f6f6f9f9f9f2f5f8f9f1f3f6f6f1f3f1eff2f3f3f6f7f8f4f5f3f3f0eee4e9ecf1eeeff3f5f4f4f6f9f3f4f5f6f9fbfcfcf6f8f9faf1f2f3f3eef1f2f1f0f1f0f3f1f2f3f7f7f8fbfcf7f9fafaf3f5f4f5fdff00fdf7f8fc00fcff020400010303fdfdfd00fffbfaf90100fdfc050202010402ff00000000fffefefe00fdfcfeff0200ff00010000000101ff00060908050303020305050404020200ff0504040300fdff01020404070b09090a0908060313120f0a1312110e14151111171916150a0a080c1314151514131516130f0e0d13100e0e14100c09100e08070e09080612120f0a0c0909070e0905020b0a0702020000fe010001000100fefcfefbfcfa02ff010005030201030000fd00fcfbfc000202000306050401000100fcfdfffe0605080705030205fffefefd0504030300030406060404000c090602060705030f0e0d0a0d0d0e0e07050401100d08010a0a0706120f0908130f0a06100c0d0e161111100302000007090a0a070a08080706040405050403090a0807131313111013121107090a0a06080b0a08080b0c110e0d0d10131412070c10100102060901020303000207090001020301020507fe000003feffff00f8f9fbfcf7f8f9fbf8f9fafefaf9faf9f7f8f9fdf0f5f7f8f7f9f9f8f6f7f7f7eef1efeff3f9fcfdfafd0103fdff0102f9fbfdfdfafdff00fdff0000f3f6fbfdf2f6fc00f8fe0000fcfffffffdff0002fd000203f7fafc00fbfafc0101010205020000040202050a02020103f9fcfd01fafafafd010001020001000000000000020508090001030400fffeff01020201020401fe050404030204050605060604fefe00000405080a050604050808090a0c0e0e0f05070708080607080c090a0a0f0e0e0c110e0c0b0d0d09051514100b14110c080d0e0c080d0c080408080604080706010602fffc060200fc0402fdfbfffdfaf7fdf8f6f4fffbf8f3fffbf8f5faf4f1f0fbfaf8f3fffcf8f500fdfbf8fcfbfbf9fcf9f6f4fbf8f5f40301fefb0002fffcfefdf9f7050300fd00fbf9f9f9f8f7f6020201fd02fffbfafffcfbf9fefbfdfb00fefaf70500fbfa0e080400fffffdfcfefdfdfb0200fefd0401fefc030201000f0c080410111113ff0102050b0b0b05060606030406070704070708060708050e0c0a090f0d0a07090a0b090a0606060d0d0c0a0e0e0e0e0f0e0d0f0e0d0c0c0805020303010202090b090a04070706060405070102010500030507fe00040700030506ff010408fbfe0206ff000206fbfeff03f8fb0109f9fd040af2f70007fefdfeff0300010103010000fdfdfe0100000205ff00020400000102000205080205060701050608030606070305050703030304060a0b0b06060402090c08050c0a09090302010203030404000102020302000100010002ff00000204010205050609090105070801020303fdff0204050607080303050600000306010100000a090909060504030d0d0e0e0e0d0d0e090d0c0b090a0907080401000b0b07050c08070602000103080708070707090804030504030302ff030101fffffdfffdfcfdfefdfbfcfd00f8f8f6f6f4f3f2f2f2eeededf2eeededf5f4f3f3f1f4f4f2efecededf3f2f3f2f4f1f0f1f2eeefeff4f5f4f1f7f9f8f5f9f9f9f6f9faf6f3f3f0ecebf9f6f2f1faf9f8f5f3f3f4f6f7f4f4f5f8f7f6f3f6f2f0eef6f3f2f1f6f5f4f4f9faf9f7fefbf6f3faf7f3eef9f9f9f9fdfaf8f7fbfaf9f8fffdfbf902fefcfe11100d0b04010002fffcfbfd00fffefd0706060604030201030200ff090808080401fffe0704000007070809080607071010110f1113120f0b0d0c09070a0c0c06090d0d080a0d0e0507090e0a0e1111090f11120c1013130a0e1414080d11150d0f12140b0e1214090c0e0f070a0f11101314130d0d0e0f0c0a0604000002040504050303060a0c0204070a07060807050605060305060a08080608070808090708080a0a0d0e0c080b0c0b050504040d0d0c0a02040202040606070c0b0a090506090a04040508030203030305040503030202020302010604020207040405080602020202000004020100080604000606060405010001000000fd090a090a030202030d0603010f0c08080805040603020100fffffdff030101020501fffd02fdfbfa0500faf80500fbf801fefefefbf9f8f9fbf8f7f9faf7f6f9fdfaf8f400fffbf5f6f3f4f2f1f1f2f4f0f1f1f0ecededf0f2f1f1f3f0eeededeef0f2f1f1f4f3f1f2f4f2f0eff1f1f1efeff0eef2f1f2f3f2f2f5f7f1f1f2f3ebe9e5e5f2f2eeeff6f4f1f0f4f4f3f3f9fbfaf9f3f4f7f6f1f3f1eff1f2f1f0f3f4f5f4f7f7f5f2eff0f0f0ebe9eaeaf7f6f4f0f7f7f4eff8f7f6f5fafdfdf9020402ff0a0a08060100fbf8fd030302fdfe00000608070602030201ff00020007070605ff0101000004070909090908080607070f0e0f0e0c0a0a0a0606090f09090b0e0e0e0d0c0e100f110e0e0a091012121112141214111114151412110f14151314151516171214141310121314141412111415120f0f1012140304080e06080706050607080d0f11130c0c0c0b07080a0b080a0f1009070708080808090a0d0f0f0908080d0908080e0b0b0e0f060a0d0d090c0e1005080b0c080a0d0d080a0c0b0b0e100e0d0e0e0b0404050905050708040607060203030204030404060504040100fffe0000010200000000fefd0002020102030000ff00fcf9f9fc0b0a070707060404000000000a0c0906070603010101020003030100050401fffefefdfcfcfefcf9faf9f8f8f7f8f8fbfefdfefdfcfcfdfdfaf9f8f9fdfbfaf8f5f3f1f0f3f2f0eff5f3f3eff6f6f5f4f1efeff1f2f2f0eff5f1efeeeeebebebefeeefeceeecece9edebe9e6f0eeebe9eceaeaebf1edebebf6f3f2eef1efedece4e5e1dff0f3f2efeff2f4f4edebeaeef7f5f5f5f6f4f5f2edeff1f1eeeff2f3f0f0efecedebe8e5edeeeeece7e6e6e7e8e5e6ebe9e7e9e9f1f0efeff3f1eff0fcfcf8f302020000f4f4f3f5ff00fe0000ff00ff00fefdfffffefbf9fdfbf8f601fefbfdfdfaf8f70502fffe04020000070605020e0c0804080605070f0f0c0a0f0c0b090c0a0c0c0f12100f080d0e0d0f0e100f1414151418191914111413111718171517171816100f0e10141414151112111010111313141516141112171c05050303090a090713110c0a0d0e10110d0f11100e0d0e0f0c0e100f0b0f10120e0e0e0d0f100e0b1113110f1111100e0f0f1011131715150d0c0d0c0d0d0d0d0c1011100a0909080907090b0909080b06040305040303040000020302020001050405040006070602030200ff0002020406090906080b0803070a0900040403070502000300fffd0001010004020100fffffdfe0000fffffffffcfc00010200fc000101f7f8f9f7f9fbfaf9fdfefcfafcf9f8fbfbfaf8f8f9fcfcfcf7f6f6f7efeeeef0eeeef2f7eef0f3f4f5f8faf8f4f9f9f7f0f5f8f7f2f7f8f6eef2f4f3edeaeae9e7e7e9eae8e9edece8eaeae9ebe9eaeaecebecedeae7e6e9ececebece1e3e7e7eeeaeaebf3eeefefefededeef3eeececf1edebebefeeecebf0edececeae9edf0e6eaeff3eaeaedeee8e8e9e8ececedefe7e5e5e6ecebeaebeeefedecf0f0f1f3fefbf9faf5f4f3f3fefbf8f7fcf8f8fa00fffdfcf7f6f6f5f8f7f9f7fefcfcfcf7f5f6f5fcfcfcfd0001020001fffdfd0406080707070808090a0a0d0a0909090d0f0f0c0c0b0d0d0a0a0f100e0f121312121010110f0f0f1012120f12100e0e1512111011100e0d1411100f1111121214121211110d0b0b211e1c1a070a0f1006060705080a0909100d0907100f0c080e0e0e0f0f0f0e0c100e0b0a0a070607080605050b0806020e0d0a0a11110c0712100f09090706050a0704030b0602000402ffff070300000905fffd060807060201010200fdfdfd00000102020101020100ff00fbf8fbff00fcfdfe060402010501020306020000fffdf9f700fffcfafcfaf7f6fefbf9f7fefdfafafaf8f6f7fdfcfaf8fcfbfaf8fdfcfcfafffcf9f7f6f5f5f8f6f3f3f4f7f6f6f5fbfafafaf6f4f6f8faf9f9f9f7f8f7f8f3f3f2f1f8f8f8f7f2f1f4f8f5f3f5f4f3f1eff0f3f0f2f5f3f2f6f8f0eef0f0e9ebedf1e9eaeef3eceaeaebebedefefededededeeeef0f2edf1f3f6efeff1f2e7e4e5e4eef0f2f0f2f4f4f3f0efedeaeff2f2f2eff2f2f3ebecedeceef0f2f1f3f3f4f2f4f4f4f2edeef0f2e8e9eaecf1f1f2f3eaedefeeedececefeceef0eff4f5f6f9fdfffffef6f8f7f7f9fe0100fafafaf9fbfbfbfaf6fafcfef7f7fafdfe00ff00f9fc0001fe00020201030402fe02050706060708080a0a0a0f1112110a0c0e0f0a080a0b0f0f10100f0f0c0c130f0b090e0e0e0e1011110e0d0d0d0b0f1112121113110f0d0d0a091012121011100d0d110f0d0a0b0c0c10140f090c1113151206080b0a090d100f090c0f1006060b0f0e0f12130d0e0f0e0b0b0c09090d0d0b0708070600ff0102060300020200ff00060200020403040502020304ff0001050001030200ffff00fbfcfdfe0402030101010102fdfbf9fa00fefbfc0101fffefffdfbfb0100ffff00fefdfdfefcfbff0302010000fffffef4f1f1f5fbfeff00f7f9f9f9f7f5f5f7fdfefffef9fbfbfaf6f6f7f9f5f5f6f8f6f3f4f8f5f2f3f6f7f6f5f5f6f5f5f4f5f5f5f8fcfcf9fafafafaf8f8f8fafbf8f8fafcf1f3f5f8f6f6f6f8fafcfaf9f6f8f8faf3f5f6f8f6f7f7f6f9fcfbfaf1f4f4eff5f6f5f3f6f3f0efedeeededf1efeeeff0f0f4f6f3f3f3f6f7f6f4f1f4f2f0ede2e0dfdfededecedf3f3f2f1eae8e9eaf2f0f0eef3f3f2f0edededecefecebe9f1efeeebf0eae9eaf3f2f0eeedece9e7f1ede9e7edeeebe9f0f0edededebebedfbfaf7f4ff00fffff6f6f4f200fffefcf8f9fafaf7f7fafffbfefe00fffffdfb010300ff020100fd020200fd00fefdfe060502000807030008060504110e0d0d0f0f0d0a0a0807081214110e0c0b0a06080a0b0d0e0f0d0d0f0f0e0c09090907110f0e0c0e0f100e080a0c0e0f0f0f100d1010110b0f121514191919141a1e240a09090d080708090e0a09070d0a060513120f0a12110f0d0d0e0e0e090808060805040205040303040505050303010204050502080a09050502fffd050200ff05040201020100ff02030302010205040100000001fffd00fdfcfafafcfcfcfafdfdfefcff00fffd00fefbf8fdfefdfb0103030300010201feff0100fafefffc00fefcfbfafbfcfaf9fcfdfefefcfbfafaf9f6f6f8f7f7f8f6f4f4f5faf9f8f7fbfcfdfdf7fafaf9f7fafdfdf9fbfbfcf9faf8f8f7f4f3f3faf9f8f8fbf8f5f5f9f5f1eff8f8f5f3f9f8f6f2fafdfd00f9fdfdfbf6f6f6f6f6f8f8fbedf0f5f8f2f4f6f9f3f8fcfff0f5f9fbf0f0f1f2f6f3f3f4f8f9faf9f3f4f7faedf1f6f8e3e7ebe9edeeeef1f2f2f3f4eeeeefeeeeeef0f1eff0eff1edeff0ece9eaebeae9e9eaeceaebedf0eae8eaf0e4e5e5e6e9ecefeee6e6e5e8ececedefeeeeeeedf3f4f4f4fe0000fff3f6f7f7fbfafbfdf9fbfd00ff000001fdfdfd00fcfd00fffdfe0002f9f7f9fdfbfcfd00fdfeff00fdfeff0100000304060707060a0806060606070a0a0a0a0a0c0d0d0b040506060a0b0c0b080707090707080a080909090706060a0d0b0d0d0d0d0f100f10101110121213171818171919161428231c150e0c0a05080602ff070806030404060406030200090705030a06050306050200030301000403020205060605030405050100010102020202fefffefffffefdfc020100ff000000ff00fefffe0300ffff0103020202050403fafcfd00fd000404fe000306fbfcfe00f9fbff00fbfcfbfc02000001fffcfe00fdf9fafbfaf7f6f8fbfcff00fafcfefffefefefffcfc0001f8fbfdfef8fafafafbfbfbfaf9fbfbfbfcfbfafbf8f9faf9fbfcfcfbfdfbf9f8f7f8fafcf4f5f7f9f8f9f9faf6f6f8f9f0f2f2f2f3f3f3f0f1f5f7f5fdfbf6f3f5f2f1f1f4f6f8f7fbfaf9f8f7f6f5f5fcfcfdfeffff0003fbf7f8faf4f3f4f6f4f5f6f8f9f7f6f9fbfbfafaf7f6f7f8e9e8e7e7f3f6f4f4f7f9fafaf0eff1f2f3f6f6f8f1f3f3f5e9e9ecefeaedeff2eeeeedf1f1f2f2eff5f6f3eee9eaebebedececedeaececeef1f2f0f0edecedeef5f7f8f9fefd0001f6f6f9faff0001010101010001fffefe01010000fdfefe0105040201000201fe0000020300010406030607080607090e0707080608090c0909080605090503000809070606060505090906070a0808080807060807050606090606070a0908090c070306100e101114171816191b1919141516171719191cfef6f4f6fbf7f3f200fefcf801fffbfaffffffff01fffeff00fffffffffffdfa0000fffb020201fe050402000303030001020101030101010000fefdfbfcfdfdff000000fdfdfcfcfffffefdff01ffff010202030203040400fffefe03ff0000080807070004050500010202000305040405050403030304ff000101f9fcfbf903010200020404020000fdfd0301ff01fefdfbfefafafbfcfbfcfdfdfdfe0203fdff0102fafafdfefbfdfdfdf8fafe01fdfe0000fd000100fbfcff01f8fafcfff5f8fbfcf1f5f8faf2f4f8fbf1f3f7faf1f1f1f3f5f4f4f5fafcfdfff6f8fafefdfeff0003030100fbfafafbf7f8f8f9fafbfcfafafcfafcfbfdfdfdf5f4f4f6e3e2e3e8f3f3f2f1fdfefdf9f5f7f8f6f8f9fafbf7f9f8f6efeef0f1f4f5f5f4f4f5f7f8eeeff3f6eaeceff3ebeaebedf1f1f1f2f0f4f4f4f3f7f9f9f0f2f4f6fafafbfd03040607f8f8f8fb010000fffffdfdfefefefeff0000fefe0304030303040406fbfcff000401000206060609090909090f0e0807050304070603030203020000fffdfbfb060401fd04030201060707070907060508070608070608090708070708070809070808080f0e0b0c110f0d0d15141212161614141e231c15f9fcfaf8f1f1f0eff5f3f1f2f9f7f6f7fefdfaf8fffcf8f6fdfaf6f6f9f6f6f8f8f6f5f5f9f7f7f7fefcfbfbfdfaf8fafdfbf9f9020201fffafbfcfefdfdfefefe000001fd000000fdffff00fefeffff0000000004020101ff00000003030201070809050403040500ff010403000205060708060508080701010102f8f8fc00fffeff01fffcfdfcfdfffffe0306040400040404feff0203fdff00010405050504060505fe00ff00fffefeff00fdfbfcff000002010103030202030201020303fbfdfe00fbfd0000fcff0202fd000000f6fafdfbf8fafafafefeffff00fefcfc01000001fffcfefefbfbfcfbf8f7f8f8f9f9f9f9fdfdfafafdfcfafbf7f8f8f8eaeae9e9f0f0f3f4f8f8fafbf7f7f8f8fd0000fdf6f9fdfef4f7f8f6f4f5f9fbf7f6fafcf9fafcfcf6f8f9fbf0f2f3f3f3f6f9faf4f4f5f4f9f7f7f7f7f8f7f6fdfdfdfe08080608fe00fffdff0002040001030301030504ff01020303040404080a0c0c0004070905090a0d0a0f11120d111514090d110f080808070405050600fdfcfafcfcf9f9fcfbfbfc0100fdfb0601fffd0604020309070305090506070907080a0c090708090805050d0a09090b080606110f0805110d07050d0907064300cc000f0000009b9a999796959392918f8e8d8b8a898786858382817f7e7d7b7a797776757372716f6e6d6b6a696766656362615f5e5d5b5a595756555251504e4d4c4a49484645444241403e3d3c3a39383635343231302e2d2c2a29282625242221201e1d1c1a19181615141211100e0d0c0a0908060d7200000ca3100b12208ea21c83d44cd3235915656118a66dd95469d45551d72549d19265d0756d9de6791d3569d9e67999d451228871dec66dd7b6695cb769d5453918f65094f45496c631cc645dd7d43845911800a130 -''') -assert expected == actual - diff --git a/pair.py b/pair.py index 22b2735..5cdff17 100644 --- a/pair.py +++ b/pair.py @@ -6,8 +6,8 @@ from proto9x.tls import tls from proto9x.flash import read_flash from proto9x.init_flash import init_flash from proto9x.upload_fwext import upload_fwext -from proto9x.calibrate import calibrate from proto9x.init_db import init_db +from proto9x.sensor import sensor #usb.trace_enabled=True #tls.trace_enabled=True @@ -31,7 +31,8 @@ upload_fwext() restart() print('Calibrating...') -calibrate() +sensor.open(False) +sensor.calibrate() print('Init database...') init_db() diff --git a/proto9x/blobs.py b/proto9x/blobs.py index 0de5f68..5834c49 100644 --- a/proto9x/blobs.py +++ b/proto9x/blobs.py @@ -5,9 +5,6 @@ class Blobs(Enum): init_hardcoded_clean_slate = auto() reset_blob = auto() db_write_enable = auto() - identify_prg = auto() - enroll_prg = auto() - calibrate_prg = auto() def __load_blob(blob): diff --git a/proto9x/blobs_9a.py b/proto9x/blobs_9a.py index 47c218d..0112667 100644 --- a/proto9x/blobs_9a.py +++ b/proto9x/blobs_9a.py @@ -320,758 +320,3 @@ f5b89d6e3f25a05241f32f139e898126aec8b1715cac0208831fb1205f9efb75538755b2d83931c7 2a07527b95a1fe508d0b7c8da5b9047d277508ff615c9dc9ab11596aa88d0c9734a45d81f0393219bead587d3a6f9d07c470f2abf8d7c69 92228bf0ab6ef79e46599bb0a60 ''') - -# FIXME this must be very specific to a particular device and constructed on the fly from multiple hardcoded tables: -identify_prg=unhex(''' -027800000023000000200008000020008000000100320074000000008020200400242000005020773628200100302001003c20800008213 -8000c210000482107004c210000582000005c20000060200000682005006c20014970200141742001887820018084202000942001809c20 -0902a0200b19b4200300b8203b04bc201400c0200200c4200100c82002003300100000000080cc200000f503d0200000a10132004400000 -00080dc20e803e0206401e420d002e8200001f0200500f8200500fc200000b8203a00000804001408000008080000080800001408300008 -080000140831001c081a0032000c0000000080501101004c111e0034007801e8f4f6f4f2f4f6f7f4f1eeeceef2f5f5f8f9faf9f7f7f9fc0 -0040d10121111121415131112151a1e1c1a1a1a1c1b1b18140f1012141616151615120c04030202fffdfbfbfbfaf9f4efedeeeeedf1f2f1 -efeeefecece9eae9e9eaedf1f4f6f6f4f3f4f6f9fbfdfdfefdfefe000000000110232e10232e10232c10232c10232c01065010250101000 -007c8078c06ff0000000000004f8b006d0300280307030990098db00b90880991858e08c1810b9190910ac1b8928a0993878a890b938889 -8908c88191890ac8889289099a818a890b9a88898908d08191890ad08892890802818a095a810a0288890b5a8808d98189890ad99089890 -95e8289890b5e88898908e18189890ae190898909648289890b648889096e8108e981890b6e880ae99091b9096f828a8f0b6f88918908f0 -818a890af090898909768289910b76b8918a08f88792910af8888a92097c81898a0b7c09018089890b01888991097f8189920b7f0908808 -9920b088889920c07030307200402000000002f0004007000000029000400700000003500040080000000170000004e002800fbb20f0000 -000f00300000008700020067000a00018000000a0200000b1900008813b80b010910002e001c000200180002000000700070004d010000a -0008c003c32321e3c0a020244000400010000003000f4311e000000ff0000008d002007ff00000095003007ffffffff00000085ffffffff -04000085ffffffff08000085ffffffff0c000085ffffffff10000085ffffffff14000085ffffffff18000085ffffffff1c000085fffffff -f20000085ffffffff24000085ffffffff28000085ffffffff2c000085ffffffff30000085ffffffff34000085ffffffff38000085ffffff -ff3c000085ffffffff40000085ffffffff44000085ffffffff48000085ffffffff4c000085ffffffff50000085ffffffff54000085fffff -fff58000085ffffffff5c000085ffffffff60000085ffffffff64000085ffffffff68000085ffffffff6c0000856f33110b120e0f101010 -0f11140d0c0c08080c0e0e0b0f101a100f11120f13160d0e0e100f09080a0d0a0d0d0c06090c10070c10030c0f140407090bfdff0003ff0 -6060500020405fbff0003f9030504fb040604fa010505f6fe00fef3fcfefdf0f9fbfdf0f9fafaf400fffeeaf6f8f7effafefef4f7fcfff3 -f6f9fd130e00fcf6fbfdfdedf5f6f7edf1f3f4f1f5f5f6ebf4f6f7edf6f6f5f2f6f7f6f1f4f8faf1f1f2f3f8f1f2f3f4f5f2f3eaf3f4f3f -3f4f5f6ebf1f0f1eff5f4f4e9f2f3f3e7f2f2f1f7fffefbf600fefbe7f4f6f5e8f6f5f2f2f4f3f3f5f5f4f4ebf4f4f1e8f4f6f4e2f1f4f2 -e0f3f7f7e1f5fbfbe3f0f1f2ecf2f5f5e1f1f5f3e8eef2f6f6060403e1f3f5f3e7f3f5f8e1f0f1f1e1f3f7f9e5f2f6f6e8f5f7f8ecfbfcf -bf3ff0100eefe00fdf0fffffc131201faedfcfdfbe8f9faf7e0f0f3f1e0edf1f1eaf3f6f6dadfe1e1e6edeeeff2f4f5f4e8f2f4f1eaf7fb -faf2f6f9fbe7eff5f9eef6fafdf0f3f4f5f2f4f7f9f1f9fdfdf4fffffef300010205110905090a0a06ff010405fc060807fc090d0dfe070 -808fe0b0c0d000a0c0c0305090a020608060e0909090e07080605050706090303030afefdff070000020a0302056f2909070f161e21100f -10120f0e0e140a0e12180e1011131111121414181a1a19191715111314130d1214170e0f0d0e0b080709110e090713100c0b0a090705070 -909080506080a040404070605050503010002020000ff03000000fbf7f6f8fdfbf9f9fffffdfbfafaf9f9fcfaf5f4f7f4f3f2fdf9f3f202 -02fffcfffffefefbf9f8f8fefdfdfcfcfefffef7f9f9f8f8fbfcfaf7f5f5f7f3f2f2f3f6f5f3f3faf8f7f8f1f0f0f4f3f1efecf4f4f2f0f -5f5f5f5f5f7f8f9f3f6fafbf3f2f2f3f3f1f2f3f2f1f1f2f7f3efeff8f2f0ecf5f4f3f1f0edeaebf4f3f1f0f8fbfcfcf0f0f2f4f2f4f6f7 -f2f5f7f5f5f5f5f4f7f4f5f4f0f2f4f6f1f1f1f2f2efefeff4f3f1f000fcf8f6f0efefecf7f7f5f4f0f0f2f2f8f6f5f4f8f9f6f5f6f3f2f -1f8f9f8f700fffffcfbfaf8f8f8f9f8f8f9f9faf8f9fafbfbf6f8f8f9f1f4f8f8eff1f3f6f7f7f8f9e4e7eaebeef0f2f3f3f5f7f8f0f2f8 -faf5f4f8fafafafcfbfbfdfdfbfdfe0001f9fbfcfcfdfdfffefefffffefefffefd04050402010000000505050407050706040301010b090 -605090704010c0a07050e0e0c0b0c0e100f07090908080b0c0a090e111106050506050607070204070804030302060402020503ff032222 -201e191b1a19191b19181d2120201618191a141516171a1a1b1c16191b1b13100f0e151312100d0b0c0e0908080a07070b0e0b0c0d0f040 -4060908090b0d0b0c0d0a070704030507060503030404ff00010300030506fbfdfffffbfdfefefbfbfdfef7f7f7f7f4f5f7f7f4f8fcfcf3 -f9fe02f9fafcfdfefefffef8f9faf9f9fafbfdfbfbfaf9f6f8f8f9f5f4f4f7f6f7f5f7f3f6f5f4f5f7f6f6fafaf7f5f6f6f3f3eceff2f4e -eeff1f2f6f6f6f5f8f7f5f5fafaf7f5f3f5f4f4f2f3f5f5f2f1f0f1eff2f4f5edf0f3f7eeeeeff1eef2f4f3f1f2f3f3faf9f8f8f2f1eef0 -f4f1eeecf3f1f0eff0edebecf2efeeeef7f4f1f0f4f4f3f1eff0f0f0eeebedeef7f8f9f8ececefeef4f3f3f3f0ecebeff1eeeceff5f3f2f -1f2f2f2f0f5f3f2f1faf7f8f7f8f9f7f6f5f2f1eff7f4f2f0fcfbf9f7fafaf7f6f6f3f1f0f8f4f2f1f9f9f7f5ebebeae9f6f7f6f3f7f7f6 -f8faf6f3f3fdfbfaf6fcf8f7f5fbf9f7f60201fffdfcfbf9f7fcfcfbf9fcfaf8f6fbfaf8f80101fffd01020200040404040604030300010 -102030203040103030204050203070505040e0a09070808060509090806111112100809090a08090a0d090c0e100505090d05070a0f0709 -10131d1b1c1c1b1c1e1e1616181b1c17141318151111161514141b1717161a1a1b1b11151818111115151011110f0e0e0e0e100e0a09111 -213110f1110100e0d0d0e0a0a0a0904080a09030406060505060704050507050303020100fefd00000000fefe0000f6f6f8fcf5f5f9fdfc -fbf9f80302fffd00020201fffffffdf8fafafafbfcfdfef7f5f3f4f7f6f3f3f7f7f8f8f6f5f5f4f3f4f4f2f6f7f6f4f7f8f7f3f2f5f6f5f -5f6f6f7f0f3f3f3f3f4f4f5f5f6f5f7f1efeef0f1f1f2f1f2f1f1f2f1f0eeeef5f3f1f2f7f7f5f3f1f0eeeff2f1f1eff3f1f1f1f7f7f7f8 -f1f5f7f8eef2f5f5efededefeff0f1f3f1f4f4f4f1f2f2f1f1f1f2f3f1f1f1f2eeedecebfafafaf5efeff0edf2f0eff0f0f0efeff1f2f7f -9efeeeff1ece9eceef3f3f5f5f6f4f4f5f4f4f4f7f1f5f8fbefefeff1f5f5f6f8f6fafafcf0f1f2f1f0f1f0eff6f9fafae8e7e9e9f2f2f3 -f5f8fbfcfaf4f5f2f3f7f5f5f4f5f3f4f3f4f3f0effafaf9f8f7fafaf8f9fafaf8f6f7f7f9f9fafbf9fbfafcfeff0000000508090803040 -40503050505050608080000000402030405060708090504040205030203070708090f0e0d0d0a0707090e0f0e0d100e0908100f0e0c1314 -1413191617182223251f1d1a17121c1a150f12121110100f0d0b13100f0e151211101714101017161412151211100d0f0d090e0d0703090 -a09070c09090a0e0a08050d0a090806040304070504040300000002fffcfe0605010001010101fdfeff0000fdfdfd00fefdfffbf9f5f6fc -f9f6f4f7f7f7f7fbfafcfdfefcfcfdfbf9fafef9fbf9f8fefefdfdf7fbfcfbf3f5f6f7f7f7f8f9f5f7f8f8f1f0f1f4f3f3f1f2f2f0f2f3f -2efeceff5f4f3f4f3f5f5f7f5f6f8fcf8f7f7f9f1f4f6f8efedeff5f1eff1f4edeff1f5f3f6fcfef3f5f6f9f4f4f7f9f1f0f0f5f2f1f1f4 -f7f9fafff7f7f9fbf8f9faf9f2f7fafbf4f6f7f9f5f4f6faf0f0f3f7f1f0f0f4f0eeedeeebedeef0f5f4f8fbeaebeef4f1f4f6f9f1f1f4f -7f9f7f8faf6f8fbfdf1f1f5f8f2f0f1f5f6f8fbfef9fafbfdfafafafef4f7fb00f8fbfd00fafbfcfef3f6fcfef0f6f9fffbfbfe00ebecee -f0f5f4f6fafbfd0102f5fafefff3f6fd00f5f8fcfbf1f5f9fbf9fbfefff7f8fafaf9fcfefefbfbfcfcfafbfcfbfffefeffff000101070a0 -c08070b0c08060708060a09090708060506080809090a0b0c0706090e0b04070808090808070d0d0e0c070705050c0b0a06070907030a07 -06050e090300150afff81a16130e0f0b080508060809100d0d0c090a0d0b090606070e0a0807100d0c090f0d0c0a0f0d0b0a0607070800f -dfe000602fffd090704030604040206030303040403020100fdfd0000fffc00fefcfcfffefdfe00fffcfa00fcf9f8fcf9f7f800fffdfcf8 -f9fcfef5f5f9fcf7f7fafcff000101fefdfcfefdfdfefef9fbfefffbf9fafcfaf9fafcf7f8fafbfafbfcfcf8f9fbfdf8faf9f9f4f4f6f8f -7fbfefff3f7fcfef7fafdfffafbfe00ff000103fbfc0002fbff0001faff0001f9fc0001f7faff0000010104fbfe0002fd000002fafdff00 -f7f9fd0003050506fdfdff01f7f7f9fcfbfdfefefcff01fffe000003fd000101f9fd0000f3f9fd01f2f7fbffff040509f7f9f9fafafe000 -1f9fafbfbf9fafafdfefdfcfdfafcfdfcf8fcfe01000204050104070800010103040302000406030200ff000200000000020200fe030200 -00f3f4f4f3fbfbf9f900fbf9fafffefcfb030200fdfafafafafbfaf7f5fffefefaf9f8f8f6fdfefefbfd00fffffbfbfaf900ffff00fffef -dfc02fefdfc030000ff030200ff030102040705040308090806050405040603fffe06040101040201010e0a0602050401000402010300ff -010302000002fefe0204f6f7fcff080400fb040200fe0502ffff090400fe0a070301070401000602fefd07030100070604010601fefb040 -1fffe00fffefefcfcfafa010201010201fefc02fffaf60200fefbfdfdfcfaf9f7f6f7fcfcfbfb000100fffbfcfdfff8f9fcfdf9fdfefffe -fe0000ff000001ff000000fdfbfafc020101020002020202020101fefcfbfdfefdfdfffbf9f6f9faf8f9fafcfdff01fefeff00fcff0003f -bffff0100010104ffff01040105060304030202030404070100000401010204000102070305070c01020306040606070406070603050609 -03060a0c04090d0e080c090c0307080a00040d1000040b0f00040c11050b141803070e130508101104090f12000104060c12181bfd02070 -90304090dfd00070f02060a0cfe000407fcfe04080304070806080b0e090a0d100506080b0103060902050b1204081014ffff0308feff02 -0500020505f2f0eef1f8f8fcfffefefbfafbfaf9f8fbfbfcfbf9f9f7f6f4f6f9f8fafbfdfdf7f7fafcf7f6f7f9fdfbfbfcf8f9fafbfefdf -dfdfbf9fafbfbfbf9fafdfaf8f7fdfbf9f90201fffc020100fe05060806030302ffff0100fe020300fd010101fd000000fd00fefefc0200 -fefc01fbf6f401fefbfa0500fbf600fcf6f1f5f4f4f6fbfaf8f700fdf9f5fdfbfbf900fef9f4fcf8f4f3fbfaf8f700fbf9f7fdf9f5f2faf -8f6f2fbf9f9f6fcf8f2eef6f5f4f3fef9f6f4f7f4f0eff6f6f6f4fafbfcfbf9f8f8f8f9fafafafcfcfaf9fdfcfcfafefefdfdfdfbfbfcfc -fcfcfe01030404000101020100fefdff0103020507060404080909040a0e0d01040304fefeff02fcff0001fcfe010101010102000202040 -70a0a070204060603070a0d0607080b010204090407080d080e0f11070d0e0c090e0e0e0a0f100f0f101213080d0f120c12131106080b10 -0d1215190f1114150d0e10120c1114150d11121412111112121317181414141617141316161817181512121213141314080a0d0f1b1c202 -30b0a0e1513171a1d131418190f1014190c0f171b0d1015150a0d12150f12191c121211130e1012130f11131415121213161514140d0f0e -0d060809090504080df4f6fa0000000508ff030909fd010504fdff0000f6f8f9fbf8f9fcfdffff0000fdfcfcfcfcfdff00fcfdfdf9fcfbf -bfcff000100faf9f9f9fafbf9f8f8f7f4f3f8f7f4f2f8f7f7f8fbf9f6f601fdfafafbf8f5f6f9f7f6f7f9f5f4f4f9f4f3f4faf9f8f7faf7 -f3effaf5f0ecf5f2ede9f8f5eeeaf3eeeae8e7e0dadafafefffaf7f8f9f8f5f4f5f4f9f8f7f5f3f2f2f0f4f4f3f0f8f8f5f2f5f4f2f1f1e -fece8f1f0efeef1edebeceeece9e8f1edecebf2f1f2f4eef0f2f4f5f5f7f7faf8f8f7f7f6f6f7f9f7f8f7f8f8f6f7f9f8f9fcfbfaf9fafb -f9f8f8fefaf7f801fefbfe00fdfbfafcf9fafcfffafbff020000ff080704020905070904050707050709090506080a000105090307090b0 -6090a090505070c07090f120d0e14170c0b0d0f0a0d0b101014181b11151c1d0c0d1418101216170c0f131715181c1e14171b1c13171c1e -1314181b1a1a1918181818191516171917171a1b151717151415131117171a1e16181719191d1f221718191914181717161b1e1d1218181 -925282a2c1c1d1a172023201c1c1c1b171d20211e2021211d16171819171615171c1c1b1c1313111212100f1111100f11110e0a0d14120f -0b0c0a0a0607030203100e0d0b040301ff070606060908080803030405feff0003f9fcfc00fcf9f8fa0101fffefbfcf8f9fdf9f5f6f6f4f -3f4fcfcfbfbfefafbfdf9f7f6f7f8f8f7f5f1f1efedf0eeedecf6f4f3f3f4f3edecf7f2edeaf6f5f1eef8f9f7f4f5f4f2eff3f2efeef5f3 -f0ededeceae8ecececece9eae9e8e9e8e7e8eaebeceddbdee3e9f5efece9f4efeeeef3eff1f2f3f1f0f0efefefefedececebf0efeeeeede -9e9eae4e4e5e8eceae7e7ecedeeeeeae9e9eaebece9e7f5f3f4f5f4f2f0f0f5f2f0eef8f7f7f6f7f5f6f7f7f7f6f5f8f7f6f6fefefffcfa -f9f8f6f8fafbfcfd0000fe00fffaf7fafafbfaff00000300fefbfbfffefdfe010201000a0802fe05030100070503020a0702010a0807070 -a090807070401ff0e0d07041311100f16141315101113151315110e1e1b17111e1d1d1d1a1718181a191714191a1c1c1e21211f1e1c1916 -1f1917181e18131217191a1b1d1c1d201b1d1e1c1d1c1c1914171b2012151a1e1f2123241e252a2e262d32321a1b1d1e1716181c1f23272 -6191c201e2f383c3f1c2228281a1d2021171c21251d2228291c202121191b1b1b1c1f1e1d1c1c1919171d202013181b1c111515150f1215 -160c1014170405080904060a0e0b0d1111000000fe07060706090a0908050506050506060803060503fd020300fbfe0005f8f9f9fbf4f5f -3f2f5f6f5f6fcfbf9f8fdfdfaf7f6f7f8f8f2f1f2f2e9e9e7e6edeeeeecf3f6f6f5edf1f1eeeaebeeedeceae9e7ece6e4e5eae8e6e6ecea -e8e5ecebe7e6e8e6e6e8e9e9e8eae8e9e7e6e8e9e9eaeff0f0efeceae7e5e8e6e6e6eeedebe8f4f2eeebf1efedecefefefefeaeaeae9ece -be9e9ecefefebe9e9e7e6e8e8e6e5efeeebe9ebecebeae8e9eae9f5f4f4f3f0f1f3f2f0f2f5f7f4f6f9fcf6f5f7fcf4f2f6faf7f7f9fbff -fbf9f8f6f6f9fefbfcfbfefafafc00f5f8fe03fbfc000102fffcfcfaf9f9fbfffefdfefffefefcfcfdfefc0001010105040402000000010 -705030306040303feff02050607090a0c09080915151210171614100b0d1212101112111b1919191718151213141412191716141d191716 -161616141d211e1b191d1e1a191b1b1b222524221a1b1c1e1a1c201f1e1b1a191c1a1a1a232123242f2c2a27302f2c2c212526252124242 -427282b2f1d1e22273e3d404626272b2e20201d1e2724211e28282726222324261e201f1e1b1e1f23191e1f1f1f1d1c1e1b1d1d1c131212 -1619171a1a1c1e211e0f1113101215161414181716feff000106090c0e08090a100606090b080a0d1002020206fefd020306070809fbfdf -dfff2f3fafdf9fafcfdf9faf9f7f5f6f7f7f5f2f0f0f2edeae8e6e4e3e2edebedebf4f3f1eee9e8e9e9edeceeebe7e7e8e7e5e4e3e4e7e5 -e4e5e6e6e5e3e7e8e9e7ebe9e8e4ebebe9e7e5e4e5e5ebece9e6edebe9e6e0dedddee5e3e4e6e5e5e8ebecebeaebeceae9eaebeaeaeceae -cedeceaedeeeceaebeeede6e9e9e9e6e8e8e7e8e7e8eae6e5e6e9e8e7e9ebf4f4f5f4f3f2f2f2f8f9f9f8fcfcfcfc0000fffdfdfffefefd -fefefdfcff00fd00fffefefeff0000000101040505030703010203fcff0102fbfe0004ff03070bfbfe0309f9fa000500ff0001050404010 -20305060404030304040405060506080b0804030601fefd0a0503040c0704020d0601000b0806061815120d110f0d08120f0c0a110f0b0a -1613110d171615121717161717161411191815151e1916131d1d19151c1a1918191a17181c1b1b1826262827282829292928292a221e1c1 -d2424221e2e2d2928292826224745403d2c28231f1f2223221f212220252523222320212220222123211e1d1e1e1d1d1c1e1f1f221c1c1e -21191f22251c1d1f1e1e1c1d1c11100f10110f0f1215141310020204060c0c0c0f12121113111315151211110e080a08070606060509090 -8070000fefd00fffdfcfefaf5f5f8f9f8f8f8f6f8fbf2f6f6f7eaececeae5e8e9e8eaebebebedefefefe8e7e8e8eae9eae9e5e6e6e5e3e5 -e4e5e5e4e5e7e2e1dfe1e6e7e9eae5e8e9ece9eef0f0e8ebedede9edf1f2e6eaf0f5dee2e7ece5e6e5e4e9e6e1e3eae8e6eaeaeeeff0eef -3f6f7eaeff1f4ebeff1f1e9eceef0e7eaeceee6ebedf1ecf0f1f3ebeef1f2edeeedeef2efeef1efededeff4f5f4f1fafbfaf8fcfaf8f8fc -fcf8f8fbfbfaf9fafafbfdfdfdfdfffefdfbfb02000000070703010405050505070a09080a09080e0d0d0b0a0907070809080b020507080 -10104060504020300ff0003040405080b08060305070400fcfefefc0305030200000102fdfcfcfd06060505090806050405060508070404 -080807030908080a110f100e171514121214141416171715151512121310100c1715151318191613140f1012231f1a1a25211d1c2928242 -21f1b18161e1d1c1a2a2c2c29211f1f1b3d3b3a39222325242424241d201e1e2022242727211e1e1f23221e1d222223252122211e272524 -2224222121251e1c1d1f1b1c1d1e1d1f231317171817151514101117190a0b0d0c10100e0e14141211151412100a0b0d0f0406070903060 -60706060503fafdfe00f9f9f8f9f6f9fbfcf7fafafcfcfcfbfdf7f9f8f8e7eceff1e5e6e9ebeaebedeeedeff0f2e7e8eaece8eaeff1e8eb -f0f1e5e9ecedeaeeecebe3e8eaeaebeeeceaebebe9e9ebe9e9ecebece9eaf0f0eeeef4f4f1f0edececeee3e3e5eae6eaeceeedefeae6eee -deef0f7f5fbfcf2f2f1eff0f0f2f3efefeceaebe8e7e7eeedecedefeff1f4f0edecf0ececeeeef2f5f6f9eff0f3f6eeeff4f8f4f7fbfef6 -f7f7f9f8fbfbfbfcfe0000fe000101ff020505fd00020301030607040609090607070209070703070808060e0e0d0e080909070b0a07060 -80601fc0300fbff0002050806090c0805fdf8f700000102fefaf5f4f8f7fc01fdfbfdfe00fefafbfcfc000201fefbfd0100feff01fefbfb -00fef9f90003080d0702fdfe0a05000211111213141512131211111312151716080910151213161a0f0f1117141616151c1a1a19201f1e1 -8221f1c18181817171c1d1c1a26201d1c191514103a36291a26211d1c1b1a1d1d24221e1b27211d1d232626202225251e241f1c1d1e1b18 -152121202026282a2825272924252929252b2c2e271c1c1e191f2c302b1c1b1e1d0e1721290f141915121212110f11110e0f100f0d0c0f0 -c0a090d0e0f05080c0efffe0003fafafbfdfdfe00fffcfcfefffffffdfbf8f9fcfbf2f2f5f8ededeff0efefefeff2f2f1f1f0f5f6f5f3f1 -f2f2efeeeff1ecebebebe9e8e5e6e8e6e7e6e8e8ebe9e9e9eae9ebebebede9eaebeaecedf0efedecededeeeef0f1ebeae9e9edeceeefe7e -df4f7f1f1efeefaf3f0f0eeeff2f3f3f2f0f0eaf0f1f2ebf0f4f5f1f3f4f3f6f3f2f2f2f5f6f7eeeff1f2f8f8f8faf7f6f7f9fafaf9f9fd -fafafcfdfefffefcfdff01ffff00010000030404030303020202ff0808090a09090c0f00fe020601000406050502020e0a0805080906040 -4060504fbfd00ff040908060402000002ffff00fafdfe00fefcfcfef4fafcfe0100fe00fefe0003fafcfd000300fefe01070a0c02090c0d -0005090cfc0003070703050903080d11060a0f12121311101312111012100e0f14100f0f1614111019140f0d1714100d1615120c1a1b181 -21715120d1a181513191a150f1716120a1c1a17150f0d0a080e0604031d1a15101c19140f1c18150d1f1f1e191a15110f161311101d1c1c -1b17181614201f1b1726231f1a2322221f1f1d1d1d27221f1c1a19191a1f1815151c1a181927252220110c0d0d131212110c0e10110d0e0 -d0a090e0c070f100d090f0e0a090505030100020203fefcff00fffffefff9fbfe03fbfbfe00f9faf8f9f2f6f7f7eceff0f3f3f7fafdf4f6 -f7f9f5f7f7f8f3f5f7f8f1f7f8f9e7eceef2e8ebedf2ebeaeff3eaeaebefecedeeefe9ebecefedebedefedeef2f6f2f0eff1ebe7e6e4f0e -feeeef8f8f7f7f1f4f3f3f1f3f5f6f3f4f4f6f1f1f0f1f1f0ededf2f1eff0f3f2f1f0f4f6f7f7f5f5f3f6f3f4f4f4fafafcfdfcfaf9f7fb -fbfdfdffff0000fffdfdfd02010000030203030505070604040607000002020804fffe0e08030009090705090a0a0601040504050505060 -204040402010204000203030709090802020302000001010104070a000407070003090e030a0d100a121617080e11150105080913161814 -10131714111314120d1014130f10121413121211131112100f1111111414130e12141410100f0e0a0f0e090411110d050e0d07020503020 -20b080705050202050f0d0806060201020300feff0f06020203ffff0000fefbfa0a0806060b0b0b0a09050401120a07060d0c0703100d0a -071813100f110f0b08141311101513110f19150f0917120e0e16140f0d1818161413131313181614131b1716150b060504100c07050f0a0 -60506040407020103050703030708090a0f0101040a0102010501010104fe00020604060a100305080df8fe0105f7fafe00f6fafe00feff -fffffafbfbfdf9fc0000f9f8f9fcf9fafbfef4f6f8f8f7fbf8f8f6faf9f9f4f7f9f9f1f5f7f7f1f4f2f0f1f3f4f7f8f7f6f6f4f4f1efe5e -9edf1eff1f3f5f5f6f6f9f3f4f6f6f9fcfdfcf7f8fafcf2f3f5f4eff2f3f2f0f1f1f3f1f3f4f8f8fafbfdf8fafafaf3f4f5f6fe00fffef8 -f8fd00fdfe020400010404fefefe0000fcfaf90200fefc0603020005020000000000fffefeff00fdfdfeff0200ff00010000010101ff010 -60807060303020305050304020100ff0604040400feff02020405070c0b0a090909070313130f0a1213120f14141211171a16150a09090b -121313141413141612100e0d13110f0e14100c09100d09080e09070612110f0a0b0808070e0904010a0a06010200fffe01ff01000100fef -cfffdfbfb01000000050302000200fffe00fdfbfc000202000305050601010000fcfe00ff0506080605030204fefefefc05040303000205 -05050404000b080701070605030f0d0b090c0d0d0e07040301100d08010c090605120f0a0812100a06100c0c0e1612111005030000080a0 -a0a070809070805040405050504090a0806131412101013131107090a0b07090b0a08090a0c100f0c0d10141413070c0e0f010305080102 -0303000207090001020301030607fe000103fefffe00f9fafcfdf7f9f9fbf7fafbfdfbf9fbfbf8f8fbfdf1f4f7f9f7f9f9f8f7f9f8f8eef -1eff0f5f9fcfef9fd0104fdff0102f9fbfdfefbfe0000fdff0000f5f7fcfef3f6fc00f9fe0001fe00ff00fdff0003fd000203f7fafd00fb -fbfd0101010205030000050202050902020104f9fbfd01fbfbfbfe0201000300000000ff00000002060808000104050000ff00020303010 -30302ff050404030204050504050504fefeff000405090b040504050808080a0c0e0e0e05070708080708080a090a0a0f0e0d0c130e0d0c -0e0d0a0515140f0b14120b070e0d0b070c0c080408070604080805010502fffb0602fffc0301fefafefdfaf7fdf7f6f4fffcf9f300fbf7f -5faf4f1f0fbfaf9f400fdf9f400fcfbf7fcfafbf9fcf9f6f3fcf7f5f60200fdfa0001fffcfdfcf9f7050300fd00fcfafaf9f8f7f6020101 -fe02fffbf9fffcfbf9fffdfcfa01fefaf80500fcf90d08040000fefcfcfefcfdfb0200fdfe0502fdfb020200000f0d080410111113ff000 -3050a0c0a05060506030305060704060708060707060f0c0a09100d0a070b0c0b0a0a0606060d0d0c0a0e0f0f0e0f0e0e10100d0c0d0905 -030303020203080b0a0a05080706040605060202010500040508fe0003070004060700010408fbfe020600020306fcff0003f9fb0209f9f -d050af2f80107fefdfeff0301010103010000fefdff02000003050000020501000204010306080205070702050707040607080405050704 -04040507090a0b06060503090c09060c0c0a0a0402020204040405010102030402000200010002000101020501020406070908010507090 -1030403fd000103040507080504040600010406010100000a090909060504030b0c0d0e0e0d0c0e080e0c0a09090907070401000b0a0906 -0a08070702000203090608080708090805040404030402ff02020100fffefffefdfdfefdfbfcfc00f8f8f6f6f4f3f2f1f2edededf2efede -cf5f4f3f3f2f4f4f2efedeeeef3f3f3f2f5f0f1f2f4eeeff1f4f6f5f1f8f9f8f6f9f9f8f6fafaf7f4f3f0eceaf8f6f3f0faf9f9f6f3f3f4 -f5f7f3f5f7f7f7f6f4f6f2f0eef6f4f3f2f6f6f4f4f9f9faf7fefaf7f2f9f6f3eff9f8f9f9fdfaf8f7fcfaf9f8fffdfbf903fefefe110f0 -d0a03020001fffdfbfe00fefefe070606060503020203020000090908080500fffd0804020007070708090606071111100f1113120f0c0d -0c09070a0c0b07090c0e080c0d0f0506090d0a0e1111080f11120b1013120b0f1415080d10140c0f12140a0e1213090d0e0f080c0f12101 -314140d0c0e0f0c0a0704000002040504050404070b0d0204070b07070808060505060405070a090808080708090a0808090a0a0d0e0c09 -0c0c0c050505040d0d0c0903040303050606070c0b0a0905070909040405090402030403050405030303020202020106030203080405050 -8060201030100ff040201000806050006070603050201000100fffd0a0a090a030202030c0603010f0d0708080504060401010000fefeff -020101030601fffd02fefbf90500fbf806fffbf801fffdfdfcfaf9fafbf8f8f9fbf7f6f9fdfaf8f50000faf5f5f5f3f2f2f1f2f4f0f0f1f -0ededeef0f3f1f2f3f1edeeededf1f2f1f2f4f4f1f2f3f2f0eff1f2f2efeff0eff2f2f2f4f3f3f6f6f1f1f2f2ebe9e5e6f1f2eeeef6f5f0 -eff3f4f2f1f8fafaf8f3f4f7f6f1f2f2eff2f2f1f0f3f5f5f5f6f7f5f1eef0f1efebe9e9eaf7f6f4f0f8f8f4eff7f6f6f5fbfdfef902040 -2ff0a0a07050100fcf9fe020403fcfe00000508070603030301ff00020007070705ff00020101040708090a0a08080607070e0f0e0d0b0a -0a0a0507091009090c0f0e0e0c0c0f1010110f0e0b091112121112141313121213151412101015151415161616161413151310121314131 -41212151412100f1113130304090f07080806060608080e0f12130d0c0d0d08090a0d080a100f0a0907080809090a0a0d100f0a09080d08 -07080f0b0d0e10060a0d0e090c0e1004090c0c080b0e0e090a0b0d0d0e100f0d0e0d0d03050508050607090406070602020301040404040 -60505040100fefeff00000200000000fefd00030201030301ffff00fcf9f9fc0a0a070606050604010000000c0d09060706040101010101 -0203000005040200fefefffcfdfefcf9faf8f8f8f7f8f9fbfdfdfefdfcfdfdfdfafaf9f9fcfcfbf7f5f3f0eff3f2f0eef5f3f1eff5f7f5f -4f1efeff0f2f2f0eff6f1efefeeebebecefeeefeceeecece9eeeae9e7f0eeeceaeceaeaebf1edececf7f4f2eef1efeeede4e4e2e1f1f2f2 -f0eff3f5f4edeaebedf6f5f5f5f6f4f5f2eeeff1f1eff0f2f4f1f0efecedece8e5edeeeeece7e7e5e6e8e6e7ebe9e8e9e9f1f0efeff4f2e -feffdfcf8f302020000f5f4f4f50000ff00ffffff0000fefdff00fefbfafefbf8f601fdfcfdfdfbf9f8050200fe05020000070605020d0c -0704090605070f0f0d0b100d0c090c0b0d0c1012120f080c0e0d0f0e100f1315141418191813101413121619181617171817100f0f12141 -415151212111011111313151416141312181d05040304090b090813110c090e0f11110d0f10100f0e0e0f0c0f10100c0f11120e0f0f0d10 -110e0c1113120f1211100e0f0f0f11131615150c0c0d0d0e0f0e0d0c1011110b08090809070a0a090a090c0704020504030303ff0003030 -20101010405050300060605030302ffff0002020406080906090b0904070a0a00040502070501000300fffd0101000003020200fffffdfd -000000fffffffcfd00020200fcff0201f7f8f8f8f9fafaf9fdfefbfafbfaf9fbfcfbf8f7f9fcfbfcf6f6f6f7eeedeef0eceef1f6eef0f2f -4f6f9fbf8f4f8f7f7f0f4f7f7f3f6f7f6eef2f5f3ece9eae9e8e8eaeae7eaedeceae9eaeaeae9eae9ebeaecedeae7e7e9ecebebece1e4e6 -e7eeeaeaebf3efefefefeeedeef3eeececf1edebebefeeeceaefecebeceaeaedf0e5e9eff3e9ebedeee8e8e8e8ececeeefe8e5e4e5edebe -aebeeefedecf0f1f1f3fefbf9fbf6f4f4f3fffcf8f7fdf9f8f900fffdfbf8f8f7f5f7f8faf7fdfdfcfcf8f5f5f5fcfdfdfe0101010001ff -fdfd03050807080708070a0a0a0c090909090d0e0f0e0c0a0c0e090a10120f0f111312110f0f1110100f1012120f12110f0e16141210111 -20f0d141311101212131314131212110d0b0d221e1c1a060c10100607070609090a0a100d0a07100d0c080d0d0e1011100f0d100e0c0b0a -070507090706050c0806020f0d0d0a12120d0812100d090a0706060b0805030b060100050200ff080300ff0804fffd07070605020100030 -0fdfcfe000001010201010202ff0000fbf9fbff00fcfdfe060401010502020406010000fefcf9f8fffffcfafbfaf7f6fffcf9f8fffdfafc -fbf8f7f7fefbfaf8fcfcfbf8fffcfcf900fcf8f7f5f5f5f7f5f3f3f4f7f6f6f6fafafbfbf6f5f6f9faf8f9f9f7f8f7f8f3f2f2f0f7f8f7f -7f3f2f4f8f6f3f4f5f4f1f0f0f3f0f2f5f3f3f6f7f1efeff1e9eaedf1eaeaeef3eceaeaebececf0f1edededeeeeeff1f3eef1f4f6eef0f2 -f2e7e5e4e4eff1f1f1f2f4f5f3f0f0eeebeff2f1f1f0f2f3f3ebebedeeedf0f1f1f3f3f4f2f5f3f4f3ededf0f2e9e8eaecf1f1f3f3e9ede -fefececedf0eceef1f0f4f5f6fafefffffff7f8f7f8fafe0100fafafaf8fbfbfaf9f7fafdfef7f7fafdfeffff00f8fc0000fe0002020103 -0402ff03050707060809080a080a0f1012110a0c0f0f09090b0c0f0f0f11100d0a0b120f0c090d0e0d0e1111120f0c0d0d0a0f111312121 -2110e0d0d0c091012121012100d0d100f0c0c0c0d0d10140f0a0d1114151205090b0b0b0e110f0a0d101006060b100f0f11120e0f0f0e0b -0c0d0a090c0e0a0708080700ff01020702010303000000060200020403040602020304000001050002030300000000fbfbfdff040202010 -1010202fdfbf9fbfffdfbfb0200fffefffefbfb01fffffefffffdfefefcfc00030101000000fffff4f1f2f5fbfe0000f8f9fafaf7f6f6f7 -fefefefefafbfbfbf6f7f7f9f6f5f6f7f7f3f4f7f5f3f4f6f6f7f6f5f6f5f6f5f5f4f6f8fdfcfbfbfafbfaf9f8f9fbfbf7f8fafdf1f3f6f -8f7f5f6f8fafcfaf9f7f7f9f9f3f5f6f8f6f6f6f7f9fbfcfaf1f3f4f0f4f6f6f4f5f3f1f0edededeef1f0eeeeeff1f4f5f4f4f4f6f7f6f4 -f3f4f4f0ede3e0dedeeeedecedf4f3f3f1eae8eaeaf1f0f0eef3f4f2f0ededededeeedeaeaf0f0eeecefeae8eaf2f3f1eeededeae8f1ede -9e7edecebe9f0f0eeeeeeebeceefbfbf7f4ff00fffff7f6f4f30000fffdf8f9f9faf7f7f9fefcfdff00fefffefc020200ff020200fd0303 -00fe00fefefd060602000806030008060505100e0e0d0f100d0a0a0807081212110e0a0b0a06090a0c0c0e0f0e0c0f0f0e0c0a090908111 -00f0c0e0e100f080a0d0f0f0f10110d1011120c0f121514181a19141a1e230a08090e080808090e0a09070e0a070513130f0a13110f0e0e -0e0e0e090809070905040305040404040605060303010204060603070a0a05060200fe050300ff050402010201010003030301020204040 -100000101fffe00fdfcfafafdfdfcfbfefcfefdff00fffd00fffcf8fdfefdfc0104030300010301fe000100fafdfffd00fefcfcfbfcfbfa -fafbfcfefefdfbfbfbf9f7f7f9f9f7f9f7f5f5f7faf9f8f8fafcfcfef7fafbfaf7fafcfdf9fafcfcfbfbf9f7f7f4f4f4fbf9f8f7fcf8f5f -6f7f5f0eff8f8f5f2f9f9f6f2fafcfe00fafefdfaf5f7f7f6f7f8f9fbedeff5f8f3f4f6f9f3f8fcfff0f5f9fcf0f0f2f3f6f3f3f3f8f9fa -faf3f4f7f9edf2f6f7e3e7ebeaedeeeff1f2f3f4f5edeff0efefeef0f2f0efeff1edeff0edeaeaeaeae9e9ebedeaebeef1eae9eaf0e5e5e -6e6e9ecefede6e6e5e8edececeeefefefeef4f3f4f4fe000000f3f6f7f7fcfcfbfdfafbfd0000000000fdfdfc00fcfefffffdff0002f9f8 -fafefbfcfd00fefe0000fefdfe0100010305060606060b0706060607070a090a0a0a0c0d0c0b040405070a0b0b0b0807070907070709080 -809090806070a0c0a0c0e0d0e10111010101110111214171818191a19171428231c150e0d0a05080703ff0708060404050505060302010a -0805030a09060208050301030301010504020305060706030505050201010103020203ffffff00fffefefd020100ff000000ff00fefffe0 -301ffff0103020202050303fafcfd00fd000304fe000407fbfdfd00f9fbfe00fbfbfbfd02010001fffcfd00fdf8f9fcfaf7f6f7fbfcff00 -fafbfe00fffdfefffbfc0001f9fbfefef9fafafbfbfcfcfafafbfcfbfbfbfbfbf9f9f8f9fcfcfcfcfcfbf9f7f7f9fcfdf4f5f7f9f8f7f9f -af6f7f8f8f1f1f2f2f3f4f3f1f2f5f7f5fdfcf6f2f5f2f1eff5f6f8f7fafaf9f9f8f6f5f5fbfdfdfeffffff03fbf7f7faf3f3f3f6f4f5f6 -f8faf9f7f9fbfbfaf9f7f7f7f8eae8e7e7f3f5f4f3f7f8f9faf0eff0f2f3f5f6f8f2f3f2f5eaeaedefeaedeff3eeefeff2f2f3f1f0f5f6f -3efe9ebebebededededeaededeef1f2f0f0eeececeff6f7f8fafffe0001f6f7f9f9000101010101010000fffeff01000000fdfeff010504 -0301000201fd0001020401010506040607080507090e07070705090a0d0a0a0806050906040009080606060706060a0907070a090808090 -8070807060606090705070c0909090e0704061010101115171716191b1a18141516161719191cfef7f5f6fbf7f4f300fefbf802fffcfb00 -ffff0001fffffe0100ffff00fffefc0000fffc030301fe050503010303020102020201020102020000fefdfcfcfdfdff0000fffefdfdfcf -ffffefe000000ff010203020203040400fffffe02ff0001080808070005050501010303000305040406050502040304ff010101fafcfbf8 -0203020002040402ff00fefd0300ff01fffdfcfefaf9fcfdfbfcfdfefd000202fd000103fafafdfffcfcfdfdf7fbff02fdfe0000fd00010 -1fcfcff01f9fafdfff5f8fbfbf1f5f8f9f2f3f8fcf1f3f7faf0f0f2f4f5f3f4f5fbfdfdfef6f8fbfdfdfefe0004030100fcfaf9fbf6f8f9 -f8fafcfcfbfafcfbfcfbfcfdfdf6f4f5f6e4e3e3e7f3f3f3f1fcfefdfbf6f7f8f6f9faf9faf8f9f8f7efefeff1f4f5f5f4f4f6f7f8eff1f -3f6ebecf0f3ebebeceef0f1f2f2f1f4f4f3f2f6f9f9f1f2f5f7fbfafcfd04050607f9f8f8fb01ff0000fffefdfefefffdff0100feff0204 -040303040405fcfcff000502000106060609090a08090f0e0908040404060703010204010000fffdfbfb060401fe0404020106060606090 -706060807060906070809070708070907080a0808090a100d0c0d110f0e0e15141214171513131d231b16fafcf9f8f1f1efeff6f2f1f1fa -f8f6f7fffdfbf900fdf8f6fefaf6f6f9f7f7f8f9f6f5f6faf8f6f7fdfdfcfbfdfbfafbfefcfbf9020201fffcfbfcfefcfdfeffff000101f -e000001feff0000fefefe000000000004030301ff00000003030202080909060303050401ff010402000204050808070608090600000102 -f8f8fc00fefeff01fffdfcfdfd00ffff0306040400040403ff000104feff00020405060504070605fe00ff00fefdfeff00fefbfc0000000 -3000102030202030302020303fbfcfe00fafcff00fdff0102fd000100f7fafcfcf8fafafafefefefefffffdfc00000001fefdfefffcfafc -faf8f8f7f9faf9f8f8fdfdfcfafcfbfafbf7f8f9f9e9ebe8e9eff0f3f4f8f9fafaf7f7f9f8fd0000fef7f9fdfef5f7f8f6f3f5f9fbf8f8f -afcf9fafcfdf6f8fafbf1f1f2f3f3f7f8faf3f4f5f4f9f7f8f7f8f9f7f6fdfdfefe08090707fe00fffd0000020500010203000204040001 -020403050304080a0d0b01040709060a0d0e0a0f11120d1016130a0d110f080908080504060600fefcfbfcfcfbfafcfbfafc02fffdfb060 -2fffe070402030907030509060706080707090c090709090805040c0c0a0a0c08060812100905120d07060d0a06064300cc000f0000009b -9a999796959392918f8e8d8b8a898786858382817f7e7d7b7a797776757372716f6e6d6b6a696766656362615f5e5d5b5a5957565552515 -04e4d4c4a49484645444241403e3d3c3a39383635343231302e2d2c2a29282625242221201e1d1c1a19181615141211100e0d0c0a090806 -0d7200000ca3100b12208ea21c83d44cd3235915656118a66dd95469d45551d72549d19265d0756d9de6791d3569d9e67999d451228871d -ec66dd7b6695cb769d5453918f65094f45496c631cc645dd7d43845911800a130 -''') - -# The following blob has only 1 byte difference from the above -enroll_prg=unhex(''' -027800000023000000200008000020008000000100320074000000008020200400242000005020773628200100302001003c20800008213 -8000c210000482107004c210000582000005c20000060200000682005006c20014970200141742001887820018084202000942001809c20 -0902a0200b19b4200300b8203b04bc201400c0200200c4200100c82002003300100000000080cc200000f503d0200000a10132004400000 -00080dc20e803e0206401e420d002e8200001f0200500f8200500fc200000b8203a00000804001408000008080000080800001408300008 -080000140831001c081a0032000c0000000080501101004c111e0034007801e8f4f6f4f2f4f6f7f4f1eeeceef2f5f5f8f9faf9f7f7f9fc0 -0040d10121111121415131112151a1e1c1a1a1a1c1b1b18140f1012141616151615120c04030202fffdfbfbfbfaf9f4efedeeeeedf1f2f1 -efeeefecece9eae9e9eaedf1f4f6f6f4f3f4f6f9fbfdfdfefdfefe000000000110232e10232e10232c10232c10232c01065010250101000 -007c8078c06ff0000000000004f8b006d0300280307030990098db00b90880991858e08c1810b9190910ac1b8928a0993878a890b938889 -8908c88191890ac8889289099a818a890b9a88898908d08191890ad08892890802818a095a810a0288890b5a8808d98189890ad99089890 -95e8289890b5e88898908e18189890ae190898909648289890b648889096e8108e981890b6e880ae99091b9096f828a8f0b6f88918908f0 -818a890af090898909768289910b76b8918a08f88792910af8888a92097c81898a0b7c09018089890b01888991097f8189920b7f0908808 -9920b088889920c07030307200402000000002f00040070000000290004007000000035000400800000001700000026002800fbb20f0000 -000f00300000008700020067000a00018000000a0200000b19000050c360ea010910002e001c000200180023000000700070004d010000a -0008c003c32321e3c0a020244000400010000003000f4311e000000ff0000008d002007ff00000095003007ffffffff00000085ffffffff -04000085ffffffff08000085ffffffff0c000085ffffffff10000085ffffffff14000085ffffffff18000085ffffffff1c000085fffffff -f20000085ffffffff24000085ffffffff28000085ffffffff2c000085ffffffff30000085ffffffff34000085ffffffff38000085ffffff -ff3c000085ffffffff40000085ffffffff44000085ffffffff48000085ffffffff4c000085ffffffff50000085ffffffff54000085fffff -fff58000085ffffffff5c000085ffffffff60000085ffffffff64000085ffffffff68000085ffffffff6c0000856f33110b120e0f101010 -0f11140d0c0c08080c0e0e0b0f101a100f11120f13160d0e0e100f09080a0d0a0d0d0c06090c10070c10030c0f140407090bfdff0003ff0 -6060500020405fbff0003f9030504fb040604fa010505f6fe00fef3fcfefdf0f9fbfdf0f9fafaf400fffeeaf6f8f7effafefef4f7fcfff3 -f6f9fd130e00fcf6fbfdfdedf5f6f7edf1f3f4f1f5f5f6ebf4f6f7edf6f6f5f2f6f7f6f1f4f8faf1f1f2f3f8f1f2f3f4f5f2f3eaf3f4f3f -3f4f5f6ebf1f0f1eff5f4f4e9f2f3f3e7f2f2f1f7fffefbf600fefbe7f4f6f5e8f6f5f2f2f4f3f3f5f5f4f4ebf4f4f1e8f4f6f4e2f1f4f2 -e0f3f7f7e1f5fbfbe3f0f1f2ecf2f5f5e1f1f5f3e8eef2f6f6060403e1f3f5f3e7f3f5f8e1f0f1f1e1f3f7f9e5f2f6f6e8f5f7f8ecfbfcf -bf3ff0100eefe00fdf0fffffc131201faedfcfdfbe8f9faf7e0f0f3f1e0edf1f1eaf3f6f6dadfe1e1e6edeeeff2f4f5f4e8f2f4f1eaf7fb -faf2f6f9fbe7eff5f9eef6fafdf0f3f4f5f2f4f7f9f1f9fdfdf4fffffef300010205110905090a0a06ff010405fc060807fc090d0dfe070 -808fe0b0c0d000a0c0c0305090a020608060e0909090e07080605050706090303030afefdff070000020a0302056f2909070f161e21100f -10120f0e0e140a0e12180e1011131111121414181a1a19191715111314130d1214170e0f0d0e0b080709110e090713100c0b0a090705070 -909080506080a040404070605050503010002020000ff03000000fbf7f6f8fdfbf9f9fffffdfbfafaf9f9fcfaf5f4f7f4f3f2fdf9f3f202 -02fffcfffffefefbf9f8f8fefdfdfcfcfefffef7f9f9f8f8fbfcfaf7f5f5f7f3f2f2f3f6f5f3f3faf8f7f8f1f0f0f4f3f1efecf4f4f2f0f -5f5f5f5f5f7f8f9f3f6fafbf3f2f2f3f3f1f2f3f2f1f1f2f7f3efeff8f2f0ecf5f4f3f1f0edeaebf4f3f1f0f8fbfcfcf0f0f2f4f2f4f6f7 -f2f5f7f5f5f5f5f4f7f4f5f4f0f2f4f6f1f1f1f2f2efefeff4f3f1f000fcf8f6f0efefecf7f7f5f4f0f0f2f2f8f6f5f4f8f9f6f5f6f3f2f -1f8f9f8f700fffffcfbfaf8f8f8f9f8f8f9f9faf8f9fafbfbf6f8f8f9f1f4f8f8eff1f3f6f7f7f8f9e4e7eaebeef0f2f3f3f5f7f8f0f2f8 -faf5f4f8fafafafcfbfbfdfdfbfdfe0001f9fbfcfcfdfdfffefefffffefefffefd04050402010000000505050407050706040301010b090 -605090704010c0a07050e0e0c0b0c0e100f07090908080b0c0a090e111106050506050607070204070804030302060402020503ff032222 -201e191b1a19191b19181d2120201618191a141516171a1a1b1c16191b1b13100f0e151312100d0b0c0e0908080a07070b0e0b0c0d0f040 -4060908090b0d0b0c0d0a070704030507060503030404ff00010300030506fbfdfffffbfdfefefbfbfdfef7f7f7f7f4f5f7f7f4f8fcfcf3 -f9fe02f9fafcfdfefefffef8f9faf9f9fafbfdfbfbfaf9f6f8f8f9f5f4f4f7f6f7f5f7f3f6f5f4f5f7f6f6fafaf7f5f6f6f3f3eceff2f4e -eeff1f2f6f6f6f5f8f7f5f5fafaf7f5f3f5f4f4f2f3f5f5f2f1f0f1eff2f4f5edf0f3f7eeeeeff1eef2f4f3f1f2f3f3faf9f8f8f2f1eef0 -f4f1eeecf3f1f0eff0edebecf2efeeeef7f4f1f0f4f4f3f1eff0f0f0eeebedeef7f8f9f8ececefeef4f3f3f3f0ecebeff1eeeceff5f3f2f -1f2f2f2f0f5f3f2f1faf7f8f7f8f9f7f6f5f2f1eff7f4f2f0fcfbf9f7fafaf7f6f6f3f1f0f8f4f2f1f9f9f7f5ebebeae9f6f7f6f3f7f7f6 -f8faf6f3f3fdfbfaf6fcf8f7f5fbf9f7f60201fffdfcfbf9f7fcfcfbf9fcfaf8f6fbfaf8f80101fffd01020200040404040604030300010 -102030203040103030204050203070505040e0a09070808060509090806111112100809090a08090a0d090c0e100505090d05070a0f0709 -10131d1b1c1c1b1c1e1e1616181b1c17141318151111161514141b1717161a1a1b1b11151818111115151011110f0e0e0e0e100e0a09111 -213110f1110100e0d0d0e0a0a0a0904080a09030406060505060704050507050303020100fefd00000000fefe0000f6f6f8fcf5f5f9fdfc -fbf9f80302fffd00020201fffffffdf8fafafafbfcfdfef7f5f3f4f7f6f3f3f7f7f8f8f6f5f5f4f3f4f4f2f6f7f6f4f7f8f7f3f2f5f6f5f -5f6f6f7f0f3f3f3f3f4f4f5f5f6f5f7f1efeef0f1f1f2f1f2f1f1f2f1f0eeeef5f3f1f2f7f7f5f3f1f0eeeff2f1f1eff3f1f1f1f7f7f7f8 -f1f5f7f8eef2f5f5efededefeff0f1f3f1f4f4f4f1f2f2f1f1f1f2f3f1f1f1f2eeedecebfafafaf5efeff0edf2f0eff0f0f0efeff1f2f7f -9efeeeff1ece9eceef3f3f5f5f6f4f4f5f4f4f4f7f1f5f8fbefefeff1f5f5f6f8f6fafafcf0f1f2f1f0f1f0eff6f9fafae8e7e9e9f2f2f3 -f5f8fbfcfaf4f5f2f3f7f5f5f4f5f3f4f3f4f3f0effafaf9f8f7fafaf8f9fafaf8f6f7f7f9f9fafbf9fbfafcfeff0000000508090803040 -40503050505050608080000000402030405060708090504040205030203070708090f0e0d0d0a0707090e0f0e0d100e0908100f0e0c1314 -1413191617182223251f1d1a17121c1a150f12121110100f0d0b13100f0e151211101714101017161412151211100d0f0d090e0d0703090 -a09070c09090a0e0a08050d0a090806040304070504040300000002fffcfe0605010001010101fdfeff0000fdfdfd00fefdfffbf9f5f6fc -f9f6f4f7f7f7f7fbfafcfdfefcfcfdfbf9fafef9fbf9f8fefefdfdf7fbfcfbf3f5f6f7f7f7f8f9f5f7f8f8f1f0f1f4f3f3f1f2f2f0f2f3f -2efeceff5f4f3f4f3f5f5f7f5f6f8fcf8f7f7f9f1f4f6f8efedeff5f1eff1f4edeff1f5f3f6fcfef3f5f6f9f4f4f7f9f1f0f0f5f2f1f1f4 -f7f9fafff7f7f9fbf8f9faf9f2f7fafbf4f6f7f9f5f4f6faf0f0f3f7f1f0f0f4f0eeedeeebedeef0f5f4f8fbeaebeef4f1f4f6f9f1f1f4f -7f9f7f8faf6f8fbfdf1f1f5f8f2f0f1f5f6f8fbfef9fafbfdfafafafef4f7fb00f8fbfd00fafbfcfef3f6fcfef0f6f9fffbfbfe00ebecee -f0f5f4f6fafbfd0102f5fafefff3f6fd00f5f8fcfbf1f5f9fbf9fbfefff7f8fafaf9fcfefefbfbfcfcfafbfcfbfffefeffff000101070a0 -c08070b0c08060708060a09090708060506080809090a0b0c0706090e0b04070808090808070d0d0e0c070705050c0b0a06070907030a07 -06050e090300150afff81a16130e0f0b080508060809100d0d0c090a0d0b090606070e0a0807100d0c090f0d0c0a0f0d0b0a0607070800f -dfe000602fffd090704030604040206030303040403020100fdfd0000fffc00fefcfcfffefdfe00fffcfa00fcf9f8fcf9f7f800fffdfcf8 -f9fcfef5f5f9fcf7f7fafcff000101fefdfcfefdfdfefef9fbfefffbf9fafcfaf9fafcf7f8fafbfafbfcfcf8f9fbfdf8faf9f9f4f4f6f8f -7fbfefff3f7fcfef7fafdfffafbfe00ff000103fbfc0002fbff0001faff0001f9fc0001f7faff0000010104fbfe0002fd000002fafdff00 -f7f9fd0003050506fdfdff01f7f7f9fcfbfdfefefcff01fffe000003fd000101f9fd0000f3f9fd01f2f7fbffff040509f7f9f9fafafe000 -1f9fafbfbf9fafafdfefdfcfdfafcfdfcf8fcfe01000204050104070800010103040302000406030200ff000200000000020200fe030200 -00f3f4f4f3fbfbf9f900fbf9fafffefcfb030200fdfafafafafbfaf7f5fffefefaf9f8f8f6fdfefefbfd00fffffbfbfaf900ffff00fffef -dfc02fefdfc030000ff030200ff030102040705040308090806050405040603fffe06040101040201010e0a0602050401000402010300ff -010302000002fefe0204f6f7fcff080400fb040200fe0502ffff090400fe0a070301070401000602fefd07030100070604010601fefb040 -1fffe00fffefefcfcfafa010201010201fefc02fffaf60200fefbfdfdfcfaf9f7f6f7fcfcfbfb000100fffbfcfdfff8f9fcfdf9fdfefffe -fe0000ff000001ff000000fdfbfafc020101020002020202020101fefcfbfdfefdfdfffbf9f6f9faf8f9fafcfdff01fefeff00fcff0003f -bffff0100010104ffff01040105060304030202030404070100000401010204000102070305070c01020306040606070406070603050609 -03060a0c04090d0e080c090c0307080a00040d1000040b0f00040c11050b141803070e130508101104090f12000104060c12181bfd02070 -90304090dfd00070f02060a0cfe000407fcfe04080304070806080b0e090a0d100506080b0103060902050b1204081014ffff0308feff02 -0500020505f2f0eef1f8f8fcfffefefbfafbfaf9f8fbfbfcfbf9f9f7f6f4f6f9f8fafbfdfdf7f7fafcf7f6f7f9fdfbfbfcf8f9fafbfefdf -dfdfbf9fafbfbfbf9fafdfaf8f7fdfbf9f90201fffc020100fe05060806030302ffff0100fe020300fd010101fd000000fd00fefefc0200 -fefc01fbf6f401fefbfa0500fbf600fcf6f1f5f4f4f6fbfaf8f700fdf9f5fdfbfbf900fef9f4fcf8f4f3fbfaf8f700fbf9f7fdf9f5f2faf -8f6f2fbf9f9f6fcf8f2eef6f5f4f3fef9f6f4f7f4f0eff6f6f6f4fafbfcfbf9f8f8f8f9fafafafcfcfaf9fdfcfcfafefefdfdfdfbfbfcfc -fcfcfe01030404000101020100fefdff0103020507060404080909040a0e0d01040304fefeff02fcff0001fcfe010101010102000202040 -70a0a070204060603070a0d0607080b010204090407080d080e0f11070d0e0c090e0e0e0a0f100f0f101213080d0f120c12131106080b10 -0d1215190f1114150d0e10120c1114150d11121412111112121317181414141617141316161817181512121213141314080a0d0f1b1c202 -30b0a0e1513171a1d131418190f1014190c0f171b0d1015150a0d12150f12191c121211130e1012130f11131415121213161514140d0f0e -0d060809090504080df4f6fa0000000508ff030909fd010504fdff0000f6f8f9fbf8f9fcfdffff0000fdfcfcfcfcfdff00fcfdfdf9fcfbf -bfcff000100faf9f9f9fafbf9f8f8f7f4f3f8f7f4f2f8f7f7f8fbf9f6f601fdfafafbf8f5f6f9f7f6f7f9f5f4f4f9f4f3f4faf9f8f7faf7 -f3effaf5f0ecf5f2ede9f8f5eeeaf3eeeae8e7e0dadafafefffaf7f8f9f8f5f4f5f4f9f8f7f5f3f2f2f0f4f4f3f0f8f8f5f2f5f4f2f1f1e -fece8f1f0efeef1edebeceeece9e8f1edecebf2f1f2f4eef0f2f4f5f5f7f7faf8f8f7f7f6f6f7f9f7f8f7f8f8f6f7f9f8f9fcfbfaf9fafb -f9f8f8fefaf7f801fefbfe00fdfbfafcf9fafcfffafbff020000ff080704020905070904050707050709090506080a000105090307090b0 -6090a090505070c07090f120d0e14170c0b0d0f0a0d0b101014181b11151c1d0c0d1418101216170c0f131715181c1e14171b1c13171c1e -1314181b1a1a1918181818191516171917171a1b151717151415131117171a1e16181719191d1f221718191914181717161b1e1d1218181 -925282a2c1c1d1a172023201c1c1c1b171d20211e2021211d16171819171615171c1c1b1c1313111212100f1111100f11110e0a0d14120f -0b0c0a0a0607030203100e0d0b040301ff070606060908080803030405feff0003f9fcfc00fcf9f8fa0101fffefbfcf8f9fdf9f5f6f6f4f -3f4fcfcfbfbfefafbfdf9f7f6f7f8f8f7f5f1f1efedf0eeedecf6f4f3f3f4f3edecf7f2edeaf6f5f1eef8f9f7f4f5f4f2eff3f2efeef5f3 -f0ededeceae8ecececece9eae9e8e9e8e7e8eaebeceddbdee3e9f5efece9f4efeeeef3eff1f2f3f1f0f0efefefefedececebf0efeeeeede -9e9eae4e4e5e8eceae7e7ecedeeeeeae9e9eaebece9e7f5f3f4f5f4f2f0f0f5f2f0eef8f7f7f6f7f5f6f7f7f7f6f5f8f7f6f6fefefffcfa -f9f8f6f8fafbfcfd0000fe00fffaf7fafafbfaff00000300fefbfbfffefdfe010201000a0802fe05030100070503020a0702010a0807070 -a090807070401ff0e0d07041311100f16141315101113151315110e1e1b17111e1d1d1d1a1718181a191714191a1c1c1e21211f1e1c1916 -1f1917181e18131217191a1b1d1c1d201b1d1e1c1d1c1c1914171b2012151a1e1f2123241e252a2e262d32321a1b1d1e1716181c1f23272 -6191c201e2f383c3f1c2228281a1d2021171c21251d2228291c202121191b1b1b1c1f1e1d1c1c1919171d202013181b1c111515150f1215 -160c1014170405080904060a0e0b0d1111000000fe07060706090a0908050506050506060803060503fd020300fbfe0005f8f9f9fbf4f5f -3f2f5f6f5f6fcfbf9f8fdfdfaf7f6f7f8f8f2f1f2f2e9e9e7e6edeeeeecf3f6f6f5edf1f1eeeaebeeedeceae9e7ece6e4e5eae8e6e6ecea -e8e5ecebe7e6e8e6e6e8e9e9e8eae8e9e7e6e8e9e9eaeff0f0efeceae7e5e8e6e6e6eeedebe8f4f2eeebf1efedecefefefefeaeaeae9ece -be9e9ecefefebe9e9e7e6e8e8e6e5efeeebe9ebecebeae8e9eae9f5f4f4f3f0f1f3f2f0f2f5f7f4f6f9fcf6f5f7fcf4f2f6faf7f7f9fbff -fbf9f8f6f6f9fefbfcfbfefafafc00f5f8fe03fbfc000102fffcfcfaf9f9fbfffefdfefffefefcfcfdfefc0001010105040402000000010 -705030306040303feff02050607090a0c09080915151210171614100b0d1212101112111b1919191718151213141412191716141d191716 -161616141d211e1b191d1e1a191b1b1b222524221a1b1c1e1a1c201f1e1b1a191c1a1a1a232123242f2c2a27302f2c2c212526252124242 -427282b2f1d1e22273e3d404626272b2e20201d1e2724211e28282726222324261e201f1e1b1e1f23191e1f1f1f1d1c1e1b1d1d1c131212 -1619171a1a1c1e211e0f1113101215161414181716feff000106090c0e08090a100606090b080a0d1002020206fefd020306070809fbfdf -dfff2f3fafdf9fafcfdf9faf9f7f5f6f7f7f5f2f0f0f2edeae8e6e4e3e2edebedebf4f3f1eee9e8e9e9edeceeebe7e7e8e7e5e4e3e4e7e5 -e4e5e6e6e5e3e7e8e9e7ebe9e8e4ebebe9e7e5e4e5e5ebece9e6edebe9e6e0dedddee5e3e4e6e5e5e8ebecebeaebeceae9eaebeaeaeceae -cedeceaedeeeceaebeeede6e9e9e9e6e8e8e7e8e7e8eae6e5e6e9e8e7e9ebf4f4f5f4f3f2f2f2f8f9f9f8fcfcfcfc0000fffdfdfffefefd -fefefdfcff00fd00fffefefeff0000000101040505030703010203fcff0102fbfe0004ff03070bfbfe0309f9fa000500ff0001050404010 -20305060404030304040405060506080b0804030601fefd0a0503040c0704020d0601000b0806061815120d110f0d08120f0c0a110f0b0a -1613110d171615121717161717161411191815151e1916131d1d19151c1a1918191a17181c1b1b1826262827282829292928292a221e1c1 -d2424221e2e2d2928292826224745403d2c28231f1f2223221f212220252523222320212220222123211e1d1e1e1d1d1c1e1f1f221c1c1e -21191f22251c1d1f1e1e1c1d1c11100f10110f0f1215141310020204060c0c0c0f12121113111315151211110e080a08070606060509090 -8070000fefd00fffdfcfefaf5f5f8f9f8f8f8f6f8fbf2f6f6f7eaececeae5e8e9e8eaebebebedefefefe8e7e8e8eae9eae9e5e6e6e5e3e5 -e4e5e5e4e5e7e2e1dfe1e6e7e9eae5e8e9ece9eef0f0e8ebedede9edf1f2e6eaf0f5dee2e7ece5e6e5e4e9e6e1e3eae8e6eaeaeeeff0eef -3f6f7eaeff1f4ebeff1f1e9eceef0e7eaeceee6ebedf1ecf0f1f3ebeef1f2edeeedeef2efeef1efededeff4f5f4f1fafbfaf8fcfaf8f8fc -fcf8f8fbfbfaf9fafafbfdfdfdfdfffefdfbfb02000000070703010405050505070a09080a09080e0d0d0b0a0907070809080b020507080 -10104060504020300ff0003040405080b08060305070400fcfefefc0305030200000102fdfcfcfd06060505090806050405060508070404 -080807030908080a110f100e171514121214141416171715151512121310100c1715151318191613140f1012231f1a1a25211d1c2928242 -21f1b18161e1d1c1a2a2c2c29211f1f1b3d3b3a39222325242424241d201e1e2022242727211e1e1f23221e1d222223252122211e272524 -2224222121251e1c1d1f1b1c1d1e1d1f231317171817151514101117190a0b0d0c10100e0e14141211151412100a0b0d0f0406070903060 -60706060503fafdfe00f9f9f8f9f6f9fbfcf7fafafcfcfcfbfdf7f9f8f8e7eceff1e5e6e9ebeaebedeeedeff0f2e7e8eaece8eaeff1e8eb -f0f1e5e9ecedeaeeecebe3e8eaeaebeeeceaebebe9e9ebe9e9ecebece9eaf0f0eeeef4f4f1f0edececeee3e3e5eae6eaeceeedefeae6eee -deef0f7f5fbfcf2f2f1eff0f0f2f3efefeceaebe8e7e7eeedecedefeff1f4f0edecf0ececeeeef2f5f6f9eff0f3f6eeeff4f8f4f7fbfef6 -f7f7f9f8fbfbfbfcfe0000fe000101ff020505fd00020301030607040609090607070209070703070808060e0e0d0e080909070b0a07060 -80601fc0300fbff0002050806090c0805fdf8f700000102fefaf5f4f8f7fc01fdfbfdfe00fefafbfcfc000201fefbfd0100feff01fefbfb -00fef9f90003080d0702fdfe0a05000211111213141512131211111312151716080910151213161a0f0f1117141616151c1a1a19201f1e1 -8221f1c18181817171c1d1c1a26201d1c191514103a36291a26211d1c1b1a1d1d24221e1b27211d1d232626202225251e241f1c1d1e1b18 -152121202026282a2825272924252929252b2c2e271c1c1e191f2c302b1c1b1e1d0e1721290f141915121212110f11110e0f100f0d0c0f0 -c0a090d0e0f05080c0efffe0003fafafbfdfdfe00fffcfcfefffffffdfbf8f9fcfbf2f2f5f8ededeff0efefefeff2f2f1f1f0f5f6f5f3f1 -f2f2efeeeff1ecebebebe9e8e5e6e8e6e7e6e8e8ebe9e9e9eae9ebebebede9eaebeaecedf0efedecededeeeef0f1ebeae9e9edeceeefe7e -df4f7f1f1efeefaf3f0f0eeeff2f3f3f2f0f0eaf0f1f2ebf0f4f5f1f3f4f3f6f3f2f2f2f5f6f7eeeff1f2f8f8f8faf7f6f7f9fafaf9f9fd -fafafcfdfefffefcfdff01ffff00010000030404030303020202ff0808090a09090c0f00fe020601000406050502020e0a0805080906040 -4060504fbfd00ff040908060402000002ffff00fafdfe00fefcfcfef4fafcfe0100fe00fefe0003fafcfd000300fefe01070a0c02090c0d -0005090cfc0003070703050903080d11060a0f12121311101312111012100e0f14100f0f1614111019140f0d1714100d1615120c1a1b181 -21715120d1a181513191a150f1716120a1c1a17150f0d0a080e0604031d1a15101c19140f1c18150d1f1f1e191a15110f161311101d1c1c -1b17181614201f1b1726231f1a2322221f1f1d1d1d27221f1c1a19191a1f1815151c1a181927252220110c0d0d131212110c0e10110d0e0 -d0a090e0c070f100d090f0e0a090505030100020203fefcff00fffffefff9fbfe03fbfbfe00f9faf8f9f2f6f7f7eceff0f3f3f7fafdf4f6 -f7f9f5f7f7f8f3f5f7f8f1f7f8f9e7eceef2e8ebedf2ebeaeff3eaeaebefecedeeefe9ebecefedebedefedeef2f6f2f0eff1ebe7e6e4f0e -feeeef8f8f7f7f1f4f3f3f1f3f5f6f3f4f4f6f1f1f0f1f1f0ededf2f1eff0f3f2f1f0f4f6f7f7f5f5f3f6f3f4f4f4fafafcfdfcfaf9f7fb -fbfdfdffff0000fffdfdfd02010000030203030505070604040607000002020804fffe0e08030009090705090a0a0601040504050505060 -204040402010204000203030709090802020302000001010104070a000407070003090e030a0d100a121617080e11150105080913161814 -10131714111314120d1014130f10121413121211131112100f1111111414130e12141410100f0e0a0f0e090411110d050e0d07020503020 -20b080705050202050f0d0806060201020300feff0f06020203ffff0000fefbfa0a0806060b0b0b0a09050401120a07060d0c0703100d0a -071813100f110f0b08141311101513110f19150f0917120e0e16140f0d1818161413131313181614131b1716150b060504100c07050f0a0 -60506040407020103050703030708090a0f0101040a0102010501010104fe00020604060a100305080df8fe0105f7fafe00f6fafe00feff -fffffafbfbfdf9fc0000f9f8f9fcf9fafbfef4f6f8f8f7fbf8f8f6faf9f9f4f7f9f9f1f5f7f7f1f4f2f0f1f3f4f7f8f7f6f6f4f4f1efe5e -9edf1eff1f3f5f5f6f6f9f3f4f6f6f9fcfdfcf7f8fafcf2f3f5f4eff2f3f2f0f1f1f3f1f3f4f8f8fafbfdf8fafafaf3f4f5f6fe00fffef8 -f8fd00fdfe020400010404fefefe0000fcfaf90200fefc0603020005020000000000fffefeff00fdfdfeff0200ff00010000010101ff010 -60807060303020305050304020100ff0604040400feff02020405070c0b0a090909070313130f0a1213120f14141211171a16150a09090b -121313141413141612100e0d13110f0e14100c09100d09080e09070612110f0a0b0808070e0904010a0a06010200fffe01ff01000100fef -cfffdfbfb01000000050302000200fffe00fdfbfc000202000305050601010000fcfe00ff0506080605030204fefefefc05040303000205 -05050404000b080701070605030f0d0b090c0d0d0e07040301100d08010c090605120f0a0812100a06100c0c0e1612111005030000080a0 -a0a070809070805040405050504090a0806131412101013131107090a0b07090b0a08090a0c100f0c0d10141413070c0e0f010305080102 -0303000207090001020301030607fe000103fefffe00f9fafcfdf7f9f9fbf7fafbfdfbf9fbfbf8f8fbfdf1f4f7f9f7f9f9f8f7f9f8f8eef -1eff0f5f9fcfef9fd0104fdff0102f9fbfdfefbfe0000fdff0000f5f7fcfef3f6fc00f9fe0001fe00ff00fdff0003fd000203f7fafd00fb -fbfd0101010205030000050202050902020104f9fbfd01fbfbfbfe0201000300000000ff00000002060808000104050000ff00020303010 -30302ff050404030204050504050504fefeff000405090b040504050808080a0c0e0e0e05070708080708080a090a0a0f0e0d0c130e0d0c -0e0d0a0515140f0b14120b070e0d0b070c0c080408070604080805010502fffb0602fffc0301fefafefdfaf7fdf7f6f4fffcf9f300fbf7f -5faf4f1f0fbfaf9f400fdf9f400fcfbf7fcfafbf9fcf9f6f3fcf7f5f60200fdfa0001fffcfdfcf9f7050300fd00fcfafaf9f8f7f6020101 -fe02fffbf9fffcfbf9fffdfcfa01fefaf80500fcf90d08040000fefcfcfefcfdfb0200fdfe0502fdfb020200000f0d080410111113ff000 -3050a0c0a05060506030305060704060708060707060f0c0a09100d0a070b0c0b0a0a0606060d0d0c0a0e0f0f0e0f0e0e10100d0c0d0905 -030303020203080b0a0a05080706040605060202010500040508fe0003070004060700010408fbfe020600020306fcff0003f9fb0209f9f -d050af2f80107fefdfeff0301010103010000fefdff02000003050000020501000204010306080205070702050707040607080405050704 -04040507090a0b06060503090c09060c0c0a0a0402020204040405010102030402000200010002000101020501020406070908010507090 -1030403fd000103040507080504040600010406010100000a090909060504030b0c0d0e0e0d0c0e080e0c0a09090907070401000b0a0906 -0a08070702000203090608080708090805040404030402ff02020100fffefffefdfdfefdfbfcfc00f8f8f6f6f4f3f2f1f2edededf2efede -cf5f4f3f3f2f4f4f2efedeeeef3f3f3f2f5f0f1f2f4eeeff1f4f6f5f1f8f9f8f6f9f9f8f6fafaf7f4f3f0eceaf8f6f3f0faf9f9f6f3f3f4 -f5f7f3f5f7f7f7f6f4f6f2f0eef6f4f3f2f6f6f4f4f9f9faf7fefaf7f2f9f6f3eff9f8f9f9fdfaf8f7fcfaf9f8fffdfbf903fefefe110f0 -d0a03020001fffdfbfe00fefefe070606060503020203020000090908080500fffd0804020007070708090606071111100f1113120f0c0d -0c09070a0c0b07090c0e080c0d0f0506090d0a0e1111080f11120b1013120b0f1415080d10140c0f12140a0e1213090d0e0f080c0f12101 -314140d0c0e0f0c0a0704000002040504050404070b0d0204070b07070808060505060405070a090808080708090a0808090a0a0d0e0c09 -0c0c0c050505040d0d0c0903040303050606070c0b0a0905070909040405090402030403050405030303020202020106030203080405050 -8060201030100ff040201000806050006070603050201000100fffd0a0a090a030202030c0603010f0d0708080504060401010000fefeff -020101030601fffd02fefbf90500fbf806fffbf801fffdfdfcfaf9fafbf8f8f9fbf7f6f9fdfaf8f50000faf5f5f5f3f2f2f1f2f4f0f0f1f -0ededeef0f3f1f2f3f1edeeededf1f2f1f2f4f4f1f2f3f2f0eff1f2f2efeff0eff2f2f2f4f3f3f6f6f1f1f2f2ebe9e5e6f1f2eeeef6f5f0 -eff3f4f2f1f8fafaf8f3f4f7f6f1f2f2eff2f2f1f0f3f5f5f5f6f7f5f1eef0f1efebe9e9eaf7f6f4f0f8f8f4eff7f6f6f5fbfdfef902040 -2ff0a0a07050100fcf9fe020403fcfe00000508070603030301ff00020007070705ff00020101040708090a0a08080607070e0f0e0d0b0a -0a0a0507091009090c0f0e0e0c0c0f1010110f0e0b091112121112141313121213151412101015151415161616161413151310121314131 -41212151412100f1113130304090f07080806060608080e0f12130d0c0d0d08090a0d080a100f0a0907080809090a0a0d100f0a09080d08 -07080f0b0d0e10060a0d0e090c0e1004090c0c080b0e0e090a0b0d0d0e100f0d0e0d0d03050508050607090406070602020301040404040 -60505040100fefeff00000200000000fefd00030201030301ffff00fcf9f9fc0a0a070606050604010000000c0d09060706040101010101 -0203000005040200fefefffcfdfefcf9faf8f8f8f7f8f9fbfdfdfefdfcfdfdfdfafaf9f9fcfcfbf7f5f3f0eff3f2f0eef5f3f1eff5f7f5f -4f1efeff0f2f2f0eff6f1efefeeebebecefeeefeceeecece9eeeae9e7f0eeeceaeceaeaebf1edececf7f4f2eef1efeeede4e4e2e1f1f2f2 -f0eff3f5f4edeaebedf6f5f5f5f6f4f5f2eeeff1f1eff0f2f4f1f0efecedece8e5edeeeeece7e7e5e6e8e6e7ebe9e8e9e9f1f0efeff4f2e -feffdfcf8f302020000f5f4f4f50000ff00ffffff0000fefdff00fefbfafefbf8f601fdfcfdfdfbf9f8050200fe05020000070605020d0c -0704090605070f0f0d0b100d0c090c0b0d0c1012120f080c0e0d0f0e100f1315141418191813101413121619181617171817100f0f12141 -415151212111011111313151416141312181d05040304090b090813110c090e0f11110d0f10100f0e0e0f0c0f10100c0f11120e0f0f0d10 -110e0c1113120f1211100e0f0f0f11131615150c0c0d0d0e0f0e0d0c1011110b08090809070a0a090a090c0704020504030303ff0003030 -20101010405050300060605030302ffff0002020406080906090b0904070a0a00040502070501000300fffd0101000003020200fffffdfd -000000fffffffcfd00020200fcff0201f7f8f8f8f9fafaf9fdfefbfafbfaf9fbfcfbf8f7f9fcfbfcf6f6f6f7eeedeef0eceef1f6eef0f2f -4f6f9fbf8f4f8f7f7f0f4f7f7f3f6f7f6eef2f5f3ece9eae9e8e8eaeae7eaedeceae9eaeaeae9eae9ebeaecedeae7e7e9ecebebece1e4e6 -e7eeeaeaebf3efefefefeeedeef3eeececf1edebebefeeeceaefecebeceaeaedf0e5e9eff3e9ebedeee8e8e8e8ececeeefe8e5e4e5edebe -aebeeefedecf0f1f1f3fefbf9fbf6f4f4f3fffcf8f7fdf9f8f900fffdfbf8f8f7f5f7f8faf7fdfdfcfcf8f5f5f5fcfdfdfe0101010001ff -fdfd03050807080708070a0a0a0c090909090d0e0f0e0c0a0c0e090a10120f0f111312110f0f1110100f1012120f12110f0e16141210111 -20f0d141311101212131314131212110d0b0d221e1c1a060c10100607070609090a0a100d0a07100d0c080d0d0e1011100f0d100e0c0b0a -070507090706050c0806020f0d0d0a12120d0812100d090a0706060b0805030b060100050200ff080300ff0804fffd07070605020100030 -0fdfcfe000001010201010202ff0000fbf9fbff00fcfdfe060401010502020406010000fefcf9f8fffffcfafbfaf7f6fffcf9f8fffdfafc -fbf8f7f7fefbfaf8fcfcfbf8fffcfcf900fcf8f7f5f5f5f7f5f3f3f4f7f6f6f6fafafbfbf6f5f6f9faf8f9f9f7f8f7f8f3f2f2f0f7f8f7f -7f3f2f4f8f6f3f4f5f4f1f0f0f3f0f2f5f3f3f6f7f1efeff1e9eaedf1eaeaeef3eceaeaebececf0f1edededeeeeeff1f3eef1f4f6eef0f2 -f2e7e5e4e4eff1f1f1f2f4f5f3f0f0eeebeff2f1f1f0f2f3f3ebebedeeedf0f1f1f3f3f4f2f5f3f4f3ededf0f2e9e8eaecf1f1f3f3e9ede -fefececedf0eceef1f0f4f5f6fafefffffff7f8f7f8fafe0100fafafaf8fbfbfaf9f7fafdfef7f7fafdfeffff00f8fc0000fe0002020103 -0402ff03050707060809080a080a0f1012110a0c0f0f09090b0c0f0f0f11100d0a0b120f0c090d0e0d0e1111120f0c0d0d0a0f111312121 -2110e0d0d0c091012121012100d0d100f0c0c0c0d0d10140f0a0d1114151205090b0b0b0e110f0a0d101006060b100f0f11120e0f0f0e0b -0c0d0a090c0e0a0708080700ff01020702010303000000060200020403040602020304000001050002030300000000fbfbfdff040202010 -1010202fdfbf9fbfffdfbfb0200fffefffefbfb01fffffefffffdfefefcfc00030101000000fffff4f1f2f5fbfe0000f8f9fafaf7f6f6f7 -fefefefefafbfbfbf6f7f7f9f6f5f6f7f7f3f4f7f5f3f4f6f6f7f6f5f6f5f6f5f5f4f6f8fdfcfbfbfafbfaf9f8f9fbfbf7f8fafdf1f3f6f -8f7f5f6f8fafcfaf9f7f7f9f9f3f5f6f8f6f6f6f7f9fbfcfaf1f3f4f0f4f6f6f4f5f3f1f0edededeef1f0eeeeeff1f4f5f4f4f4f6f7f6f4 -f3f4f4f0ede3e0dedeeeedecedf4f3f3f1eae8eaeaf1f0f0eef3f4f2f0ededededeeedeaeaf0f0eeecefeae8eaf2f3f1eeededeae8f1ede -9e7edecebe9f0f0eeeeeeebeceefbfbf7f4ff00fffff7f6f4f30000fffdf8f9f9faf7f7f9fefcfdff00fefffefc020200ff020200fd0303 -00fe00fefefd060602000806030008060505100e0e0d0f100d0a0a0807081212110e0a0b0a06090a0c0c0e0f0e0c0f0f0e0c0a090908111 -00f0c0e0e100f080a0d0f0f0f10110d1011120c0f121514181a19141a1e230a08090e080808090e0a09070e0a070513130f0a13110f0e0e -0e0e0e090809070905040305040404040605060303010204060603070a0a05060200fe050300ff050402010201010003030301020204040 -100000101fffe00fdfcfafafdfdfcfbfefcfefdff00fffd00fffcf8fdfefdfc0104030300010301fe000100fafdfffd00fefcfcfbfcfbfa -fafbfcfefefdfbfbfbf9f7f7f9f9f7f9f7f5f5f7faf9f8f8fafcfcfef7fafbfaf7fafcfdf9fafcfcfbfbf9f7f7f4f4f4fbf9f8f7fcf8f5f -6f7f5f0eff8f8f5f2f9f9f6f2fafcfe00fafefdfaf5f7f7f6f7f8f9fbedeff5f8f3f4f6f9f3f8fcfff0f5f9fcf0f0f2f3f6f3f3f3f8f9fa -faf3f4f7f9edf2f6f7e3e7ebeaedeeeff1f2f3f4f5edeff0efefeef0f2f0efeff1edeff0edeaeaeaeae9e9ebedeaebeef1eae9eaf0e5e5e -6e6e9ecefede6e6e5e8edececeeefefefeef4f3f4f4fe000000f3f6f7f7fcfcfbfdfafbfd0000000000fdfdfc00fcfefffffdff0002f9f8 -fafefbfcfd00fefe0000fefdfe0100010305060606060b0706060607070a090a0a0a0c0d0c0b040405070a0b0b0b0807070907070709080 -809090806070a0c0a0c0e0d0e10111010101110111214171818191a19171428231c150e0d0a05080703ff0708060404050505060302010a -0805030a09060208050301030301010504020305060706030505050201010103020203ffffff00fffefefd020100ff000000ff00fefffe0 -301ffff0103020202050303fafcfd00fd000304fe000407fbfdfd00f9fbfe00fbfbfbfd02010001fffcfd00fdf8f9fcfaf7f6f7fbfcff00 -fafbfe00fffdfefffbfc0001f9fbfefef9fafafbfbfcfcfafafbfcfbfbfbfbfbf9f9f8f9fcfcfcfcfcfbf9f7f7f9fcfdf4f5f7f9f8f7f9f -af6f7f8f8f1f1f2f2f3f4f3f1f2f5f7f5fdfcf6f2f5f2f1eff5f6f8f7fafaf9f9f8f6f5f5fbfdfdfeffffff03fbf7f7faf3f3f3f6f4f5f6 -f8faf9f7f9fbfbfaf9f7f7f7f8eae8e7e7f3f5f4f3f7f8f9faf0eff0f2f3f5f6f8f2f3f2f5eaeaedefeaedeff3eeefeff2f2f3f1f0f5f6f -3efe9ebebebededededeaededeef1f2f0f0eeececeff6f7f8fafffe0001f6f7f9f9000101010101010000fffeff01000000fdfeff010504 -0301000201fd0001020401010506040607080507090e07070705090a0d0a0a0806050906040009080606060706060a0907070a090808090 -8070807060606090705070c0909090e0704061010101115171716191b1a18141516161719191cfef7f5f6fbf7f4f300fefbf802fffcfb00 -ffff0001fffffe0100ffff00fffefc0000fffc030301fe050503010303020102020201020102020000fefdfcfcfdfdff0000fffefdfdfcf -ffffefe000000ff010203020203040400fffffe02ff0001080808070005050501010303000305040406050502040304ff010101fafcfbf8 -0203020002040402ff00fefd0300ff01fffdfcfefaf9fcfdfbfcfdfefd000202fd000103fafafdfffcfcfdfdf7fbff02fdfe0000fd00010 -1fcfcff01f9fafdfff5f8fbfbf1f5f8f9f2f3f8fcf1f3f7faf0f0f2f4f5f3f4f5fbfdfdfef6f8fbfdfdfefe0004030100fcfaf9fbf6f8f9 -f8fafcfcfbfafcfbfcfbfcfdfdf6f4f5f6e4e3e3e7f3f3f3f1fcfefdfbf6f7f8f6f9faf9faf8f9f8f7efefeff1f4f5f5f4f4f6f7f8eff1f -3f6ebecf0f3ebebeceef0f1f2f2f1f4f4f3f2f6f9f9f1f2f5f7fbfafcfd04050607f9f8f8fb01ff0000fffefdfefefffdff0100feff0204 -040303040405fcfcff000502000106060609090a08090f0e0908040404060703010204010000fffdfbfb060401fe0404020106060606090 -706060807060906070809070708070907080a0808090a100d0c0d110f0e0e15141214171513131d231b16fafcf9f8f1f1efeff6f2f1f1fa -f8f6f7fffdfbf900fdf8f6fefaf6f6f9f7f7f8f9f6f5f6faf8f6f7fdfdfcfbfdfbfafbfefcfbf9020201fffcfbfcfefcfdfeffff000101f -e000001feff0000fefefe000000000004030301ff00000003030202080909060303050401ff010402000204050808070608090600000102 -f8f8fc00fefeff01fffdfcfdfd00ffff0306040400040403ff000104feff00020405060504070605fe00ff00fefdfeff00fefbfc0000000 -3000102030202030302020303fbfcfe00fafcff00fdff0102fd000100f7fafcfcf8fafafafefefefefffffdfc00000001fefdfefffcfafc -faf8f8f7f9faf9f8f8fdfdfcfafcfbfafbf7f8f9f9e9ebe8e9eff0f3f4f8f9fafaf7f7f9f8fd0000fef7f9fdfef5f7f8f6f3f5f9fbf8f8f -afcf9fafcfdf6f8fafbf1f1f2f3f3f7f8faf3f4f5f4f9f7f8f7f8f9f7f6fdfdfefe08090707fe00fffd0000020500010203000204040001 -020403050304080a0d0b01040709060a0d0e0a0f11120d1016130a0d110f080908080504060600fefcfbfcfcfbfafcfbfafc02fffdfb060 -2fffe070402030907030509060706080707090c090709090805040c0c0a0a0c08060812100905120d07060d0a06064300cc000f0000009b -9a999796959392918f8e8d8b8a898786858382817f7e7d7b7a797776757372716f6e6d6b6a696766656362615f5e5d5b5a5957565552515 -04e4d4c4a49484645444241403e3d3c3a39383635343231302e2d2c2a29282625242221201e1d1c1a19181615141211100e0d0c0a090806 -0d7200000ca3100b12208ea21c83d44cd3235915656118a66dd95469d45551d72549d19265d0756d9de6791d3569d9e67999d451228871d -ec66dd7b6695cb769d5453918f65094f45496c631cc645dd7d43845911800a130 -''') - -calibrate_prg=unhex(''' -027800a10223000000200008000020008000000100320074000000008020200400242000005020773628200100302001003c20800008213 -8000c210000482107004c210000582000005c20000060200000682005006c20014970200141742001887820018084202000942001809c20 -0902a0200b19b4200300b8203b04bc201400c0200200c4200100c82002003300100000000080cc200000f503d0200000a10132004400000 -00080dc20e803e0206401e420d002e8200001f0200500f8200500fc200000b8203a00000804001408000008080000080800001408300008 -080000140831001c081a0032000c0000000080501101004c111e0034007801e8f5f6f4f2f3f6f7f5f1eeeceef1f6f6f8f9f9f9f8f8f9fd0 -0040c0f12111112141614121115191f1c1a19191c1c1b17130f1012141616161614120b06030201fefcfcfbfbfaf9f4f0ededeeedf0f3f2 -efeeefededeaeae9e9eaedf1f4f6f6f3f3f4f6f9fcfdfdfefdfefe000000000110232e10232e10232c10232c10232c01065010250101000 -007c8078c06ff0000000000004f80006d0300280307030990098db00b90880991858e08c1810b9190910ac1b8928a0993878a890b938889 -8908c88191890ac8889289099a818a890b9a88898908d08191890ad08892890802818a095a810a0288890b5a8808d98189890ad99089890 -95e8289890b5e88898908e18189890ae190898909648289890b648889096e8108e981890b6e880ae99091b9096f828a8f0b6f88918908f0 -818a890af090898909768289910b76b8918a08f88792910af8888a92097c81898a0b7c09018089890b01888991097f8189920b7f0908808 -9920b088889920c07030307200402000000002f000400700000002900040070000000350004008000000017000000440004000100000030 -00f4311e000000ff0000008d002007ff00000095003007ffffffff00000085ffffffff04000085ffffffff08000085ffffffff0c000085f -fffffff10000085ffffffff14000085ffffffff18000085ffffffff1c000085ffffffff20000085ffffffff24000085ffffffff28000085 -ffffffff2c000085ffffffff30000085ffffffff34000085ffffffff38000085ffffffff3c000085ffffffff40000085ffffffff4400008 -5ffffffff48000085ffffffff4c000085ffffffff50000085ffffffff54000085ffffffff58000085ffffffff5c000085ffffffff600000 -85ffffffff64000085ffffffff68000085ffffffff6c0000856f34110a130e0f0f10101111140c0d0c08080c0f0f0c0e101a0f1011120e1 -3180c0e0e110e0a090a0e0a0b0e0b06090c10080c11040c0f140507090cfc000003ff05060601020505fbff0003f8020505fb050604fa00 -0505f6fe00fef2fcfefeeff9fafdeff9f9fbf500fefeeaf6f7f7f0fbfefef4f8fcfff3f6f9fd130e00fbf6fbfdfeedf4f6f8edf1f3f4f2f -5f6f7ebf4f6f7edf5f6f5f1f5f6f6f2f5f7faf1f1f2f3f8f2f2f2f4f5f2f3ebf3f4f3f4f4f5f6ebf0f0f1f0f5f4f4e8f2f3f3e7f2f1f1f7 -fffefaf500fefbe7f4f6f6e8f6f5f2f1f4f2f3f5f5f4f4ebf5f5f2e8f5f6f4e2f2f3f2dff3f7f7e1f5fcfbe4f1f2f2ecf2f4f5e1f2f4f4e -8eef1f5f5060404e1f4f5f4e8f3f6f8e2eff1f0e2f4f7f9e6f2f6f7e7f5f7f8ecfbfcfbf2ff0000ee0000fef0fffffc121102fbedfbfcfa -e8f9fbf7e1eef3f1e0edf1f1e9f2f6f7d9dfe1e2e6edeff0f2f4f5f4e7f3f4f1eaf7faf9f1f5f8fbe7f0f5f9eef7fbfdeff3f5f5f3f5f8f -9f0fafdfdf3fffffef301010305110a05090b0906ff000305fc060807fc0a0d0dfd070709fe0b0c0d010b0d0d0305090b030608070e080a -080d06070705050707080303030cfdfeff080000020a0402056f2a09090e161e21110f0f130f0d0d130b0f13180f1011131012121414171 -a1a1a1a1815131213130e1215160f0e0e0f0a080809100e090713100c0a09090606060a08080507070b0404050706060505030100020200 -00ff040000fffcf8f5f7fefbfafafffffdfcfaf9f9f9fcfaf6f3f6f4f3f2fcf9f3f20201fffb00fffefefbf9f8f8fffdfdfcfbfdfffff8f -9f9f8f8fafcfaf7f5f7f8f3f2f2f3f6f4f3f3faf8f7f8f1eff1f4f4f2efedf4f3f1eff5f5f5f5f6f7f8faf3f6fafbf3f3f2f4f2f2f2f3f1 -f1f1f2f8f3eff0f8f3f0ecf5f4f2f1f0eeeaecf4f3f1f1f9fafbfbefeff1f4f2f3f6f7f2f5f7f6f6f5f5f4f8f4f6f5f1f2f5f6f2f1f1f3f -0efefeff4f3f1f000fbf7f5f0f0eeedf7f8f5f3eff0f2f3f9f7f6f4f9f8f7f6f7f4f2f1f8f9f8f700fffffcfbfaf8f8f8f9f9f8f9faf9f8 -fafafafbf7f8f9faf2f5f8f9eff0f3f6f8f7f8fae3e8eaebeff0f2f4f3f5f8f9f0f3f9fbf6f5f8fafafafdfbfbfdfcfbfdfe0102fafcfdf -cfdfefefefefffefffffffefd04050402010001010605050407060706040301010a0907050a0704010c0a07050e0e0d0b0d0e0f10080909 -08080a0c0a090e10120604050605060706010507080404040306040202050300032221201e181b1a19181a19171d21211f1619191a14161 -617191a1a1c16191c1b12110f0e151312110e0d0c0e0808080a07080c0e0c0c0d0f0404060909080b0d0c0c0d0b08060403060706050203 -03050000010300020506fbfcfefffbfdfefffbfbfdfff8f8f8f8f4f5f6f5f5f7fcfdf3f9fe02f9fafcfffefefefff8fafaf9f9fafbfdfcf -bfaf9f5f7f8f9f5f4f4f6f6f6f5f7f3f5f5f5f5f7f5f6fafaf8f5f6f6f2f3eceff1f4efeff1f2f5f6f6f5f8f6f6f5f9faf7f5f4f5f4f4f2 -f3f5f4f2f1eff1f0f3f5f7edf0f3f7efeff0f3eef2f3f4f1f2f3f4faf9f8f8f2f1efeff5f1eeecf4f2f1eff0ecebedf2efefeef7f4f2f0f -4f4f3f0eef0f0f1eeeceeeef7f8f9f8edebeeeef4f3f3f3f0ebeceff2eeedeff5f3f3f0f2f2f1f0f5f3f2f1f9f7f8f7f8f9f8f6f5f3f1f0 -f6f5f2f0fcfbfaf7fafaf7f6f6f4f1f0f7f5f2f1fbf8f7f7ebebebe9f7f6f6f4f7f7f6f8fbf6f3f4fdfbfaf7fbf9f8f6fafaf8f60201fff -dfcfcf9f7fcfdfbf9fafaf7f6fbfaf9f8020100fd01020200040403040504030400000002030303030302020205040202070504050e0c09 -0709070605090907061213121008090a0b08090a0e090b0d100506090e05060a0f080811141e1b1c1d1b1b1e1d1616171a1d18141318151 -111161514141b1716161a1a1b1c11131818111214151112100f0d0d0d0e100d0c09111212100e1011100d0c0d0f0a090a0904070a090404 -06050506060704040507050403020000fdfd00000000fffe0000f6f6f8fcf5f5f9fdfbfaf9f8030200fd00020201fffffffef9faf9f9fbf -cfcfff7f5f3f4f7f6f3f3f7f7f8f8f6f5f5f4f3f4f4f3f6f7f6f4f7f8f7f4f1f5f6f6f5f6f6f6f1f2f3f2f4f4f4f5f5f6f5f7f0efeef0f0 -f2f2f2f2f1f1f2f0f0eeedf4f3f1f1f7f7f6f4f2efeff0f2eff1f0f3f1f2f2f7f7f7f8f1f5f7f7eef1f6f6eeedeef0f0f0f0f3f1f4f5f3f -0f1f2f1f1f1f1f2f1f1f2f3efededebfafafaf5eff0f0edf2f0f0f1f0efeeeff1f2f6f9f0eeeff1edeaedeef3f4f5f4f5f4f5f6f4f4f5f7 -f2f5f9fbefefeff0f6f6f7f7f7fafbfbf1f1f3f1f1f1f0f0f7f8f9fae9e8e9e9f2f2f3f5f9fbfcfbf5f5f2f3f7f5f6f4f4f3f4f3f4f3efe -ffaf9f9f8f8f9fbf8faf9faf8f6f7f8faf9fafbfafbfbfdfefe00000005080a080404030503050606050708090000000403030306060808 -090505040304040303070708080f0f0d0d0a0907080f100f0d100d0908110f0f0e13151514191617192124251f1c1916131c1b150f11121 -010100f0d0b13110e0c151312111914101019151311131311110e0e0c090f0d0803080909070d09090a0e0b08060d0a0807060503040605 -0404030100ff03fffdfe0705010002020000fdffffff00fefdfd00fefcfffbf9f5f6fbf9f6f4f6f7f7f7fbfafbfefefdfbfefaf9fbfef9f -afaf8fffefefdf8fbfcfcf2f5f6f7f7f8f8f9f5f6f8f8f0f0f1f5f3f2f2f2f1f0f1f3f1eeeceff5f3f3f3f3f4f5f7f5f6f7fcf8f7f8f8f1 -f3f6f8efeeeff4f1f0f1f4eeeef2f5f4f6fbfef3f4f7f9f4f5f7faf1f0f0f4f3f1f1f3f7f8fafff7f7f8fbf8f9f9f9f4f7f9fbf5f6f8faf -4f4f7fbf1f1f4f7f2f0f0f3f1eeedeeebedeff1f5f4f8fbeaebeff3f1f4f6faf1f1f4f7faf8f7faf6f8fcfef0f2f5f9f3f1f2f5f6f8fafe -f8fbfbfdfbfbfcfef4f7fb00f9fcfd00fbfbfcfff3f7fcfef1f5f9fffbfcff00ecedeef0f5f4f6fafcfe0102f6fafdfff4f6fd00f5f8fbf -bf0f6f9fcfafbfefff8f8f9faf9fcfefefbfbfcfdfafbfcfcfffeff0000000101080a0c08070b0e09050709070909090708070705080808 -080c0c0d08060a0e0d05070808090909070d0d0e0d070604050d0a0906080907030a0707050f0803001409fef91a17130e100b090608070 -708110d0e0b090a0c0c090606080e0b08080f0e0c0a100d0c0a0e0c0b0a0606070800fefe000602fffd0906050305040402050303030403 -03020100fdfd0000fffdfffdfcfd00fefdfe00fffdfafffdf9f7fcfaf7f70000fdfcf8f9fbfef5f5f8fcf7f8fafcff000102fefdfcfffef -cfdfff9fafefffcf9f9fcfaf9fafcf7f8fafbfafbfbfcf8f9fbfcf8f9f9faf5f4f5f8f7fafdfff2f7fcfdf7fafdfefafcfe01fe010203fb -fc0001fbfe0000faff0001f9fcff01f7fafe00ff000204fbfd0102fd000002fafeff01f7f9fd0001050405fdfefe02f8f8f9fdfcfdfdfef -e000100fe000003fe000101f9fe0000f3f9fe01f3f8fcfe00030609f7faf9fafbfe0101f9fafbfbf9f9f9fdfefefcfdfafcfefef8fcff01 -000304060104080900010103040302000406040201000002000001ff020201ff03020100f2f4f5f3fcfbf8f800fbf8fafffefdfb030300f -dfafafafbfbf9f7f6fffffefbfbf9f8f7fdfdfdfbfe00fffffbfbfafa0000000000fffefd03fffdfd030000ff0402000003020204060604 -0309090806060505040702fefe07050102050302000e0a0602060502000301020200ff010301000003ffff0204f7f8fbff080400fb04020 -0fd060100ff090400fe0b070401070401000602fefd07030100080604020702fdfc0501fffe00fffefffcfcfbfa010102010201fefc02fe -faf60100fcfafdfefcfbfaf8f6f8fdfdfcfb000100fffbfcfdfff8fbfcfef9fcfefffeff000100000001ff000001fdfbfafb01010002010 -2020202020001fefcfcfefefefdfefcf9f6f9faf9f9f9fcfeff01feffff00fcff0004fbfeff0100010002ffff0004010405020404020203 -0405070200000301010203000104070205070c010103050405060705060607020506090306090c040a0c0e080d0a0b0307070a00040c0f0 -0040b0e01030c12050a131802070e1305070f1104090f11000204060c13181bfd0207090304090efdff080f0205090bfd000307fdfe0408 -0304070706070b0d090a0d110506080c0202060a01040c1304080e14fe000207feff030500020505f1efeff1f8f8fcfffdfdfbfafbfafbf -9fcfcfcfcf9f8f6f7f5f6f9f8fafafdfef8f7fafbf7f5f7fafcfcfbfbf9f9fcfcfffcfcfdfbf9fbfbfcfbf9fafefaf9f7fdfcf9f90301ff -fc0201fffd05060706030401feff0000fe020301fd020201fc000100fd00fffdfc0301fefd01fcf6f402fffbfa0600fbf600fbf6f2f6f3f -4f6fbfaf8f7fffef9f6fdfbfbf900fdf8f4fdf9f4f2fcfaf8f700fcf9f6fef9f6f4f9f8f6f3fcfaf9f6fcf8f2eef7f5f4f3fef9f6f3f9f5 -f1eef6f6f5f4fafcfcfbf9f8f7f8f9fafafafcfcfbfafdfcfcfbfffffefcfefbfafbfcfcfcfe02030404000001010100fefdff020302040 -705030508090a030a0e0d00030405feffff02fcffff02fcff01010102020200010205060909070305060605080a0c060808090002040803 -06080d090d0f10080c0d0c080e0f0e0b0f100f0f111112080d0f110c11121106080a0f0d1214190f1114170c0e10120d1113160e1111141 -2111112111316171314151617141316171717171512121213141213080b0e101c1c1f230c090e1413171a1d131417190f1014180a10171b -0d101314090d11161012171a121210120e1011120f11131315121213161614130d0f0f0d06080a090404080cf4f6fa0000000508fe03080 -9fd010404fdff00fef5f8f9fbf8f9fcfdffff0000fdfcfcfdfbfd0000fcfdfcfafbfcfcfcff000101fbfaf9f8fbfbf9f8f9f6f5f3f8f7f5 -f2f9f6f8f7fbf8f6f602fdf9fafbf7f6f6faf7f7f7f9f5f4f3f8f4f3f4fbf8f9f8faf7f3f0f9f5efebf4f2eee9f8f4efeaf3edeae8e8e0d -bdbfbfffffaf7f8faf7f5f4f5f4f9f8f8f5f2f2f3f1f4f5f3f0f9f9f5f2f4f4f3f0f1efebe8f2f1efeef2edecebedece9e8f0edecebf2f2 -f1f3eef1f2f5f5f6f7f7faf8f8f8f8f6f7f5f9f8f7f8f8f8f7f8faf8f8fcfaf9fafafaf9f8f9fefbf8f801fefcfd00fdfcfbfcf9fafb00f -afbff0200ff00080604020905070904050707050709090506080a000105090307080a060809090505070b07080f130d0e14170a0b0d0f0a -0d0b101114181b11141c1e0c0d1317101216170d0e131515191b1c13161c1c13171b1e1214171a1a1b171619171819141617181617191a1 -51818151416141216161a1d1518171a191c1f211618191a14171716161b1d1e1217181926292b2c1b1c18172023201d1c1b19181d21211f -2021211c16171818161515181c1b1b1c1312101212110f1012100f10110e0a0c13110e0a0b0a0a06070303020f100d0b040301ff0706070 -70908090803020405fdff0003f9fbfd00fbf9f8fb0002fffdfcfbf9f9fdf9f4f6f6f4f3f4fdfdfbfbfefbfbfcf9f8f6f8f8f8f7f5f2f1f0 -eeefeeeeecf7f5f3f3f4f3eeedf8f3eeeaf5f5f3eff8f9f8f3f5f4f2eff4f3f0eef6f4f0eeecebeae9ebecedebeaebeae9e9e8e8e8ebebe -beddcdee4eaf5efece9f4f0eeeef4f0f0f3f3f1f1f1eeeeefefededebebf0efeeeeedeae7e9e5e3e5e8eceae8e7eceeeeefeaeae9eaeceb -eae8f5f5f5f4f4f2f1f0f6f2f1eff8f7f7f5f7f5f7f6f7f7f6f6f8f7f6f6fefffefdfbf9f8f6fafafafcfd0000fefffffaf7fafafbfafe0 -0010300fefbfafffefdff010201000b0702fe04030101080504030a0602010a0807060a090807070401ff0f0c0704141110101715131410 -1113161215110d1d1b16111d1c1d1d1a1817191a18171418191c1b1f20211f1e1b1a171d1916181d181312171a1a1b1c1c1e1f1c1d1e1c1 -c1c1c1a14171c1f1115191f1e2023251e252a2d262d3231191b1d1f1616181c1f242626191d201f31383c3e1b2327271a1e2121171d2226 -1e23272a1c202122191b1a1b1c1e1e1e1b1b1817171e1f1f13191b1c111415150f1316160c1015170404090a04060a0e0d0f0f12000000f -e07070807090b0a08050507060606060604060703fd010201fcff0005f8faf9fcf4f5f3f3f5f6f6f7fcfbf9f9fefcfbf8f7f8f9f8f2f2f3 -f2ebeae7e6eeeeefeef4f5f6f4eef0f1edebedeeeeeceaeae7ede8e4e4ebe8e7e7eceae8e7ecebe9e7e7e6e7e8eae9eaebe9e8e6e7eae9e -9ebf0f1f1efecebe8e5e9e6e6e4eeedece9f3f1efedf1f0eeeceff0efefeaebeae9edebe9e8edefeeebe9e9e7e6e8e9e7e5efefeceaebed -ebeae8e9ebe9f5f4f4f3f0f1f3f2f0f2f5f7f4f5f9fbf6f5f8fcf4f4f6faf8f7f9fbfefbfaf8f6f5f9fefbfcfcfdf9fbfd00f6f8fe04fbf -c00020200fdfbfafafafbfefdfcfefffefefcfcfcfefc0000010105040402000100000705030306040403feff02040507090a0c0a090914 -15140f1817140f0b0d12120f1212111b19191818171412131315131a1715151d181715171615141c1f1d1a191e1d1a1a1b1a1b222524221 -a1b1c1e1a1d1f1e1e1d19191c1a1919232123232e2d2a272f2e2e2b202424252124242427292b2e1e1d22273c3d404627282b301f1f1d1e -2724211d28282627212324251e201f1e1c1f2122181d1f1f1e1c1d1e1c1d1c1c131312161817191a1b1e211f0f101311121416141418171 -6fefe0102070a0b0e09090b100706090d090a0c1002020306fefe01030508090afcfdfefff3f3f9fef9fafcfefafaf9f8f6f6f8f8f5f2f0 -f0f2eeeae9e5e4e4e4edecececf4f3f2eee9e8e9e9edecedebe7e7e8e7e5e5e4e5e7e4e5e4e6e6e6e5e7e9eae7ebe9e8e4ebebe9e8e5e5e -5e6eceae8e6eeece9e7e0dfdddde4e4e5e6e6e6e8ebecebebecedebeae9ecebeaeceaededecebedeeedeaeceeece6e9e9e8e6e9e9e8e7e8 -e8e9e7e5e6e9e8e8e9ebf4f4f6f4f3f2f2f2f8f9f9f8fcfdfbfc0001fffcfefffffffdfefefefcfffffc00fffefefeff000100000103050 -5030703010103fdff0102fbfe0005ff04060cfbff0309fafa000500ff000205040300020405060303030204040405050406090a08040306 -02fdfc090503030b0704020d0601ff0c0806061815130e11100d07110e0d0a110e0c091514110c171614111717171718171311191814141 -f1915131d1c19151b191918181917171c1c1b17252526272827292929282a29211d1c1d2424211e2e2b2829292826234744403e2d282320 -1f2223221e212220252523222321202120222222211e1c1f1e1c1d1d1e1d1f221d1e1e201a2023251c1d1f1e1f1d1d1e11101011110e101 -214131410020204050d0d0c0f12121113111315161212110f080a0807060706060a0a09060001fefc00fefdfcfefaf6f5f8f9f9f9f8f6f7 -fbf2f6f4f8ebeeece9e6e8e9e8ebebebeaeeefeeeee8e8e8e8eaeaeae9e6e7e5e6e4e4e5e5e5e4e5e7e4e2dfe1e7e7e9ebe5e7eaece9eef -0f0e8ebecede9edf2f3e6eaf2f5dde2e8ede6e6e5e4e9e7e2e4eae7e7ebebeef0f0edf3f7f8ebeff1f3eceff1f1e9eceef0e7eaeceee7eb -edf1ecf0f1f3ebeef0f3edededeef2efeff1efedeef0f5f4f3f1fafbfaf8fbfaf8f8fdfcf9f9fafbfafafafbfbfdfdfefdfefefdfbfb020 -0ff00070702020405050505070a09080a09080f0c0d0b0a0a08070808090a02060809000204060404030400000003030405080a08060205 -070300fcfdfefc0305030201000102fdfcfcfd060605050a0707050404050508060504080707040908080a110f100e18151412131414141 -61716141515121312100f0a1715161418181613130f1012231d1b1a26211d1b292724221f1b17151e1d1b192a2b2c28211e1e1b3d3a3a3a -212225252324241d201e1e2023242727211f1f2023211d1e212123252022211e262624212421211f241f1c1c1f1a1c1d1f1d1e221317171 -71816161410121618090c0d0c0f110d0e14141111141411100c0b0e10060606090306060606060403fafdfefff9f9f8f8f7f9fbfbf8f9fa -fcfcfdfbfdf7f9f9f9e8eceff1e4e7e9ebeaebedeeecf0f0f2e7e9eaede8ebeef1e8ecf0f2e6eaecedebeeecebe2e9eaebebeeece9ebeae -9e8eae9e9ebecebe8eaf0f0efeff4f4f1f0edededefe3e3e5eae5ebedeeeeefeae7eeeeeff0f7f5fafcf3f2f1f0f1f1f4f4eeeeece9ece9 -e7e8eeeeedeef0eff1f5efededefececedeef2f5f7faeff1f4f6eeeef5f9f5f8fbfef6f7f7f9f8fafbfcfcfe0000fe010101ff020507fd0 -0030202030507030709090507080109080704080807070e0e0e0e08090908090a0705080601fc0300fcfe0003050806090c0805fef7f800 -000202fdfaf5f5f7f7fb01fdfbfdfe01fefafbfcfb000201fefafd0100fdff01fdfbfb00fef9fa0003080d0701fdfe0a040002111211131 -3141213111011131216171608080f14121317190f0e1116141616161d1b19191e1f1d18221e1b18181616171b1d1c1a261f1d1b19151310 -3b35291b26201d1b1b191e1f23221e1b28211d1d232724202226231e231e1b1d1d1c181521201f1f262929282427282525292a242c2c2d2 -81c1c1e191f2c312a1a1c1f1d0d1621280f161916121212110f11100c10100f0e0c0f0d0a080d0f0f04070c0dfffe0003f9f9fcfcfdff00 -fffdfdfefe0000fdfbf9f9fcfcf2f2f5f7ecedeff1eeeff0eff3f2f1f2f1f6f7f5f3f1f2f2efeff0f1edeaeaebe9e8e5e6e7e5e6e6e8e8e -ceae8e9eaeaecebecede9ebeaebededf1efededeeeceeeff0f1ebeceae9eeeeefefe7eef4f8f1f1efeffaf5f0f0eff0f1f3f3f2f0f1eaef -f1f1ebf0f4f6f1f4f4f4f6f5f3f2f3f6f7f7eeedf0f2f9f9f9fbf6f6f7fafbfaf9fafdfbfbfcfdfd0000fcfdff01ffff000100010204050 -30303030202000807090a09090b0e00fe030601000406050502010d0a08050808060404070703fbfdffff040908060501000003fffefff9 -fdfe00fefcfcfef4fafcfe02fffe00fffdff03fbfcfd000200fdfd01070a0d02090c0d0005080cfc0003060703040803080e11060a0e111 -21311111412101011110e0f140f0e0e1615110f19140f0e1614100c1614120b1b1b17121815120d191916151a19150f1716110b1b1a1715 -0d0d0a080e0704031d1a140f1c18140e1c18140d1f201d191a15100e171312111d1b1b1a17161615201e1b1626231f1a2422211f1e1e1d1 -c27211f1b191918191e1816151c19191a2724221f100c0c0d131211120a0e10110e0e0d0c090e0c070f100d090f0d0b0906050202000302 -03fefdff00fffefe00fafbfe02fbfbfe01f9faf9f9f3f5f7f7edf0f0f4f3f7fafdf5f6f6faf5f7f8f8f3f6f7f9f1f6f8f9e7eceef2e9ebe -df2ebebf0f4eae9ebefedededefebebecf0edebeef1edeef2f5f3f0f0f2eae8e6e5f1efeeedf8f8f8f7f1f4f3f4f1f4f5f6f2f3f4f6f2f1 -f1f1f1efeeedf2f1f0f0f3f3f1f1f4f6f7f8f5f5f5f6f4f5f4f3fbfbfbfcfcfbfaf7fbfcfdfd00000000fffefefe0201000002020302050 -608070305070700000202080400ff0d09030009080705090a0a06020404030505060502040405020303040003040207090a090302040200 -0001010003070a010407070003080e04090e120b121716080e1115010608091417181410141815101315140d1014130f111314121312131 -21212110f1112121414130e12151412100e0c0a0f0e0a0410110d050e0c0803060302010a080704050203060f0c0806060201010300feff -0f08020102ffff0000fefafa0b0806050b0b0b0a09050301140a07060d0b08020f0d0b0718130f0f11100a0815141110151311101a150e0 -817130d0e15130f0d1a18161414121313181715121b1616150a070404100d0604100a060507040407020103040503030709090b0f000105 -0a01030104000102040000010504070c100304080df9fe0206f7fafe00f6fafd00fdff00fffbfcfcfdfafd0001f9f8fafdf9fbfcfef3f6f -8f9f7faf8f7f7faf9faf4f7f8faf2f5f8f7f3f4f4f1f2f4f5f7f8f8f5f6f5f4f1f0e5eaecf1eef0f4f5f5f6f6faf4f5f7f8fafcfdfcf7f9 -fafbf2f4f5f4eff2f2f1f1f2f2f3f2f3f4f8f7f9fbfdf8fafafbf4f5f4f6feff00fef8f9fd01fdff020500020303fefefe0000fcfbfa010 -0fefd06030201040200ff000000fffefdfe00fefdfe000200ffff0100000002010001070808060304020305050404010100000604040300 -fdfe02030405060b0a0a090908060312120f0a1313110f1414121218171614090a090b131213141413141513100e0d13110e0e14100b091 -00b08080d09070612110f090c0a08060e0905020a0a07020200fffe01ff000001fffefcfefcfcfb01ff01ff050302010300fffe00fdfcfc -010202000305040501000000fcfefffe0606070705040304fffdfefd0503040301020505050404000c080502070605030e0d0c090c0d0e0 -d060503020f0d08020b090705110f090812100a06100c0b0d15121210040300ff080a0b09070a08080706040405050504090b0807131313 -1010131311070a0a0a07090a0908090a0b100f0d0e0f131413070c0f100002060902020403000207090001020201030506fe000104ff00f -f00f9fafcfef7f8f9fbf8fafafefbfafafaf8f8fbfef1f5f8f9f8f9faf8f7f9f8f9eff1eff0f5f9fcfefafd0203fd000103fafcfefefbfe -0001feffff00f5f8fcfff3f6fc00f9fe0100fd000000feff0103fd000204f7fafd01fcfafd0101010206030000040402040a02010203f9f -bfd01fbfafbfe0100010300000000ff00000002050708000104050000ff0001030301030401ff040404030203050604060604fefe000004 -05080a040504050708080a0c0e0f0e05060707080708070c0a0a0a0f0e0d0c120e0c0d0e0d0a0614130f0b14110b080e0d0d080d0c08050 -8080505070705010601fffc0501fffc0300fefafffdfaf8fdf8f6f3fffbf8f3fffbf7f5faf5f1f0fbfaf9f4fffbf9f500fdfcf7fcfbfbf9 -fbf9f7f4fcf7f4f50201fdfb0001fefdfefdf8f7050300fd00fcf9faf9f8f8f7020101fe01fffcf9fefcfbf9fefcfcfa00fdfaf80400fcf -90e080400fffefdfcfefdfdfb0200fefd0502fdfc020100000f0c08050f101012000103060a0d0b05070605030305070705070808070708 -060f0d0a09100e0a070c0b0b0a090707060c0d0c0a0e0e0e0f0f0d0d100f0d0c0d0905020204020203090b090a050707060605060703030 -20600040508ff0004080003060600020408fdfe020600010306fcff0003f9fc0209f9fd050af2f90108fefdfeff0302010103010000fefe -0002000003050000020400000203010306080205060702050607040707080405050703040405070a0c0c060704030a0c08060c0d090a030 -2020204040405000103020402000100010003ff01000205010306060609080103070901030403fdff010304060708040405060000020601 -0000000a080809060404030c0d0e0e0d0d0c0e080d0c0a08090906080301000c0a08050c080706020002040807070807070908050405040 -304020002020100fffefffdfcfefefdfbfcfd00f8f8f6f5f4f3f1f1f2edecedf1efedecf5f4f3f3f2f3f5f3f0ededeef3f3f2f1f5f1f1f1 -f3efeef0f4f5f4f1f8f9f8f6f9f9f9f6fafaf7f4f3f0ecebf8f5f2f1faf9f8f6f3f3f4f6f8f3f4f6f6f7f5f4f6f3f0eef6f3f2f2f6f6f4f -4f9f9faf7fefaf6f1faf6f3eef9f8f9f8fcfaf8f7fbfbfaf8fffdfaf802fefdfe11100d0c04020101fffdfbfe01fffefd07060606050302 -0203010000080909090401fefd0705010107070709090706071011100e1113120f0c0d0c09070b0d0d060a0c0d090a0c0e0507090e0a0e1 -112090f11130c1013130c101314080d11150c1012150a0f1114090d0f10080d0f12111414150d0d0d100e0b080500000204050406040406 -0b0d0204080c06070908050505060406070a0909080908090909080909090a0e0e0c090b0d0d050505040d0e0c0903040303050607070d0 -b0a080607090905040609030303040305040603040302020301010603020307040505080502010302000003010100090704000607050305 -020101010000fd0b09080a030201040c0603010e0c0708080504060402010000fffe00030101020601fefd02fefcfa05fffaf90500fbf80 -2fffefdfcf9f9fafcf8f7f9fbf7f6f8fdf9f8f400fff9f5f6f3f3f2f2f1f1f4f0eff0f1edecedeff3f1f1f4f0edeeeeedf0f3f2f2f4f4f2 -f2f3f2f0eff1f1f1f0eff1eef1f2f3f3f3f2f5f7f1f1f2f3ebe8e5e5f2f2eeeef6f4f1f0f4f5f3f2f9faf9f9f4f4f6f6f0f2f2eff1f2f2f -0f3f4f5f4f7f6f5f1eff1f1efebe9e9eaf7f6f3eff7f7f4eef7f6f6f4fafdfdf9020402ff0b0a08050100fdf9fe030304fefe0000050808 -07030403020000020107070705ff01020101040708090a0908080608060e0e0f0d0c0a0a0a06070a10090a0c0f0f0f0c0c0f1011110f0f0 -a0810121311131513141211141514121111151515151716161714141414101214141415121215151310101112130405090e070807060606 -08070f0f10130d0d0d0d08090a0d090b0f0f0b0807090909090a0b0e0f0f08080a0e0907090e0b0c0e0f060a0e0d0a0c0d1005090c0c090 -a0d0e090b0d0c0c0e100f0c0d0e0c0404050905050708050607060202030104030404060605050100ffff0000010200000000fefd000202 -0102030100ff00fcf9f9fc0c0a080705060504010000010b0d0906070604020101020202020100050401fffffefefcfdfdfdfafaf9f7f8f -8f8f9fbfefdfefdfcfdfefdfbfaf9f9fdfcfaf8f5f3f1eff3f1f0eff5f4f3eff6f7f4f4f1efeff0f2f3f0f0f5f1eeefedebebecefeeefed -eeecece9edebe9e6f0efedeaebeaeaebf1eeecebf7f4f2edf1efeeede4e4e2e0f1f3f2f0f0f3f5f4edebebeef6f5f4f5f5f5f5f3edeff1f -1eeeff1f4f1f1efecedebe8e6eeefedece7e7e6e7e8e6e7ebe9e7e9e9f1f0efeff4f1efeffdfcf8f301020100f5f4f4f60000ff0000ffff -0000fefdfffffefcfafefbf9f700fdfbfdfdfaf9f8060200fe04020100070505030d0c0804080605060f0f0d0c100e0c090d0a0c0c10121 -10f080c0e0d100e100f14151514191a1a1511141312151818161617181611100e11151515151313111111121214141516151212181c0504 -0303090a0a0714120d090e0f11120d1011100e0e0e0f0d0f10100d0f11120f0f0f0e10100e0c121311101111100f0e0f1011121615140d0 -d0c0c0e0e0e0e0d1011110a08090808070a0b0809090c070403050302030300000302020201020305050400050805010402ffff00020204 -06080906080a0804070a0800030503070502010300fffe0101010004020201fffffefd0000fffffffffdfd00020200fcff0202f7f8f9f8f -9fafaf9fefefbfafbf9f9fafcfbf8f7f9fbfbfcf7f6f6f7eeedeef1edeef2f6eef0f2f4f5f8faf9f4f8f8f7f0f5f8f7f3f7f8f6eef2f4f3 -edeaeae9e8e8eaeae8eaecece9e9e9eaebe9eae9ebecebedeae7e6e9edececede1e4e7e7eeebebebf3f0efeeefededeef3eeececf1edebe -bf0efeceaf1eeecebe9eaeef0e7eaeef2eaebedeee8e8e9e8ececeeefe8e6e4e5edeaebebefeeedebf0f0f1f2fdfaf9faf5f4f4f3fefcf9 -f8fcf9f9fa00fffdfcf9f7f6f6f8f8f9f7fefefcfcf8f6f6f5fcfdfdfd0101010000fefdfc03050808070808080a0a0a0c09090a090d0f1 -00e0b0a0d0d090a10120f10121313120f0f121110101112110f13100f0f1614121011120f0d151310101213121214131212110e0b0b211e -1d1b060d101006070707090b0b0a100d0a0811100b080f0e0f0f10100f0d100e0c0b0a070607090706050c0806020e0d0d0a12120d08121 -00d0a0a0806060a0805040b06010005010000080300000805fffd080807060202010200fdfcfd000001020201020200000000fcf9fbffff -fcfdff060402010502020306020000fefcf9f70000fcfafdf9f7f7fefcfaf8fffcfbfcf9f9f7f8fefcfaf8fbfbfaf7fefcfcf9fffcf9f8f -5f5f5f7f5f3f3f4f7f5f5f5fbfafbfaf6f4f7f8faf8f9f9f8f8f9f9f3f2f1f0f8f8f8f7f2f2f4f8f5f3f5f5f3f1f0f0f3f1f2f5f3f3f6f7 -f1eff0efe9eaedf1e8eaeef3eceae9ebebedeff0eeedededefeff0f2edf2f4f7eeeff0f3e7e5e5e4f0f1f2f0f2f4f4f3f0f0eeeaf0f1f1f -1eff2f3f3ecebecedeef0f1f1f3f3f4f2f5f4f4f2eeedeff3e9e9eaecf1f1f3f3e9edefeeedededefeceff1f0f5f5f6fafefffefff7f8f8 -f8fafe0100fafafaf9fbfbfbf9f7fafdfdf7f8fbfdfe00ff01f9fc0001fe01020302030402ff02060706060708080a090a101012120a0d0 -f0f0a080b0b0f0e0f11100d0b0b120f0c090e0e0e0e111212100d0d0c0b0f1213131213120f0d0e0c0a1112131112110e0d110f0d0c0c0d -0d10150f080e1114141106090c0c0b0e10100a0d101106070b100f1012130e0f0f0e0c0d0d0a0a0c0d0a0708080700ff010206030103030 -10001060200030504050602020305ff000205000204030000ff00fbfdfeff0401030101010102fdfbf9fb00fdfbfc0200fffdfffdfcfb02 -0000fe00fefdfdfefcfc00040201ff0000fffef3f0f1f5fbfe0000f7faf9f9f7f5f5f7fefefefef9fafbfbf7f7f8f9f5f5f7f7f7f4f5f7f -5f4f4f6f7f7f5f5f6f5f5f4f4f5f5f8fcfbfafafafafbf9f8f8fafcf7f8fbfdf1f3f4f9f6f6f6f7fafbfaf9f6f7f9f9f3f5f6f7f6f7f6f7 -f9fbfbfbf1f3f4f0f4f6f6f3f5f4f1f1edeeededf0efeeeef0f0f4f6f4f4f4f6f7f6f4f2f4f3f1ede2e0dee0eeedecedf3f4f2f2e9e8e9e -af1f1f0edf4f4f2f0ededecedefedebeaf1f0edebefebe8eaf3f2f1efeeedeae7f0edeae8eeecebe9f0efededeeebeceefbfbf7f4ff0000 -fff6f6f3f40000fefdf8f9f9fbf7f7fafffcfe0000fffffefc020300ff020200fe030200fd00fffffe060503000806030008060504110f0 -f0d0f0f0e090a0807081213110e0c0c0a06080a0d0c0e0f0e0d0f0f0e0d090a090810100e0b0f0f120f090c0e0f0f0f10100c1011120d0f -13161518191914191e230a090a0e090808090f0b09070e0a060513120e0a13110f0e0e0f0e0f08090807080504030604030405050505040 -4020205060603070909050602fffd060200ff050302010202010003030301010305040200000201fffefffdfcfaf9fdfcfbfbfefdfdfdff -00fefd00fefbf9fdfefdfc0104030300010201ff000000fafdfefd00fdfcfcfbfcfbfafafcfcfefefcfbfbfbf9f7f7f8f9f7f9f7f5f5f6f -bfaf8f7fafcfdfdf7fafbfaf7fafcfcf9fbfcfcfafaf9f7f7f4f3f3faf9f7f8fbf9f5f5f8f4efeef8f8f6f3f9f8f5f2fafdfe00f9fdfdf9 -f6f7f6f6f6f7f9faeceff5f7f3f4f6f9f3f7fd00f0f6f9fceff1f1f3f7f4f3f4f8f8f9f9f3f4f7f9eff2f5f7e3e8ebeaededeef1f2f3f3f -5edeeefefefeff0f1eeefeff1eef0efeceaeaebeae9e9eaeceaebedf1ebe8eaf0e5e5e6e6e8ecefede5e5e6e8ecebedeeedeeefeef4f4f5 -f5ff000000f5f7f7f7fdfcfbfdfbfbfe000000ff01fefcfd00fcfefffffefe0002f9f8fafdfbfdfe00fefe0000fefdff010001030506060 -6060a0707060606060a080a0a0a0c0d0c0b040606060a0b0c0c0908080907070809080909080808070b0d0b0d0d0e0e0f100f1010111012 -1113181919191a19171526221d150e0e0a05080603ff0808070405060505060303010a0805030b080603080503010303020105040302050 -60606030505050100010203020203ffffffff00fffefc020100fe000000ff00ffffff0301ffff0103030202050402fbfbfd00fd000304ff -000507fbfcfd00fafcff00fcfcfbfd02010001fffdfd00fcf9f9fcfaf6f6f7fcfcff00fafbfe00fefefefffbfd0001f9fbfefef9fafafaf -bfcfcfafafbfbfbfcfbfafbf8f8fafafbfbfbfafcfbfaf8f8f9fcfcf3f5f7f9f7f8f9faf7f7f8f8f1f2f2f2f3f3f2f1f2f5f6f6fdfbf6f2 -f5f1f0f0f5f6f8f7fbfaf9f8f7f6f5f5fcfdfdfeff000003faf7f8faf3f3f4f6f5f6f6f8faf7f7f9fafbfaf9f7f8f8f8e9e8e6e6f3f4f4f -3f6f9f9fbf0f0f1f3f3f5f6f8f1f3f3f4e9eaeeefeaecf0f3eeeef0f1f2f2f1f0f5f6f1eee9ebebebedebedede9edecedf1f2f1f1eeeced -eff6f6f7f9fffe0001f6f6f9fa00010101010201000000feff01010000feffff0005040302000201fe00010203010104060406080906070 -a0f07070806090a0c0a09070606090604000808070706070506090907080b09080809080708060606060a0706070d0909090c0704070f0f -111116171916191a1a191515161717191a1cfff7f5f6fbf7f3f201fffcf80200fcfaff00ffff01ffffff01ff00000000fefc0100fffb020 -302ff060503000403020102020201030101020000fffdfdfcfdfeff000000fdfcfcfd0000fefeff0000ff01020202030304040000fefe02 -000001090707070005060501010303000405040405050404030304fe000102f9fbfcf902030200020404020000fefe02010000fffdfcfef -9fafbfdfbfdfefefe000203fe000203fafbfdfffbfdfefdf7fbfe01fefe0000fc000000fbfcff01f9fafbfff4f9fafbf1f5f8faf2f2f8fb -f1f3f7f9f0f0f1f4f5f4f4f5fbfcfefff6f8fbfefdfefe0004030100fcfafafbf7f8f8f8fafbfdfbfafcfbfcfcfcfdfdf6f4f4f6e5e3e3e -7f2f2f3f0fcfffefcf5f7f7f7f9f9fafaf7f9f8f7efefeff0f4f5f6f4f4f5f7f8eef0f3f6ebeceff4ebebecedf1f1f1f1f0f4f3f4f3f6f9 -f9f1f2f4f7fafafbfd03040508f9f8f8fb01000000fffefdfefefefeff0100ffff0304030303040505fcfcff0005020002060607090a090 -9090e0d080705040506070302030401000000fdfbfc060401fd04040202060706070a0707060808070907060809080707090a07080a0709 -090a0f0e0c0d120f0e0e16141213171714131e231c15fafdfaf8f2f2f0f0f5f3f1f2faf9f7f7fffdfaf9fffdf9f7fefaf5f6f9f7f7f8f8f -6f5f6faf8f7f7fefcfbfcfdfaf9fbfefcfafa02020100fcfcfdfefdfdffffff000001fe000001feffff00feffff00000000000403020100 -00000003030302080809050404040501ff010502000205060808060609080701010203f7f8fd00fffeff0100fdfcfcfd00ffff030504030 -0040403fe000103feff01010505060404060504ffffff00fefdff0000fdfafb00000003010103030202030301020304fbfcfd00fbfdff00 -fdfe0101fd000000f6fafcfbf8fafbfafffefefefffefdfc00000001fefcfdfffcfbfbfaf7f7f8f9faf9f9f9fcfcfcfafdfbfafbf7f8f8f -8e9eae9e8eff0f3f5f8f9fafbf6f7f9f9fd0000fef6f9fdfff4f7f8f7f4f6f9fcf7f8fafcf9fafcfcf6f8fafbf0f2f2f3f3f6f9faf4f3f4 -f4f8f7f7f7f8f9f7f6fdfdfefe09080607fe00fffd0001030400010303000304050001010403050404080b0d0d0105080906090a0d0b0f1 -2130d1116140a0d100f080808090404050600fefcfbfdfcf9f9fcfcfbfc0200fdfb0601fefe070402030a0704050a050608090708090c09 -09090a0905040d0d0a0a0d080707120f0a06120e08060d0a07074300cc000f0000009b9a999796959392918f8e8d8b8a898786858382817 -f7e7d7b7a797776757372716f6e6d6b6a696766656362615f5e5d5b5a595756555251504e4d4c4a49484645444241403e3d3c3a39383635 -343231302e2d2c2a29282625242221201e1d1c1a19181615141211100e0d0c0a0908060d7200000ca3100b12208ea21c83d44cd32359156 -56118a66dd95469d45551d72549d19265d0756d9de6791d3569d9e67999d451228871dec66dd7b6695cb769d5453918f65094f45496c631 -cc645dd7d43845911800a130 -''') - diff --git a/proto9x/calibrate.py b/proto9x/calibrate.py deleted file mode 100644 index f237c97..0000000 --- a/proto9x/calibrate.py +++ /dev/null @@ -1,99 +0,0 @@ - -from hashlib import sha256 -from binascii import hexlify, unhexlify -from os.path import isfile -from threading import Thread -from struct import unpack, pack - -from .tls import tls -from .usb import usb -from time import ctime -from .sensor import write_hw_reg32, read_hw_reg32, identify_sensor -from .flash import erase_flash, read_flash, get_fw_info, write_flash_all -from .util import assert_status -from .blobs import calibrate_prg - -class Line(): - def __init__(self, blob): - # what's with the rest of fields? - self.u0, self.u1, self.line, self.frame, self.u2, self.u3, self.u4, self.u5 = unpack('>> 6f 000e 000000000000 - # <<< 0000 880d 0000 07000000 - # 0800 0000 9400 0e00 0300 0080 07000000 7e7f807f808080808080808080808080808080808080818081808180818080808080818081808080818081808180818081808180818081808180808081808180808081807f80808180808081808180818080808180818081808180818081808080818081808180818081808180818081808180818081808180818081808080808080808080807f807f807f807f7f7e7e - # a400 0000 0800 0e00 0200 0000 00000000 0d007100 - # b400 0000 0800 0e00 0800 0080 db000000 00000000 - # c400 0000 0400 0e00 0500 0080 1c6f0400 - # d000 0000 9400 0e00 0700 0080 07000000 2b23203c2d182e1e30182e1c321d341d341e321c301e1e241e201f201d1c321a301e1c211e21341f1e202024201f1e20201f212221221d221e23341e1d1e1d20341f1d193b341c1d1e35201e201c20221f341c1e1e1c221f201d21201e1c1f34242221201f20221f201e241e241d2020221e2420231d221e211e1f1e1e341c321e3220301d2d302f2d2c2b23223a211c - # 6c01 0000 1400 0e00 0f00 0080 05550007 7701002805720000080100020811e107 - # 8801 0000 0c00 0e00 1200 0080 07000000 7002 7800 7002 7800 - # - # Empty reply: - # >>> 6f 000a 000000000000 - # <<< 0000 880d 0000 00000000 - - rsp=tls.cmd(calibrate_prg) - assert_status(rsp) - # ^ TODO check what the rest of the rsp means - - calib_data=usb.read_82() - print('len=%d' % len(calib_data)) - with open(calib_data_path, 'wb') as f: - f.write(calib_data) - - calib_data=make_calib_data(calib_data) - - persist_calib_data(calib_data) - # no need to reboot - diff --git a/proto9x/sensor.py b/proto9x/sensor.py index 321f67b..2e98595 100644 --- a/proto9x/sensor.py +++ b/proto9x/sensor.py @@ -4,16 +4,18 @@ from enum import Enum from .tls import tls from .usb import usb from .db import db, subtype_to_string -from .flash import write_enable, flush_changes +from .flash import write_enable, flush_changes, read_flash, write_flash_all from time import sleep from struct import pack, unpack from .table_types import SensorTypeInfo from binascii import hexlify, unhexlify from .util import assert_status, unhex from .hw_tables import dev_info_lookup -from .blobs import identify_prg, enroll_prg, reset_blob +from .blobs import reset_blob from . import timeslot as prg +calib_data_path='calib-data.bin' + def glow_start_scan(): cmd=unhexlify('3920bf0200ffff0000019900200000000099990000000000000000000000000020000000000000000000000000ffff000000990020000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000') assert_status(tls.app(cmd)) @@ -22,9 +24,6 @@ def glow_end_enroll(): cmd=unhexlify('39f4010000f401000001ff002000000000ffff0000000000000000000000000020000000000000000000000000f401000000ff0020000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000') assert_status(tls.app(cmd)) -def start_scan(cmd): - assert_status(tls.app(cmd)) - def cancel_capture(): usb.queue.put(b'') #sleep(0.2) @@ -57,245 +56,6 @@ def wait_till_finished(): def stop_prg(): return tls.app(unhexlify('5100200000')) -def capture(b): - usb.purge_int_queue() - - start_scan(b) - - b=usb.wait_int() - if b[0] != 0: - raise Exception('Unexpected interrupt type %s' % hexlify(b).decode()) - - try: - wait_for_finger() - #wait_till_finished() - - while True: - b=usb.wait_int() - if b[0] != 3: - raise Exception('Unexpected interrupt type %s' % hexlify(b).decode()) - - if b[2] & 4: - break - finally: - res=stop_prg() - - assert_status(res) - res = res[2:] - - l, res = res[:4], res[4:] - l, = unpack(' 0: - tag, l = unpack(' 0: - (t, l), x = unpack(' 1: - raise Exception('Expected only one child record for finger') - - print('Recognised finger %02x (%s) from user %s' % (subtype, subtype_to_string(subtype), repr(usr.identity))) - print('Template hash: %s' % hexlify(hsh).decode()) - - if len(finger_record.children) > 0: - if finger_record.children[0]['type'] != 8: - raise Exception('Expected data blob as a finger child') - - blob_id = finger_record.children[0]['dbid'] - blob = db.get_record_value(blob_id).value - - tag, sz = unpack(' 0: + tag, l = unpack(' 0: + (t, l), x = unpack(' 1: + raise Exception('Expected only one child record for finger') + + print('Recognised finger %02x (%s) from user %s' % (subtype, subtype_to_string(subtype), repr(usr.identity))) + print('Template hash: %s' % hexlify(hsh).decode()) + + if len(finger_record.children) > 0: + if finger_record.children[0]['type'] != 8: + raise Exception('Expected data blob as a finger child') + + blob_id = finger_record.children[0]['dbid'] + blob = db.get_record_value(blob_id).value + + tag, sz = unpack('