From 7069455fa6dd5ff53d275339c846a81f17e3ab25 Mon Sep 17 00:00:00 2001 From: POUDEROUX Tom Date: Sun, 22 Mar 2026 07:18:37 +0100 Subject: [PATCH 1/4] Fibbo16bits --- Epreuve3.py | 5 +- Fibbo16b.asm | 50 +++++++++++++++++++ Interpreteur.py | 37 +++++++------- LED.asm | 32 ++++++++++++ main.py | 129 +++++++++++++++++++++++++++++++++++++++++++++--- notes.txt | 23 +++++---- out.bin | Bin 45 -> 42 bytes 7 files changed, 239 insertions(+), 37 deletions(-) create mode 100644 Fibbo16b.asm diff --git a/Epreuve3.py b/Epreuve3.py index 0578c25..535170f 100644 --- a/Epreuve3.py +++ b/Epreuve3.py @@ -11,7 +11,7 @@ # - Pile descendante, SP=255 # --------------------------------------------------------- from dataclasses import dataclass, field -import sys +import sys, time @dataclass @@ -244,8 +244,9 @@ class Simulator: steps = 0 while self.cpu.running and steps < max_steps: result = self.step() - yield result + # yield result steps += 1 + time.sleep(0.05) # --------------------------------------------------------- diff --git a/Fibbo16b.asm b/Fibbo16b.asm new file mode 100644 index 0000000..96aa0fc --- /dev/null +++ b/Fibbo16b.asm @@ -0,0 +1,50 @@ +_main: + + MOV R0 1 ; b + SUB R1 R1 ; b + SUB R2 R2 ; a + SUB R3 R3 ; a + +_loop: + OUT R2 + OUT R3 + + PUSH R0 ; Sauvegarde de b + PUSH R1 + +; R0 R1 => b R2 R3 => a. Retourne b = b + a = c + PUSH R1 + SUB R1 R1 + SUB R1 R2 + SUB R0 R1 + POP R1 ; R0 = R0 + R2 + + CMP R0 R2 ; Si overflow, il faut +1 R3 (a oct fort) + JLT _add16cr1debut + JMP _add16cr1fin +_add16cr1debut: + SUB R3 255 +_add16cr1fin: + + PUSH R0 + SUB R0 R0 + SUB R0 R3 + SUB R1 R0 + POP R0 ; R1 = R1 + R3 + CMP R1 R3 + JLT _add16cr2debut + JMP _add16cr2fin +_add16cr2debut: + JMP _end +_add16cr2fin: + + POP R3 ; Reprise de b + POP R2 + + + JMP _loop + +_end: + POP R3 + POP R2 + RET diff --git a/Interpreteur.py b/Interpreteur.py index 2e79e0b..bcaedd6 100644 --- a/Interpreteur.py +++ b/Interpreteur.py @@ -12,7 +12,6 @@ # --------------------------------------------------------- import sys, time - import uasyncio as asyncio @@ -132,8 +131,8 @@ class Simulator: r = b & 0b11 instr = f"POP R{r}" c.regs[r] = self.pop() - if (setRegisterCallback != None): - setRegisterCallback(r, c.regs[r]) + if (self.registerCallback != None): + self.registerCallback(r, c.regs[r]) # --- MOV Rx valeur / SUB Rx valeur / CMP Rx valeur --- elif (b & 0b11111100) == 0b11100000: # MOV Rx valeur @@ -142,8 +141,8 @@ class Simulator: size = 2 instr = f"MOV R{r}, {imm}" c.regs[r] = imm - if (setRegisterCallback != None): - setRegisterCallback(r, c.regs[r]) + if (self.registerCallback != None): + self.registerCallback(r, c.regs[r]) elif (b & 0b11111100) == 0b00010000: # SUB Rx valeur r = b & 0b11 @@ -151,8 +150,8 @@ class Simulator: size = 2 instr = f"SUB R{r}, {imm}" c.regs[r] = (c.regs[r] - imm) & 0xFF - if (setRegisterCallback != None): - setRegisterCallback(r, c.regs[r]) + if (self.registerCallback != None): + self.registerCallback(r, c.regs[r]) elif (b & 0b11111100) == 0b10010000: # CMP Rx valeur r = b & 0b11 @@ -169,16 +168,16 @@ class Simulator: src = b & 0b11 instr = f"MOV R{dst}, R{src}" c.regs[dst] = c.regs[src] - if (setRegisterCallback != None): - setRegisterCallback(dst, c.regs[dst]) + if (self.registerCallback != None): + self.registerCallback(dst, c.regs[dst]) elif (b & 0b11110000) == 0b11010000: # SUB Rx Ry dst = (b >> 2) & 0b11 src = b & 0b11 instr = f"SUB R{dst}, R{src}" c.regs[dst] = (c.regs[dst] - c.regs[src]) & 0xFF - if (setRegisterCallback != None): - setRegisterCallback(dst, c.regs[dst]) + if (self.registerCallback != None): + self.registerCallback(dst, c.regs[dst]) elif (b & 0b11110000) == 0b00110000: # CMP Rx Ry dst = (b >> 2) & 0b11 @@ -199,8 +198,8 @@ class Simulator: eff = (addr + c.regs[src]) & 0xFF c.regs[dst] = self.ram[eff] extra_cycles = 1 # 2 octets -> 2 cycles +1 = 3 - if (setRegisterCallback != None): - setRegisterCallback(dst, c.regs[dst]) + if (self.registerCallback != None): + self.registerCallback(dst, c.regs[dst]) elif (b & 0b11110000) == 0b01110000: # STR Rx Ry _label dst = (b >> 2) & 0b11 @@ -233,9 +232,9 @@ class Simulator: mult = 1 if m == 0 else 100 pause_ms = mult * (v + 1) c.cycles += pause_ms # modélisation de la pause - print(f"Sleep {pause_ms}ms...") + # print(f"Sleep {pause_ms}ms...") time.sleep(pause_ms/1000) - print("BIPBIP") + # print("BIPBIP") # if pc_before >= self.program_size: # if 32 <= b <= 126: @@ -263,9 +262,9 @@ class Simulator: def report(self, pc_before: int, instr: str, cycles_added: int): c = self.cpu regs_str = " ".join(f"R{i}={c.regs[i]:02X}" for i in range(4)) - print(f"PC={pc_before:02X} {instr:20s} +Cycles={cycles_added:3d} Total={c.cycles}") - print(f" {regs_str} LT={c.lt} EQ={c.eq} SP={c.sp}") - print("-" * 60) + # print(f"PC={pc_before:02X} {instr:20s} +Cycles={cycles_added:3d} Total={c.cycles}") + # print(f" {regs_str} LT={c.lt} EQ={c.eq} SP={c.sp}") + # print("-" * 60) # ----------------- boucle principale ----------------- @@ -278,7 +277,7 @@ class Simulator: def StartCPU(program, callback, registerCallback): sim = Simulator(program) sim.setMotorCallback(callback) - sim.setRegisterCallback(setRegisterCallback) + sim.setRegisterCallback(registerCallback) while sim.cpu.running: sim.run(max_steps = 1) #time.sleep(0.1) diff --git a/LED.asm b/LED.asm index e69de29..84d3425 100644 --- a/LED.asm +++ b/LED.asm @@ -0,0 +1,32 @@ +_main: + + SUB R0 R0 + SUB R1 R1 + SUB R2 R2 + SUB R3 R3 + +_loop1: + SUB R0 245 + TIM 1 + CMP R0 220 + JLT _loop1 + +_loop2: + SUB R1 245 + TIM 1 + CMP R1 220 + JLT _loop2 + +_loop3: + SUB R2 245 + TIM 1 + CMP R2 220 + JLT _loop3 + +_loop4: + SUB R3 245 + TIM 1 + CMP R3 220 + JLT _loop4 + + RET \ No newline at end of file diff --git a/main.py b/main.py index 730828d..3015e8b 100644 --- a/main.py +++ b/main.py @@ -21,6 +21,97 @@ oled = SSD1306_I2C(128, 64, alphabot.i2c) oled.fill(0) oled.show() +bitmapSII = bytes([ +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, +0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf8, 0xf8, 0xf8, 0xf8, 0x7c, 0xfc, 0xfc, 0xfc, +0xfc, 0xfc, 0xfc, 0x7c, 0x7e, 0x7e, 0x7e, 0x7c, 0x7c, 0x7c, 0x7c, 0xfc, 0xfc, 0xf8, 0xf8, 0xf0, +0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, +0xe0, 0xc0, 0x80, 0x20, 0x10, 0x10, 0x18, 0x08, 0x0c, 0x0e, 0x06, 0x07, 0x7f, 0x7f, 0x3f, 0x3f, +0x1f, 0x0f, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x3f, +0x3f, 0x1f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x01, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x80, 0xc0, 0xf0, 0xf8, 0xfc, 0xfe, 0xfe, 0xff, 0x7f, 0x3f, 0x0f, 0x07, 0x07, +0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf0, 0xf8, 0xf8, 0xfc, +0xfe, 0xfe, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf8, 0xf8, +0xfc, 0xfe, 0xfe, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xc0, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, +0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xf8, 0xfc, 0xfc, 0xfc, 0xc0, 0xc0, 0xc0, +0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x03, 0x0f, 0x1f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, +0xf8, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x3f, 0x3f, 0x3f, 0x1f, +0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x1f, 0x3f, 0x3f, 0x3f, 0x03, 0x03, 0x03, +0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x0f, 0x7f, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xfc, 0xff, 0xff, 0xff, 0xff, +0xff, 0x7f, 0x1f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0f, 0x07, 0x07, +0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x20, 0x30, 0x3c, 0x3e, 0x3f, 0x3f, 0x1f, 0x0f, 0x07, 0x07, 0x03, 0x01, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x01, +0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]) +oled.write_data(bitmapSII) + + +class FoursNeoPixel(): + def __init__(self, pin_number): + self._pin = pin_number + self._max_leds = 4 + self._leds = neopixel.NeoPixel(self._pin, 4) + + def set_led(self, addr, red, green, blue): + if addr >= 0 and addr < self._max_leds: + # coded on BGR + self._leds[addr] = (blue, green, red) + + def set_led2(self, addr, rgb): + if addr >= 0 and addr < self._max_leds: + # coded on BGR + self._leds[addr] = rgb + def show(self): + self._leds.write() + def clear(self): + for i in range (0, self._max_leds): + self.set_led(i, 0,0,0) + self.show() +leds = FoursNeoPixel(alphabot.pin_RGB) + def motorCallback(motG, motD): @@ -28,14 +119,22 @@ def motorCallback(motG, motD): sMotD = 1 - ((motD >> 2) & 0b10) motG = ((motG & 0b0111) * sMotG) * motorSpeedFactor / 7 motD = (((motD & 0b0111) * sMotD) * motorSpeedFactor / 7) * motorDCompensation - print("Mot G :", motG) - print("Mot D :", motD) + # print("Mot G :", motG) + # print("Mot D :", motD) alphabot.setMotors(left=motG, right=motD) def registerCallback(register, value): - print(f"Register R{register} changed to {value}") - pass - + global leds + # print(f"Register R{register} changed to {value}") + if (register == 0): + leds.set_led(0, value, abs(127 - value), 255 - value) + elif (register == 1): + leds.set_led(1, value, abs(127 - value), 255 - value) + elif (register == 2): + leds.set_led(2, value, abs(127 - value), 255 - value) + else: + leds.set_led(3, value, abs(127 - value), 255 - value) + leds.show() # to know COM port used when connected on PC: @@ -48,14 +147,30 @@ robotName = 'Nogard' toSend = [] def onMsgToRobot(data:str|bytes): + global useLED, useMotor + if (not ("useLED" in globals())): + useLED = False + if (not ("useMotor" in globals())): + useMotor = True """Function to call when a message sent by PC is received :param data: message received""" checksum = binascii.crc32(data) print('received', data, '=>', checksum) print(data) - StartCPU(data, motorCallback, registerCallback) - alphabot.stop() + if (data[0] == "#"): + data = data[1:] + if (data == "LED ON"): + useLED = True + elif (data == "LED OFF"): + useLED = False + elif (data == "MOTOR ON"): + useMotor = True + elif (data == "MOTOR OFF"): + useMotor = False + else: + StartCPU(data, motorCallback if useMotor else None, registerCallback if useLED else None) + alphabot.stop() async def robotMainTask(bleConnection): diff --git a/notes.txt b/notes.txt index 95af3ae..3d7d111 100644 --- a/notes.txt +++ b/notes.txt @@ -153,19 +153,24 @@ TIM valeur ;génération binaire 11111000 mvvvvvvv -1000ms = 85cm (vitesse 3) -toupie 76 100ms = 360 + 90° - -42 -76 - +Connexion {"type": "connect", "name": "Nogard"} -{"type": "msg", "format": "base64", "string": "4Dvw+IKA"} +Commandes annexes +{"type": "msg", "format": "str", "string": "#LED ON"} +{"type": "msg", "format": "str", "string": "#LED OFF"} +{"type": "msg", "format": "str", "string": "#MOTOR ON"} +{"type": "msg", "format": "str", "string": "#MOTOR OFF"} -Demi tour -{"type": "msg", "format": "base64", "string": "4Dvw+IHgAPCA"} +Fibbo 8bits +{"type": "msg", "format": "base64", "string": "4ADhAfDx4gBc2d5RVzTAEkAF4EGA"} + +Fibbo 16bits +{"type": "msg", "format": "base64", "string": "4AHV2t/y8/LzoKGh1dbRYTLAFUAXE/+g0NPUYDfAIUAjQCdjYkAHY2KA"} + +LED +{"type": "msg", "format": "base64", "string": "0NXa3xD1+AGQ3MAEEfX4AZHcwAwS9fgBktzAFBP1+AGT3MAcgA=="} Demi tour + fuite {"type": "msg", "format": "base64", "string": "4Dvw+ID4MuAA8Phk4Mzw+KXgAPDgAPD4ZIA="} diff --git a/out.bin b/out.bin index 983ba4197b0bf6ce9666e1f7cf2e2b80ee94d7cd..4bb651f28a8e3ff4ee93acbb06f43400434d8a8e 100644 GIT binary patch literal 42 zcmV+_0M-BC0oB^y^7HcZprN7F*3n@yz!g9j6aS#l)6`%$z#%{*Kqq5jKnG)DfG+12 A6951J literal 45 ncmaDL_~A#>10@h){Ncx<2Zm7Aj0eI{R>uQ|4-G*4Bc%ZV$Cn;Y From a882a07bc7f37918d613f2ccaa01bf5f1f4c7fce Mon Sep 17 00:00:00 2001 From: POUDEROUX Tom Date: Sun, 22 Mar 2026 07:34:39 +0100 Subject: [PATCH 2/4] Ajustements programme Path --- Path.asm | 2 +- notes.txt | 4 +++- out.bin | Bin 42 -> 45 bytes 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Path.asm b/Path.asm index 1e32447..1f3be12 100644 --- a/Path.asm +++ b/Path.asm @@ -12,7 +12,7 @@ _main: MOV R0 51 OUT R0 - TIM 162 ; Ligne droite OK + TIM 165 ; Ligne droite OK MOV R0 49 ; 0b 0011 0001 OUT R0 diff --git a/notes.txt b/notes.txt index 3d7d111..e222239 100644 --- a/notes.txt +++ b/notes.txt @@ -176,6 +176,8 @@ Demi tour + fuite {"type": "msg", "format": "base64", "string": "4Dvw+ID4MuAA8Phk4Mzw+KXgAPDgAPD4ZIA="} Parcours -{"type": "msg", "format": "base64", "string": "4BHw+ILgIvD4guAz8Pii4DHw+ILgM/D4mOAT8PiC4DPw+IjgAPCA4ADw+GSA"} +{"type": "msg", "format": "base64", "string": "4BHw+ILgIvD4guAz8Pil4DHw+ILgM/D4mOAT8PiC4DPw+IjgAPCA4ADw+GSA"} + + diff --git a/out.bin b/out.bin index 4bb651f28a8e3ff4ee93acbb06f43400434d8a8e..9f6357d5e72e858b9d0d0d33fd50377578adf222 100644 GIT binary patch literal 45 ncmaDL_~A#>10@h){Ncya2Zm7Aj0eI{R>uQ|4-G*4Bc%ZV$Mhaj literal 42 zcmV+_0M-BC0oB^y^7HcZprN7F*3n@yz!g9j6aS#l)6`%$z#%{*Kqq5jKnG)DfG+12 A6951J From a1eb9116cc20087b95f230be6b7aa4b679c5ff0e Mon Sep 17 00:00:00 2001 From: POUDEROUX Tom Date: Sun, 22 Mar 2026 07:41:02 +0100 Subject: [PATCH 3/4] Fibbo 16 bits again --- Fibbo16b.asm | 6 +----- Fibbonacci 16Bits.png | Bin 0 -> 72761 bytes 2 files changed, 1 insertion(+), 5 deletions(-) create mode 100644 Fibbonacci 16Bits.png diff --git a/Fibbo16b.asm b/Fibbo16b.asm index 96aa0fc..3895d44 100644 --- a/Fibbo16b.asm +++ b/Fibbo16b.asm @@ -1,5 +1,4 @@ _main: - MOV R0 1 ; b SUB R1 R1 ; b SUB R2 R2 ; a @@ -12,8 +11,7 @@ _loop: PUSH R0 ; Sauvegarde de b PUSH R1 -; R0 R1 => b R2 R3 => a. Retourne b = b + a = c - PUSH R1 + PUSH R1 ; R0 R1 => b R2 R3 => a. Retourne b = b + a = c SUB R1 R1 SUB R1 R2 SUB R0 R1 @@ -40,8 +38,6 @@ _add16cr2fin: POP R3 ; Reprise de b POP R2 - - JMP _loop _end: diff --git a/Fibbonacci 16Bits.png b/Fibbonacci 16Bits.png new file mode 100644 index 0000000000000000000000000000000000000000..df4e9ffce761c0c7dfa02df153082bb60efb4644 GIT binary patch literal 72761 zcmbTe1z1*F+b&88NQcs$N_VGpD$+*~Z@7(%8sG3x=JKixXQCHwC<5!-qzIF(OuEf$r=1uT}_&q59WXVe4%R_oCyVtoTRv#oBrP7 zLpN2^E0MeWYO#yJmyNK@FI=PF;frHSX=qD} zO5UVF>P4+wZ!lbM3fJ%gE4cGB9CQ&rfV+p#uL^`iWCuV`Iml zzQ&T3l$2caCqTdf-#1Vo`hjmHSwjAP*>QK`3vO@-B^6b6Q5WTFD>}?p2j~|{gD2bn z+b{ly;}qyT@S~)pJl?AsmcP9^J3B{ZZKf#Esj1Xy&0bf}Q^}D&p0h5SeIgDHrq<#< zqorX==CMT?`r!kE%kp#4Tbj0;<1m}WM)l*9lYZgPg$PJU{qav#X=rJs@K|)UtWu() zqR>eAUS#Lw&@wS8p6|`7mZE_VqN3!i=P#z!6$_9qf;k@CF}n<{xlFC`__C`3UaCUSq{w7t~Q z^!xfc%{ElF&TjGazS6W`e$oC36Vt@z{!B%Vh5@xgNM$0NlnJ(d%bAAdT=kdu_;}f8 z&;0Go9ULl_f^Depj8_hBuP^#BMQ^gM;l#H}^_p^>HixcA>LaJ$T<_N@1R$c*aC58o z)6vog6{79na#S}oBND1$0sxkIi*WW$?sI2?M@|B1wI&??SDljv?E{2 zXGhmarFFfyzgjL7VJZEKSX+NTOX~jq zJ;7519tAh2;PzRIXZc{^OT3Xs#QoO8}UF7NcdE)P8U3b>~;sNA{=q{Jt-tFvX+bi2o+ctFLOZAs{ zrd$K_c>FfnGbmYEhn-1baSC6=P)e|wS~u9)dwYM8D~agN>Og|4`ap5`Y?9gVmFL+` zUW$y#gLbb)WJwhz>xcUI{`x{w!^6*i3HsbM-x-t}`kn62YgQ${U2q6CBfi+5H}@#M zbb9pYk%if~FN5XVw{OR7p+)35`xpVS!L#Q$41di{yfvMfA%5yi$h2TNL2)WIETvMA zRTFMuv8Ke(O63zmlexB@rfG_KBUUrz7P~#Jg)RSG4rxYye*V)JlFtpRd;5EO*o3=? zOqRXgz3X4JU)o@O@gGi43S;A)U&?%=EsJB`OhKN1Zma-w9G8Yk2R#Xf( zV}_j%&x&e^4h;z@D4b1r*sPC*_DN~UX;?U)l;%ZX*p4c-pvLHNS?iTNyaba>R#0Z$ zmYNZ!Gm3V#MNBve|4YvcDzWRU-7+O(f}cG8y_)*&QUMaD6Wm=`l83>y!N@eDcv!>y zb_;xq(k28IgNV*p4Zm8iPX(r0OnPzhBjccAU)sw|M;CM!0bL)KuF@St=>8Sz{f7?l z9}4?F4dOMH)^|1^b~AR%<<^#nm(VeX)+a1ib*c|2jIfoyi&DrQJ65f4k|)kR(GxVZ z5*&D%9v7!7s1NPXNfhM_p3+71#XJg8121?u+9ywDX#K^&>16Npd`bCw+f=uEudy#+ zjisg6a@@!G^2G~^(b3V^^mL}s&`=JG5sJ`=h=j|NP3sg&i6E$C=7Q21o0LS~9YvlL zC2}P@Ha4cXE6!d1f5((G>nW2t+(f|RA(2P-YSTR`7U_=YQdW}MXd~z z4#JxLRlkZ+WC|8g2uYxL*5d*Up1aM>&E2!?Y^tN9qtV@xS9OV_IWh`ic+6a=$lt$z z$D1;FWoGtyTfkq@SZ_n4SnCr$bi-wgT*{$$-`ne!fnNCj{reu!o3mgSi0zv{sn>%l zo>||}psf{WyRjQwq>ThMRa16cx5v@95^TSJ1e2#8STEF9e6NHq++>U@r=K^hI1UL8 zoxVux%lybDefyaw3tiNO^rr-_Z{PBw!$i3Hzq>lE(7Ds8Fh&MP<4*2q|4Ruow8F<<(8jNI1|I{XUHllZ}Awo(cyhz`7=aInxN?W-_vHHY3k8~31*-yft@ zR5Uf&uKvk#eA$y87o2`WArUqL2kIa6q%|pmYy$J=OSee@=*!8$tzBNGNHve4yPoa6bPHgOaMxR!-$)rwg|gnRqcy`jOT z7efYl8ZsH6UdWb0J-WD<{yNm%Eu);y_o;uScHVA$fMnz8Qnh7V z^V!s^*n|XAl#!pSs}NNCxv^n3r_wV;D(bDvqFZlxF~s=f$%qSplS0O?O6Ofw^g+l(pBBhrxy8|J9(2Z~|hoBV!(9*#QqGeshZjh;S#;$0Gp zUhLPeVl9~&871PcyCX@@YU}Fi5c!aq7~$JV{0ViUdV&}$f4V~KC!bBJtDh3<(aj2$vl(?|F!Z(UOl)a zju$z&hyszx){}(^wY{7aFC;WjU@7L{@6PA#^ZGP3JUkjPU^&eO2wEb}sKvl~D*1v| z3k%D@5m1V(zGi`IDV9&Bxrh&HmJ>fSGMW_@)uIPxbo}bW*pEp?5?w1eSX+(zeGJE| zQKIsalJ6JXH#2l51s#4$g8CABwmY4~5Nty+_lU=8Lbl9+@f4wpAV@_;We)arerP~J*AZgEmc$D5gfAGfEc~|jLr$-D4n>^)vSc1z*3m&v;^FB^1+;P_EjP*sO=3L zW^hnH)y3lc@8tJCLmw4d!<7T=DziVtRgII+whN1#T(sfSEAodZ7%}}x3N(zIdXcmw zv8wd3HlQq8kL8AjgL1A@XU9xNM&@|9BAy{JlkAVi>1@a(c#>t@6;3FS#AMVi?u4gseQIzZsl-0 zGz^W5#C!hyx%+W1y~`AurxA*P@dus(KL7pBJvsxQ+Zx?QXSrWxfDH@X9CnN~yE{EZ zM^6BvK`($8=B5xDbS_E9LumAzNN_TL-v0x>DNmX7Ejps$+h2@HVPWe7Pp8w`bLyB5CL=YOby}f-3r+Flc z)7!WByu7@Zmzy75MD(G)tfPzy7jxP1{S6DZ)U#(Dc}5oX3W$C^cYy%AD6qEBXlrYK zzV%1bGToo6QTPxRcIMF$gq|l8MW)fO13^cCk38N1F4<_S6^xBgs#7C>|MpgwiUdt0?CXCZs+Knc08N|+)=A;V-6=XYigLf- zR}bW;0+-<>H2uQ~oVP~WjaZ3OBo#wlnVqPE0|PC2uqMaV9}s?Z-Ji4Ez@8N~m#B4V z_kVBlDwi~HwPS-uH?Zu|L2pNDC)J4_bey;o3^(rXTM+{4+qPOCG zhvUx~72-VWGC-oWTRdtM(|DBTAJ~EB&na)gs;LdOWFCNb3OOGp^?PKglG(F_e*m7u zoY;aV{TXv42-_C_sEzIlXfP1OM#TttJ-O9##(IVI+Ek}7?aTzBa^n$IqtN$7B}?FbyQ_0{&v`t!)yP6!EOEUS)U*a20wnMe^ z&eHQ#N$#W*^ZkB}NuI$}?l`ENHM;H>w%DnVdI5lI{oE+W7^!P)cPuXqBmed3KtyP0 z%)9IJggMd-0hh7$Ep^Xny|t>7S9NX?O>VP25RJwX5kP20BKdvs8Vy0^2bODz_!~lXJ#ChBBeSlQeRQXB- z2-K5p=iXwo+LI4z=ry{DV;tNn#YU2q9~I1@?jQOG1gsx4{hA_cAmAcgJv8#QKof-9 z;`0}emx&~KDlRUrBNdMEFpbxqrN)?Ti2@GS=azZ%_4hi$_nMRi)OB9X)GXIJ_&`?e1utAF-A(Uc^>&_AnSo1?78@XmTMmBrY-rTnA zbrP}28Kjsgq#cAoS~$&Kq#!Tpsq`;?pe@giyQc~vC?x<-oCs1X_vc%yt(g@mVHy(AV*-=Y}kGMM> zCHINB4_JpA;=qz`AZJ3Qd>0UJ!~|rP#l=PLuTVufbG)jy9%5Aj>o6gm456!f`-zlP zV65v#u4J8sagND;(4K*;Y)JFzm;waFJt_c?C_F`7uCY#fgpa>_2F^@AicGjTu?C@C z)61(_f4SB+&5n4=j{*yJ2GCeThA{WAm>Qeu(u_dv*`Q)Fj!@($EzQkbhTMSum#Jx+ z5M%fJbT3rJnyGg%Zdi>JbZ#mytFYajE=x*a)SPnzd_v`Hb%MtaR=gc&vbkn&u0ng^ zbl8QG8nLICAB7_{8E0Q-LmC4Wb=-ymPT2az8BjHhUEHOjVI{Ew2dFtZ60_zADyyoP zS=#V=YFV_(#mKx4#fkHnIz&VORvpL`ezi$IbN+t!C}zT{HaCP^xfrp(&t@dmIww7PfF_0tRCO< z_dv$3(Zbs&@Vq!+{^)fa`hC5&8K}+R*JwsvvG1A16HWows*W&m@vr?*Pmsu@O$C(V zq=Ut#{)=TF`y=*0L>_P`*9;F?Y3bB-xrQqyb=worfcvwh!g7tfBZ(w$R>|+9xvi%x zh}-+b(!@+Aq8~`k3n0AcQJd|zz}?#2Wdyx69-Ww{2Rd#7DsUqpU0d^-hl$XhHL7?foGgM#C*OC>?G>3e5b26NY%{6zKB2gZ! z-@Fmd<0t64H&Xjf3kmL#=lobo-NS`8pEfg`Q3XDB_E9y&$xa|vXCnrmY!26zCw?Hb zg~OK2?&kEMO|n&Z3kq;AbKL?J5akL1-%NPbea7RmqqaR)Q*>@4JuiJ~=e=7}r`QgV zq>9pyYR>7*<)0=BdjjL@Ye$k#nV3d)@yCYe-Ewzj6%@wt!!ql9VX%cw|7kPSPIy>Y zhBe{LTY2Fth_fv4aD7Pz-rDezYVd+of;18=2Z{}qrC9)`Is)O}I*k`Wy}(Qo z=6&Wj>28ehJYLhjN2JQ@fN$eGew-)XQ>b1fzfXns!{3F%kOb1KLIK}v+F1RW6C|3%)mj8_x>Vl(p%BHFKf_p^ zeGlrEyYt>&V^H+?RfT;NOUJO`G9WnGTP^?>eYk^=qRI>-GC~TjCYX= zxxL7b=^$|Rot0oqTm-6uVpIydanR6{<1S+R9?(#n&r!aHQzok*oZNW>5biomz~O#u zl2MBO;ll^WCVOpcZ2JAfTnj9NV;vMDyF2tFdpHH3n11Spd z7EFQXYzMzabApBLZ%!arv2V7@yrdK|OiCli1HOizo;b2|c1S;*_Wf4}Au=K4v7J-f zCM~y~W_ilOGPMiJ(*#T*2V0c=zx56y1V3`0n~EM>g_a*R0&+fimYH#vA@ubWp@M+xX(eXzTzCQUSibK&rTqr=z8&b|z}wRKy{L1`7WE{<#4C zO`nqVoKl87+ZY`jELm_|cnj|9?pbGNr(=KF(Qa<38Tr~Tzo!yiRitIUU| z8iIXp&ooo`9J0-f02;Nz$v1^lU@=IPxL#dBBV$CIWeZ%zJr{|=rB{yE={^hkKlhn$-{9o< zs;8X=*WI#D$+>h>Yc2L;#VNf0jdCDj-~a9wH38UpPP&|9gbr(#(**YVe80%{D*8)h z(kR`?-%^lzRnyyFEb55+XCo=_DgEBJSC-~D&U*!DLNdzAks92a8ykI)o60P6$nUhF zI9PbLJuU;Os{o8TxVf-ZCgaj6maBXdFp=#JC!`kkJfGMvR^626Af23tszT_vznB6C zCuiq$_po&694jDFfIOZ0TWM5d-+&IuO>I$q!WnFc+2S?``p0M_hV6AZ2EvmgBUs;m zvH%ukW|;pXCms*eG{67kVcBX4XQJZ>NZ6)C`-i3=#BSJbj~pS)`=M6m_K;9r|DMz| z(AHf(WBa@BAbz!&4_O)n9&qAQ0)SErpO)^XFn$$%QRxKS?`Kq&mX?jgaPaVFqHvOL z-(CRyWq&LD{Cy%tv_Ih9Ks*s=HAUd(g$_HB=@UU9YXb9O~zi%abRro3h_(ReG z&S^BBSrLKtM4iet{*{uK{*`@>QdXHy)?UQ2)fsyYXfT6oK+>8XAcEsn z<6Lr`x1Cd+*>d*VnSQGJdFu@WfdDN7gM2`=dXYxL9QW3jFwkK-51Em1qDTc@C!2s+ zy?(q?RJL>S=>vhVGr)C)9ram#gtjZuw35*tHCPB#Bc0X~uLRVFU#F=kg;ScmSo~1? zp~q2xD5y?6%G^Xb=6exZwF*%1^AO8={IiA4XT>rgI{8Ki%k9#!qI!2m2`NH)(sU}& zIdr~WgJXJLaDENj+u{Qkn%?$rnA} zBgD~mIBlU~_zcE9Ql>c^1h0n=A2!-rRE4x>j*1KuY!M2-ZUcHSv2_7KVbXTdx>yDhD!ahN z-?%tPVS(ug(Ct5@Q#+wt6|fwmA^rJ)vl2l0hV0!ry67zru>>9txBnxdiSB>kxA*87 zSiQ~}NMVq(k-Zxr{@-IC={&~Bh8`sV@yW|t)B{=o7{t8Ktu~99!&gXip)z;0!kVes zRQgFiBL)Pm_yN@Ip9eoEfgofH>1}}b`UAxHH7jV0jqBM|nKoSmf09i+#GJAVHvnXN z!Y5hDF;2@zqxM<{9p|EvEY?v-4rBjXNnT#p>gqN0d%HuH;#v7gb#CsLvg2mV>svos zJeu4U1sl9BD@m5f?N?*KN03~z0O}7&qfkRVvy1$m{_?WH<6~1(uq2Od*I$&aH=RdP zQD49G5&q*8II*6=*4$Zf@CT?ISwP#`-W;~FU%ATE|9su-<>iu0@UK@0EzN1KUnV;5 zOlb23ap6a20lmUM=`72ky=a!i%>`fs_Xy|B>nvPdbY*0Zs4P+fup0N zqA4O8K~_qqbOcc^0G?}Lp(X&4IwjHPeAXP)QasDiY#_b82THk&3GmB-6mrQi{Kt&b znl3SxtxB$SyxSw}?Y|YaD3trGltzb6#1##pTeG3`r+>>Koz*1mKO``PX#jtY>n8Wn z4QR>F^pMZa&XzC9hwQNL_y#?v+v5KB0eTt-G2@pnU(!%gibHe<7^?UHpD;W1GuQQiK#A$u&LrTM zv_O1J1nqnGc7w-eCQG{$G}JzTX1Ey%2nn?}2qAHpq#vlp8&qjr_%S&Aaj`bgA0ZQs*L zyRi?$t(IQCjHH*73sn`M6MPH@t<>zDp>6RjAF=4)NLX?Cnfj|yr6XLqlb%Og0?K|i(O9{-EqhQ;Vd&uSVB>>GskYyw-$s5aRfMK zAUgB;Y#EpskfG66@36`>B5?_rY1;%F=SZPCBl;sihZq2|AhV7EcLW&eKz3)q6#voe zegZ`@7KFiKSW{Cj!}zP#Mg3jt92<64kjUJ=Zp??L2!n)}aSj5sAqF=c|NH`WgQ3eC z@b=4Au#;o@jnn@3G7#C2*PwWNM6P<1G7iDS3nbsjQF6kSBmd z(5}c#o&Col0)K7!l>|-w7*u?g9tgKLnFARy_TxuZ;LOKP>w6CF*mb~6KtB8AdQfj1 zegDWOi8Busl^A7hd}3loMvdZ;>z(PcGS1J=2MgMp{9Wli^L6$~z%?1F&H$fO?SzjR z`Skca0a)h@z(zKiJ|Dz+L_$R>aPi0im%rI3DMDsSAAGR!NCt2Y@sKqPoE%yl%=7bp7O&d{Q&2ff(`w$&Q1@w3W*@YW}VdlJopR- z5EW1s&|5lQ@6QABJ!B$1L_?eC27O6oa1CPU1%4A>RAn#@W+?*$A2?o_)N-MO#jgZ? zg4|arY3UuWuiyie+AK9|8$8({?IQV}tb72pY90eGJG;`(?(Q@@gH|u?m#V4?i{`8* zr{Ud{A(Cd5K*J|Opqlae5s0s7T2TTl6yO~TqFO_XJ@p$PWK}E_oa)(r0V>2p^0Q5LMlrQfb#)C87m_s7!DtQC%pKDo_80#%E*_C6(TKzy$1Ks$LazNe3Gnb@J{_B=KSTD0;}a40(|`Z)dz3_ z!FzM-sS?*(1rc(s#iBUMvD5lq$|HWSEU$S^O}`@;b`1&^d6ve8YyT3^9Gb5?6#2PqWJ1aY1>phx48 zKL_`C@*@Ne6qKg@+Eb#)MeU4}z@NsR^j5b1qcZ=0h5`Sm&dO=*2&t0Y01%aQ4vT_v zQ@P&rNf>~q(JpE$UIPOI_tR0CJYX^l827ZkyIun=Jjvf5?%fZ_fY+^mBmQ5~v*kJ- zvkpyJ%X#V~DNqsVGGcP6{!=DofOA-gns?z%z|g%H$Un{k$(ae*t0<_b%*9aAwSogs z3Y|DmA$X|8WVy5i?C?qe!033L_o*BBXITV&*gl7Kpwa!`7M!m1w(~xa83Fkgc@PJs z6%f$riXt!jOBrwndkx4_GWj3ELPDa!7KS`&px+Mf2!NJc;Nhf$MSw#@shzUzD6}22 zBm$5R9N7Eg8zs6N$l)MmvNs3roOLQHK}wBW9NqTKSCD6@tfVjN85~Ub{o8Ha7Qq6z z3wZ}s_#9DPt5}j$oU=JHn5tO6kGjdz`alI#CE~Gp0-P9zIxFMs4oQUfjW`P?5 zWCm-qXyNyeF2MpS3|BBrd1OO69r0n-yQz4U6&55!+I=R+I9c>tsOL zvo|+4wM+G_U%5o(5cc4V>9OXGoLb{_dqsLObA{V9rT6N-jmQ>1HuWRBC=f{l_q z{ddph1U$ZitpXL6gk2EE;+~Os!43M=Y^7-!qQCDSZrT$~DX|7t*qjlR2Gl6gQO^@J z`!_aP58y6QvWJI<)yQ0%kIx{^>n3R7nE_4|Vzn{_f{EPpm3|IwHx!rd4LoEjO-4du z;g3U55yPZMczy1?#=`)+u9+w^FpvgHCaK&|hG2e2H-SW-+T%a$(Gj>gyIB)p;m1`N zcUx`X%pU@OtPcp1*2d^i16geN-q~5NcA<+l=3mopZ^1rgV0u#5tYVRChK#v4`$_xj_|slTma}R}ZhO5_CUC~s>de6p z{2m{nqQ&0a==Kgam^89-QY(R8!ITKPG(fhio zK{(9X-fa2xu4seaW@KXkc_?eG)^ybQ> zNgiiHw4$ujT{+;Ah7>S>rad4lNPo8L8JbiVwcYBQW!T%pXI~-o=NP2Hh<*SE((utJ z3hhkcvOZ^RA;X#xOES&PNZ3=*9;-Ee`$e;?Rgx=m>W7gs4QWNA2sm-7LL$hj#ITNk zyF23WvaHqo%k|iBzWhR0jR$Ff)Z1-`oZk-+^y=EPfz!nR(yMhU5W6loce23J!e#r* zihSe32A#qr+W(zn`R@#K0$S;yN0c469DzJupKaZuS&rm-wax5HJSHs)KR-Vnc>pl9 z$s*@yL7r>ulQl@PpyAmYi1IrKshsc4=oTu1Jx0Tn{RPx3Ieoj@o12a?$6W_n2+RMz zyxdlRiWIPjdixR>O+m=QW0|q6nF@-x0(~gOwLhGYlSWk3V99M2y=AfF6)z#M7`Uvb z6j}6}pFoTR@{p#IDKzKi92lTWfx9rT}IB zbB8&ej*Y=IQxH@-262DQov9MW=OUN6LsqY&3JRVuN3CGDF9E}Wp|`geENY`w6-{%{ z8jgYD)emx-&~$|(D9dSyfx*H3s?UXK9UL5vL9ntPYReE_cu+qX$a#SeF0adGxuPLJ z_?`A)le-`t&6GIX=Gk;-KUrFZ@ZiBKrd6wG?Xak*>7)poMKDW}Ji^Wy%|=%<37=fx0bYi@2fnJG8=Yzm38;p?Dk6xH3Ie7x@&6O!?15xpzptIs`0f-@a0Tto6%;#1C3PePS&ti)F z76Upx4G2{n1EF65kX;a3kcasm`o zOAv<;{zQF^3VHbN-y^6JHb>^>(ll|VCiuBz-%f+1rbSM?>G>Y33F~yRHg%Nnc`~9x zYip~{pe?J3>rpar+|v#uC;~4gkbTS1cJBdffV6a-8t=`FxAJY?x6bZbTFF93ow##M zF!wPHdw}VD*?fqMJmUKcgv1lu?#{}HvP41N3onY)<{sb&ZqyIH-1PJ^{YoE2^olxT zzUu*SZI|Ehp>~`MIT@P(y6#hZY_;>t%gfaZAir8i-hK|DcyX3U`V+;f76Ioi3ZQy4 z-hhQLVeAZ|Z#?q2*fAX(e$M*`4Vz>~hlk~YX~E%&!6d@I~;oP$d=!zGX#5%ZoH?!NH98rnD0%N+18;b$btpv?X3d(r~Hfa z0$`Vf##WZS#f8Z8y5fyqU667kxJ^K)N2W*_7L2M64)lKaj!UWVeR{V39-*&`_>O z1HSH}O$J*$4;mmWyv0H$VtPQ1Tt9L*Mxwk{PjT({6=u?KLwp733JRw9gC9Hefw@qO zpHdBi;8xGg#72UBAGUXan^1D`;~Wf7loan@Ro1qRR9yz*>yJ=iw3Horyg0iAsmxR| z>!;<+uO5Vf8@qs&Md+6s^N^Fm+BDOpm`SaKs$QIX7sR-$Q^{=cnbnb2XDT~0DQRnp|{=PXjZ-U}@gO=EX2XN*bv;%C?-P4K+ zeaXHRFm%?!a3pQX8i`T(Q))4pW)%{j+y?HE*OE$X5zI$2CGa=X1KEyqQTj}nL&LN` ztA(uay~_71NS#Dkc>YnOWY`qF&}?*djzr)&LG->v6Myxn#2L$!-t2i2@|J@QC8O1o zd4dCXvSBj4amSq4qR;jt_uIPI_Pc2A|&@ zIO)K|QvL(o>5g+T|+j7^F-KskL__GeI2u)JGmAgNL*G>;)Hy{4U!2 zI-s&2vKO{g7ytuHm0?8EMaWwyOOJfzsAoU}vCu-LBy3YMfw}Oq-xckPh2XxQG0Zh= zJ6mSH&9yvAa-5|pA1G~+f$z##22obd?QA5b0f>8&+UyKt!S8Kk9 ztDRAlqTzAG%0CNACA%IH;xWlkdvO()$rHH3`;ikZ85672d@zz_dxXsKzCL1SqLNgN zq`hZO{j*-`r|jFn0erK8dQdw~c?wrmOv5n*5v%1SA3yczr=ku%Ptk8J{iMu-niJvdNbEWM0g#cbOcfAD{#dyk{PZ?heeaZhOxGqO2G22^WNk>yncRlB~D_tT;WpR&sV8w#bbJVM^p1+C0O{@9c z?ONxNBO52gy((A^1ZI35=?v(FTTMLm+=3J1N0u(hfBXE#6Fcrys9v zgyHSFySnDMbKs`z6-R@9$g>F|ey-}s`VKhx*fo36L$gearRE0Eop*|{AXPMh8=x%} zmz8n~tdsoLh?8r%9b^!e!9sadi=Y5>aW&#lXVO^{3$r<;o44`^v=Q8GUN zfdsR3|Iz18`|9GCy$dNsc;4|bAu};B!~zM)LzpRBu3?=%4)^pmpUZJF8i|lRQIK@K zGgim|(PwyglU-AIqbYLIR50a zi!H7epeVXphB@!8#a$RDz8Ejh$7WFpaEy$V za-6or$<7lMlZo83!WRqFKo4~_KY8(Bq00QZEoX9kJPp90I^5}LX|DT>cn+0bmyU9>zgy-O@SL$AH4hrE7I58r z0z8x?VEFU_(Ooe^VFirAPGe990q3T9AeAAA$FJagAH*{dQ^1Ttl?pVFRVWCuhm@bN z$7-fwW?N1)lk89}*aU*Itnga`u#t&CPP>1vg^~0P=v@myojmm)SOJ}qHjYk-;W0uc zsE}%|qc{9}rqvHSJ!0HR1e^=bO@P3ko!Z;lWsZS^L-Z6(MZ^oYeP@TcxhEu*hy-Jj zEPN7%A(?d>BY2oC&Lto+isj?uQ`Apt1gJJ7S})@LxdbGs4<)%-1-RWNO6c`7^#zy| zRgC;h^ktK>5Glt>E@0&NGa+W*h!(!CM%J~O2FeCTufHOB(0eeM69eq*?PH+BC>R=M zAx8Tu6K~b*Zv8Oodxpga5^ResYTQ73Cao5xuB8Oy-2!h9xSzb4`6mldyowAYj)@%) zaD}$694xSA{uI{MeEo|P%y^I#q5W%|f)V}MGj1^(oW+-{h{pU0bslF{q#=a+Hy|p) zW&IoEqAVYCES@ol&J_8QX?U=>bB{gE(Tj%>g@xt{UiAC76JZ2Px>3I9Kg%6}Bf{}&R90R&8^ z1=p=P8GpEd@AK2ol}Vn*3k#MG*uaX2csokei9lvW5^IvIhFK$t0v}DjGL5z_7^ndv z04WdwKw9-D9aXPfaGrx&m}CE<@J?StRsQ;+-y$?!h!~L3bdk{i{k!AFBlAO$^QCg6 z18)M^Xq+}?jj~`VuBUY*DWbY)n=e&qXt;EVf`T~zBGHxqGrbSqOXY|GHrBq&Dsx9C z7+95*U(@<##P6_I5HSX>kEGgTkWoFjWL6do zz}}1nas?0_v1N0*7(sUi_7K_%l4)!t=*~) z>9fyD*DOE5Y#}tor-0Ae)85i1H>UE}a~y^?@NjWeUmLrZj8|K#@_VNTsDiVJv2Hr} zOF-(m{0~#Vh3Dc~7c;bf>`JQcFH_=K*f;A;WVSWX!xgaA^=mNTU|}i#nwN=GF9{Gs z^p)hE|F4|q@2o%_2n=bR)@-b=_W}-T0y0*Ww(~qKzy3DZ;srv7lG!Cd z=x{xPcWGoEQq%yOQh<^vAmvsGj1TQL?-mm9$c5>M&EJ4t0{Z36UIJfdY;3$OrjL2}3KG1?Zu-11>`-1Fp0QiGkxyd zThc||&Fu*ESGw4&XhF6tlXj)#vL-_M?;|xWt%7CvQVTF73yrB*&Xj*bboyOv`0+z$(Drv!yrE=Q)WDG zEr?*z}MbK(j+b5R^!rmEiu+GAo8a)8$0LxzOlhy$yQo zQ)J0iBNaleRH{a^DN>U*j{HMB*8t0lpP<25xh@Vu1o9dwcuTv_2ESfx;(-MSXa8w zLa?cG0m%hJfP|MoFH@>v_Pw|R^T}m*ArI6VmcU~~JlI#NE;dE)wV|2r!LQU#;kIr- z7^>-7ubI||Ob>aWFXaM4eGCZR_T9Hu_#0U=@F0-|x7CP75^>B{YDnty!0-glmNcZY z%fXW<{5A?Oo|`?KZO5edip1(PBL8{&g{e6he9%JYe|jkX|D@|rq5gkC8%7k}XbJm>`E@q@m1&-kz6 z(igYgth0^*6=Tr*2Py{(%TQNNVWe<(`H^;~`JPpRFi+n%Irv}9%KGQeR57ggE6UNX zABpmfyf*=>Pe;Mmx3==5Dgw{%qd(dkJex^&%wTDu8QJflU68rg=RL<4;e-Y^Yd)_5 zd0=v78`I}^z=F^H?N!5f>yGalE^PkXH?mh?5HK8TzkKiQuIlfTfDJkEr_VG4Q408w|ji<$&=*b@v~LC<6`yFkJq zc>;>t#L9f;3aU6XC~4_(387uv>=)QJ-OG39ytX3#8x%8mB=~%Yd$W-{UqR3eB*vWg zXARD~>|<`4b%|*eiuOUU=ij9o3qx%4nzPk}PF)W({_#iS2mfST*IMcy@sIPB~C!+_A@&xAh>+%a!a@d@hSs0T?(Ux!G!Kjiomd(RT z;hvcvm!ozVDNH7+hk;>V;kro+4;faghDFAGQRtob1WjJ0lOkwr5J-;%pgrJto?x^) z!?uEi42LMhy9AH$>ipTE5p#j$3y}LK{F#+Sf$kRl>FWb+784hT*veps0k|dWYQdI^ zB~NJTuV*dA{NxP|Z))WN2xDGdio+oF{QOZbbv_8aXS}AdfmZ zUM_1K}3-9qPY$V)c)6?NrhesPqZ`)7Mn(-Ex|nc7Mc zgYs)W_jo-GY$&f!cTVzyAVz(fexGVw!=bTJt@Og}gC z9JzrJZi;!($&Orb=gbADib%&vwe7sdlF$9SagpxxpUIr}>?U6^8LC4|kPChL$u{}! z$`6W+xZ2A*Z%%wy`+tjv_>yF7f|T56e5ZtxzVDd0@B(V!HGzOftj+vQT)M*T?Fvu*GnevFb_9AkuL8iunBHwuWj&eyUyQwX zJl1{x|8E=}$R?YJQ1%YlGpUS_O_>=bB70_JkH~0{lrl53XB;+J*?SZj8QH$ich_}& z#`XPtzQ5o3PiMEzQylN(c#X&N@wh*1>FZ)2HSi0S+>y7NJbD-S33m&3^6wSwLnBXj4X zR85y6r-OZgGR!S!7wtdz430N4vKWdBO@XVPRwM8lt5D-|R<)k@x)F5CE2uvFQ&1FT zb{v5cgNU3pX^NZ|3t^O;AKWP=&jx7uAiCtJ`@mp>V3b(um-JC;-Ip!4_~N@{+iz3z zxaefR5iQeN5(M5xkq+r>2Vu89-;dd}4`#Ma+`oH&-R8t@q>6WOWEB~52rr1Y)K9Wd z>7D|(WzgYLG?V2TqOeq@X-j;Pq+Ruy7)*pWD%>ugg|@B_(#G9PQ@3@u7^zsGX{$6p zrZI6WAQ4-q)uz71YE>7zG4okBD~JV!eNDHq4aLcadUc0VbBJSEB%tgPjAyFKPUT}m zD9;qpt5__-wE4c1f9Ld|Tnnz*(B)a1_m5Xcga^M0b(<_1XiVLabHn*foj_^N*rrRA&{}58+r(*?R z7#s_3;`kJ;0~SJH8?e9NS0An5#*1gq*JN@a{B-{Pjg+_2I~xIt43vyVdqt?DZ>De&s4=UOy81Rev*z#U66T-d6~(@>0=suyEh689nK};B>s&C3 z;MYT)TNV%S$Dunn-a;d@i#HlIO_(FZIa}0w11kl^h$}wA<|L;fkBh^->cYlt92fp6 zq)>*@ep%EbuO?`-at}6UCZbi{U0Rjtr=2XO1&@vbYYzM4i(1j2cCa~F zP`BJk9-nUz^3v5|iaejaw;AA&SJNPGAkMcjNBN3t!`t>j;4R`L7F(4r+)*VHdr})6 z?%Dl~Iot-8NjC2{7ZSqVT)y+IDmoD2xZ;}fm(j?UMVfv^ulf;H1pgTU)qFVUm#BG- zJM%^m)|)$)wM@ixHr3QeVG2Vuvf;fg6w;W@{URFQ=NSh0roy9nZ|_Icl;TqPEOO65 zn0?^W{c4icetVyFZo<~Hp80clmpWvrdo zx*5bTpfh7GA*8bR^-khO1YXJo5p;{#tYX-tlM3#A6qz_2U3olj>0VKJzip=xZ#6@B z{;(1M5>U4WQ~KT$HE@htn-HSC ze~(o|A4k=&`D69g1*=5qkVnM~i2KgAy)96QcH_1E<#w zFH{ATd9;vS#*_wE-RZQW5J?g^R#7T zhT#TN_)a=cs$Q~<=jI8$bl9WZdnT9GuPuM^w;*Z7k!+l$7HkaRe{zeOI>m8nhkJvVTB$=w8=v5p z;ohvaI}6Hja*l?Ej-W-Xtttt1l&MEFqg{~QdCNtoqE?#NnqM-A2FP$|sAbBTZ_0E- z7k4mwZvle^d1YgR(jHV`W|4pWjlTweo%I_m0u29^NQCGZqKuvj@K9$m)Fz+hyTfBS~+(~kiFb9Ai~x)B!?xASWdtOEV`a9+Xvn@-cN z6I5lhR%w{uOull?<;gwCtQF}}S`b?t7eOb!UH;{+Z{uH`IC#(*F+}ZVMZ6yiKC^pM z(qzp1>^mR?teg{0mOSfn{oZ+%NDF-fSV`ZXv?~2bZYAq~o6-|y5ZBpxBjxIo{0Edc z(w%D0j;x7t8$0WB@1@<7qqQY^}Z;5dCI`bl7A^a ze3dKxbm{Owwx6hT+8>v7>sYEsswu_zNes{| zH2%^o?vddgY}ahIFi=S~ruK36c66wN$^Bm(($YXx9pcxxUA4A$d@vV))BT-7#CD|n zfu0b@5ga1a1spfI^)uH15fuv-!y0g`+A_-%Ma!x5E-%>-G@L&$GZZ>NJs2%fJKVj? zKzq@7Z)3(eru=J>hPk$Oyfua3b#ZCwi8YH)jmwl_zM-_6ky>qV?#Y=ZM?S$OcGVi` zS&LnU*W_m^E-PG{|Nhy+lNND8_>r^R8^~qf&J;eN91XmzkHzMhgOmAO(8*%_%Ok2> z*BRfVO;tLu``7-pGJ4$VLU|sduK@`pOJ4EG=Jv)pvs1atmt}Y*IHT1y$23j!boA3# z-fE=ZDW)!x7HnAC{aMu8tBHifx(UPTiE#x(0NubA92LNntiBGH`{5rt;2UQb7uUbR zk>F91p8G4WpOm7?(%O)eQ5e@3cT z{3J&fCP!J|2!3i$W^~)MxcM}GpnjxEi&P+F+T6+!xmtH_fThrDy~9=8)^;>EIQm4| zcRQ@Pz~Hh?_w(zIKdeT#yp_*Ws5j^=6hiU-a-W@%N>FX zsJMy=#Ntn>o*W5nSs^y}gcb=?6cEpKHs6h)3}}z-FlWmAlX(xHD?EK|9j0nC zPG4ik9#q{#G?!tZR$OFbQyj`S;hyq6%=35!f@vGzVSxamBqb#^k08Brb9oqyit~U@ zfCQ9lqJO)6*LdEXChJ$LcRc`Rro0zIi`;<}BVz!T7w|Xrck98Yd07GMcu2~9fHKa< zOZ(kTr!QTul{=NjsihlnHB||vuM3R;i1)r^V6oEG1Xj}0@iD|3+reKq5dRQ~QipRS ziUP6dcnl&W6<{XI0zaA%L_n)nUIbIPfkOPvM>nO>z!-r2%9Ua7OAr{j^P>sz zyXUnM`TF{PgArcU%4py;x1gX_!Nc!`@_&fO1On^V>rPEiTUuI7H9_t>FBFCWdYGqO zy&WLlNOOlKzC6lA7Xcdc??(PfK5B_{+K3l__mBF$1@vswt-yQ`LQR9~Cex zK-zpf+M&uJ$i?+D(2flcjkXgb>*^moLnnuNf{_~aI_+~HI&A!sh;oi4ZwI`*a|suPTYa< zR7wHc7m-wbrr^kVm>71J_q}oId#fxqTtkNJy!(;|0&mw@Peubde!#HoKC>D!jH!jS z6i6KWYf(~`U7yzH2R^da^mOF~lsusM3Hjj8S6A-<{2B3O$HNQ_1CN>qNz2FtCI-j^ zV6ra|hSj>_r-Rcl>g@TuUCWfq3k&RkJ&p%Xk}?Ec4I9`#p?kDI|Gn7-10%_eCIpzd zB1ubYVTppb9HzpK2Os8+*RHEy@5E*~M>TKn)|;47AuJ>n0al++v3y{usy5hu|UHuW7?Ue_{XY5VBfD=4l9l`JzRg{mJ*x zkdSsnR)$$hzgD>|N$pC0)#G=Cf`zy)KU{x}>VCK_sIqwPd=0#p^qKzfnN%)2ceaM! zpbu;Y*q>qEZ8})&`y9{U;jK7s(>3pY{=3lEL_3Em`B@UMf{oz z4B&##4^TWEN!BJ0oqzqoyO~znE4RMa$3{`NIIhD+u%f5t5OX5r^quyyjL-Gmb+yC+ z%cVckRp-)~UxT=V2*UKs=HDz~f%kPv&LkCZLZoLQ7{zV^K!9Twjt!WDouLFLi&}Z2 zLOE*Ev1E`Dn-Y}A;**j%z`8i()AVitzV{)XSJ(~Q2xRNOF7Aw?cF${XMaHYt^%*^^ z8MKq$W@vtgj0fk9cVNT&HIw3cj>Doh_OcFgw*HCpLF{ibv@h%bCu#lP7xxdkMDkH% z(Gv&ZPYBKKuMX;vtZKY)OgqVSAn(umfC^Pk@-p@{jcz{vQZjy=pAHTYgnbNb&F64j zx#sL#1Z(d#W8;^#-a4cbk7l2OZNAA{{I$m-UEZa@>*wLqmgu!sp}Ma6l}zWH{KOOx zP#R~#FCh4&B>SNFcnSoxRBAu`*Ntx43gIb$8eakrvtb%-&nCdWQ&!HsA-&#v6WB!s zbArfPuEwe zD+8r5meyaacSr`hlq<@?)rz1{KC(|~M$k~*X! z5A7;kO|XmnK=u-XSbkgA@zxg>Ts;G$GKaWt-?VGimXw}|slWE>o@BK?2u3YoHN2~P_IApycly}f&!KGzl${SPuhpXf@IOY?zrn+thj)t_CP0exZ=RAO@ z;Ttec8lU%=C;vqQFO&+L_v-*W1jCs{1U$r{r+Oh-QLo4U zrbg57=%@eL-`hiy!R-!RGT=Q~ZVIc7*i(lWR&@O>Dj;txkM}%lIH(;xjRY*4qTzz_)~vP#b^U5i4Yb2d$FiM_~zfHDU9* zGlE6Z6JTv7B1%I=)dn{;Zha(y_NiZ)04JzvRK4XyI+29+=Ud21!2oiYP-W_E3=3M7 zh0S(*tN1Av(J?k1q2>k%zL_TCAYrZxEl#pa_f`#=)vIqs~?jWgHn6U5cz$H_w z%f*fZSEY;~y0stb*6jt=K&QEMnl@ zUn0MuuKv%HFFiz*CcMn}U{l}rgqVLbe|jRLtf$iK@XNG^B=Xla)5z2&Ye%}Njq!x; zgU8w#$e=&Nj8Rtsc>Aq^22+iVjy9)Q5VU9s0|c!Yc@G%OhYC(zC?3>T```l;u1O4F zw7)hi`^s3BMU(1Soq9(seRXohwx_avR7C-RY5U~E6@9EYauNP zd=DooOVPo!iO5uHWP${_(cP3zXw%tw+|7=kAZUg;hip$uuJTcT{!-)KM*J&X{O{}b zzZGcw`yV6Ax@heGwXElI8>QzOD?O&UKl6)|Gve(0MuSg$YV}TFdyGjtGDL6*CeqoH z`&bSXr8Y>2cCH|;7x^{2h6waK`~nyg62QU#Q|N~GF`zV3hoxc3*E`e)NOTkBy(yRi z2|3SSt1;EqW~HN}1L46Cna6gmY=bQTz8nWk_h)BjE+7tfODn69@AR&~dgK6o1`lUY zcjI-&(G-M4OSvL5;L_~efAh+-y1Kd~l#(vBj_SwDFWP-)y%u1UB|If2GncLJGF^{d zLrV2TQq zkBXe1y;~jUYM6=pR;#$=yi!T=++UFe>;lIckj2Z!rVhMXA2SNBZGK4Z{f2F*4F=Ix zU~@Or?xOJh@;M6dZP&qcfAS?0U685SND|`*bgq(%<4*}FMV5urqu0TWHy_IETe$De z^$-BvzrmtxWPdRe{Tp0oR;EL6OYmWyo0~&03oXe3OfQcgl6_v;kcOaIgr z0i6Yzg(6o5F1euX?Z*=>!)AWG%-$OTCoHVAkI((wo8837u||a5(16QJSH~vqQ5)x* z0bBI4cDc*aEkKwQTkB}CRlsVwXytwy+t>KH~n!faP%^)DRA%U{!?pM34iB8^wqV(3Zju&a2k#; z7KQ7y`s(3%=OYCc!=DRw%})sl34cM7`z>ghgoMB6|2!@I_Syd7k8hcElTV!dD&Kur zEj*;X;{qrp`}Zh1Qd@ZR70f~+t`{_mks2By=uBwq=-{T2(nA?gZHtPe`^^IM&LLkt z+5`Tdu3_?6gx9iITVQ)j8BNL5B6HWyRh(TA;#WVR!Ob(Va~z$o!v-6T1mTp){pzOqOm@f3D1mz~??QoJ|lbz=;NIh+pB-Hb63C z6_^0J&9$JAwS^&9_Lh1wqgZm0lpA_~AO~i<I#e7tkele99GbLuJo@A{e6KaTRZYfGm`Tah8U+rLhQz#% z;K*sWU0*$#PSUU+c1W(eeA7b-D~x;_V>(;>Onrp%(%-A$4f8*fFYNvQapNMDH$6&C zbe`|Uex<;1QR;dl+tv0Tx0NN8i53Yjjz#Wc^KwRgbO`R`uOrT4Ya51xv zPNnAZ7ohN3;`=(4fTf+4?*6TJ)Nu!3}k{@6= z4<61F$v>6I7vq|HyZz5oSj4~ato|1}>wkIZCKrKL8Sk;RsCMJV4UkRf5mP&V^+q6) zM?6S{_rUfExc*igjgiA)RZIczY7J+y*?>FKmlC_dPvaKcbFc$GhtHcy`3?Xi^$Iy8 z)ZxUx@XtCb-9o(y2=tL+z-yQDrT`?;ycV+osyoIRQ+PUu5_$K+V$A&E`u;5DP2HCY z(O6Jm;*+XPiegUhnzj~ye$l+U%-?0Whxu`vlU>?1bX8sBbA|MsJ}Bj=*d4WJ7ZA{l zW|rjxo@p%ND#O9SnFljYBA7;-j^;)H$BXoDy+iJ`APoL|K{q6b=($jXV+rVS5{vO%&ozX5An(ETQYo`Ia0y035TWQ^lnXrHCf zv(QkWZIr50^PBQqePZfqbp~R;+`tBYfx%q!>4AX}J8+kPl9xNw^!eJ&n~C6Za~}IL zU<{wBJ_QjDZfET;xTVFFb5{rl|x#G_WG1KDJVOf(qM&`b(@|EUA| zFkDYR!$rIUWC4y-z)$TY>xFLpS^{X|LaKd!-?4tNbySyYwi}SnSo4saNR&qp#fY4;fi=8e!b4oFF2BPdmmCUD^d#_L746_|t`-u!S zCk|op`_tj4OmkI)Q=;ORPry;PeR`HN3}0&Vd>-V21M`wXdu+gNwT-IE--4c&^^u=v zv6upSL~BW*qOFsqFbTjPUtlEl(`{&mh|YOXd~=t$mqj4m${x|le2vPl7yE|_@2aJ- z%}_8>{{YF@7e(f9VPzM55Xmt{U|TzJgs9O8qMG|ku;Mq<2t8nvll0o{vGYSr#o#RW z;mOxX5mLr&e15LAC>Osra%lomd)9@XyQ?4NS#W4Axn+^G4@Dyk4@JDf-iNdwgl~ z(_nUbaK}d)LAF>sXdNCRflKR?jaqoXKPtad^Etuo=ci}1+yvkWTEPk-f-F zHNxRIgG+=rz1+JJiSbt}djHIOZ^+(Hk?{CcI=sz4d6m&jZpgdd9~)r;&wsn}C z$|r<)S;3!3Ake`3^x;Sm()XBs`1B9u)E0Wqr)jBn^+~2Q^k(#}qk=w1!L>Lg$jtlJ zTICAg)~O(l(-EnGbuIV7n>v{LF->ZCTjy8)V3UM?1jdhpOSl zPO!)z+%a8K0~%rm0Z6B4GbYEv3B-BnFx`5DcxyQ% z95PpJ@YczF#gq8W@+Zi8Bk#)2>8xmh_$T(HIoioBBSlH`$I5H?j+wLYc%0Nlg(>HhW470|R z`gw%hTMo4nu?jh6b~3VXd1Q-|$fRa`riyK1x)!J!+UQaf9OYvJDaYUnt*?Q3q-{ZW z<5kbTOp|}lPq_AcIHeJ9sP~HL2?BRNU+ZD;l9E7hzEI2IqAeCaG7xC>KH6+OsB>^= z5<1++u*EF9%x(qeD`jM4cv5I3)tv6PuYQPonoa2QdPNAJQ61r7&k~QS8Qa>WvdbAn zf5*=Df5?gp{Xj%3rTy)8!upgW(*%8~@DU>(Brg_5_+ zp7Q*Fsb>lQL>8*+_ug#t3*Lh>teMXuxr(g2pXQ_XSX)x0rX!fmdNH;~prm*f`M(!_ zDMxESX{;)%F1Ls?!m(W;gmcF`j%|(spb=EtbHyP&xI#4Mk13tdmQ-X|=BJw@Er(Il zR9)A^qs3=H*bDVAsSZIl8Muh$x1N)Ab5$FOjE-<7Ljh%0`_#1$D{KKTQ z4QGWM_VVjDqbJH7rln!!StM!z;SENjUIPQ5c z`?yt$1rl}~E6Ihs^8U#a+F-PGt0$E>h^E6o4Z70dsYSO!Q*timp526uhcsAeK^~-hB>)_zuKD-R9m;~i`C+ZaZiHj zf08`QbZ(vGv?YGS%SX<*a7*&VEh4~p(xu<|Ak;hM7#K+$=s5%&@(^LxObN)G>H4#_+DRu%^gkbC* zN`DVe`IO@2E7qo0wH51+DR`R1#-@|4EVA?Hyr^~09xmJhgcN!f7L+fTq|;dW7>ICgu~Xg!|4dU~`!?S)=v;}hRh*c~lm<~DziWh_uc z^Ty`oMLjY6=C;q|(*_D5WH&4J9w;;4v?PohQFL2XNc1t|I;=5HXkW`IK3VD;FdZ)1 zagDNIy2*Hsj)^rPk#UroP^zzeh|7xTWN=?KbYuTFRnebm!Sfw;o)IA0`%YoH{kyE^p zTOw)c`ycp3eduIgs`MWODv{cp&5EKVN@`7b_vOe(h}nOf2-WhiE3KpA-|pShkTd|@n9 z=8O2pCa+M32P0YwD*e)vSA+UWn<;RPKCQ9cy0qyNNO;n-xi9*_$okDIVgq>?f$m_J zT1t2YX2xz74e~r&WyWzRDWdKAnsj<6T71feR$vd8Qz&UYjn{qZCDQ;yq`ctXl;E_a zukc2lE?x90XYG2VyuFSW(ivvY%zKwy5R_!yaZu&pu4XE5g~fcbKJdu+NAJf_zSieL zzSw#5_2<8l9LIv!76G=^RB8sJJ7L*_A7eBw;>MUrk8J73{+m@iDp@k0nE;BZ*q&^$&((-sz zw45G_?sg|Z2-XH-NM&|Fsi9wX&55N}I^Ez^y~KtAyRZ;HZF3+Nu@6eH@tny{_O59`gk z3y1|bJOLdlp$GVkk@Cv;ZjlmF#O}V;JdHy^T$yF$I&AfPXwrEqMGnZ@GgICSRAh+y40bL6Sc92tz3U+H{v`l&qk2HBdvjwH##SCiX!zm?wR0X zYBLM9_X)XXM$bi+g|}7M(ab^$NfW3IkLJzBC6dDsbL@f|hbh51zxTj6CyK7+biYO9 z)TqPUQli#PB)R$8{8QYONq0ruGm-5|X5zT7{Q%HF1=_f? zx)VL&9R4br)>8a9I7g&xSM8;2bf;@teP>bU)H!6sk#k$IS?wH4auZ7!M1)3K^c-B~g(FX;BX?Eo@nnql@)grf-B_*0TSR1&Pw=^f zl_S{%1kMBzZKkvk$V3y$Xe2IReBYjORMs2k`cBLzgM;hi&mS+<$+{a~ro?4b;x(K- zV4rC{?{l#H&7Vm07Ax7yLS~A@U>;VSW1H6=A$T8BFNB>A*PUdw1*!Ys>{oW*Pmz0D ziE~o~BPNJdU6L-rFv5@awlOno!tqvmLGu4G zUP1@x@M?w-Y?X}!?NsV@SIMe;)2o1Zh77PV~yvo3i9sfEL4B6*(ea}JU3VTcx6Bsa@?PCU{v!! z<3?fSD_3#F5M$9>)jqhL^5)-$T)zHdduu_5I+4x%BKEUO4{d!<1L&z!Dn2R$H%hB} z40<1rL1YuDKOPcQ8IkTp$K2aRpHpN8?2(AWcg>Z-q~Mf;xF3ok#G-N?*6W&nlvbly zJ-XDNs}t z2BlT%6&aUlu^A6$5Ot-}5jT)uB|elMnCS*|LOixT7*)ce4*h z#J6Mo0i-FGS1Z`sufs<<;Yv|5=0P_UH|JNaNrH(xX3%X_eoF*)7v^cvIWfM!9DJ=? z9jGKKa!T%f4~h6hkHWyxW$i*RBya6NC$gP?5LT!E;ut7f>I#h&4jbbYE_p>Bps&zx zvqS`UQuBev^6ii*SjHcJ5xTgzz`Z)yc{xxJrH$zE`9TeI_$3Ip{Da1up+o2;zM3{R z25qsqhNbP^6I$>HFiET+UdJ7R?gnlSnLfFpqV@Aa@h~AOvhJeieE>|m7saN6!0$`8 zBfwE?%zUT2;`ZBq{H%*gET0MZFeTrLLg`kqzrRBoHnstnf%kX8(v{KGf)+7*TOlbd z-0#ht`jndz^|psaC>}x7k>F#CwBBQZGQ+o*X}daAu=L{w1_sV1jXtRz4)?(lIZX@}p1#B9psZkk8DcUymZXj*H zZ2Rbg!OP_s45wK8QE|dzZxiaTnMO-yar8VD&ImBBn`3s4~J24)rt45zm{!QBUj)t z@m-aAH~29FE`7ff`Lt!FK_)$hP^lPi5(v6K zv@nZ2{%mQf(q{}rVjY89_9QBDq0G~8x{zJF-!^v9YKgk$LHN&$d4Z!TFLus51)tFR z)-4;q;ky&)vDVAEhMdOI@yZ2%h374r-yqed#=%En4-$`v>g?A0;vC@IlT1K%&gyQE zJwpnEZ&U_)L zO;bR#!s7nbzHBuoZ1vJEO=g~;E0M~L*4EY)A;tn|{#g-&dBDg9?j;5)kjAr~;!lvf?WTwp*go8Kz= z8hwEaU=t0Avv_nUkz()m3FOHzh&w(m{9n}nH#xy8BVV39RecOT{G{0*BTDv!>*`bN zba=bpC*E^I3C>AIq974cCHRvpdEfv^;2Jh&zr%)3h2BrB*#d~(Zzp;-*FqeeA5dx8 z25@q|3WCpCG_+J=pp7H_TZYf(ew9!0m3L1(naXP=6n&}{JO?rR{%>yG-wMoR5h?-n zIoRGbf1a-B8dC(wn%sp+%?woQICb?CQQb*k5M>u3fzna}@VHT^sg1r}nEP)+ckJn@ z>(ew$?e;kdpP%o*u*+rQx&1;I`V?k@ytuzRPly2)mlqE>9$BuBI-H+88UF2@T^He5 z3as*lp$0KB{0si{fcQZg5s|6DW%#H3fnzXz)!umeImSTlzZr!unA%rozKb7< zzO~*2PlqMsNra$CwQ41!#mUt4^#m3fQa1X84h+m+p^3!F>t5jCuiPd&q4`gbW`8lH z%TG7>RPEdof9zC1L@%ayWQeYKOa?B63JZ|3?Ol(^$QoLr7_wmO1n7D7;4%DdO_z~a z*tCGzL`k`G@ci;^5tbWjYM)1~bu)gHfv+9GJR`-p)^u@kQefNlc!g;3(1n_HwL5v{R-Ww#ey)*d2YgC4T zCW=zD5K9_j0LWV(gFuuIA85>ZGZCwEpavDJd|ji?W??O8O+yX9qgwzL$& zKaBqK3xIx?%A_+lvG+ z$*#C+FTtqUR`^nCI5z@sI9}0>*_XdOJK`Iw=06^IBtypjZn9b;UwXo7G=m~1^I~ewvdT%QG+(Lbok&#&_ z3q4kija)PpX<);5ZAKuZpWX9peOq0Pc{m4=GQXYLg^m|v<7k$IHBWrrizbs;$x5kfi=hBd}?uD4?>#hTfM+%JKAy_ zt-vgYa=`?G=UGSi1HM!rV`Ms^0NEM&8K9mnZ2xfKq?z*h^Q!9?lxe6z&ey8ew7<~L zwx#tj(wtnLMJVruq1i1~*2>4afZ(Dy&z@&ko?teor!Q(m->WnZu9Xp(+Mc7Ler|Nj z5A7lDi=W@y9Jcy`7sEkEhV{0hUvH}6Q#jzwS=j&cyg-*KO-xG`U~Qo&C+BZ{iM*4( z_o8tM3z-i(F3uaNgqFikr=z+#uR<2~-dseO0oz;|N*1{F4Uacu3{DTYEJ=6n36_i;E+HX?C% z72T|fmLUzyk7#p$!#mQx23xl-&5|plV#_5-J%yWE@rAynx3F&~`E?9^tLb4G+4ZXK z!1GV`ZKf!)@~?l-gObCz(cNsY%9vt62g8V}cZLO{1tOuGGW9pi>(cxEEp|*I>u5AO z^&y*6iMLPky)!9N9j<`R>KtYY=&Q6{Qz6X5kcjOchX&_=92!!tZ(}RT%8C#h?b4t`s4SHDRes%*FfGmtxInudU=iR! z7PsH*8u>dING?dAv!Omuewby;C^OAglM;(g>dzX3hxt`B8|I@1Ub%m zL`B*|G;v!D{R$@kgY5s)?!USD@FQJT*@a)Q-2Edgb$Utq z^F}UyeHob4|0(?$O~RGTQxKAG?`(yn)60L#gr1DN7$BkIBR2aFGZM@eXX({jM1*KR zM>ZfeE~WC|zMLQ5Z89XGV~wsy`lRkGl`NXWukg9~Cl6cx)(Yjd7w3t(e2E)iu^`GWSLwlNqZcUqEZNw=6uEoLBFK~H9 zz(aZA0qsoP&fxA-hvu^q4uPLona-+?!4?5OFY?!HYoD=)pQ&#jQcy&8l&o1 z${np|LRGF6VBf){>Z)fIvY3t2i#!LPhI)H1x?Hp|XU;^BamcXCMn{cWeTc>mQiOo_i|NU2$N>zKpzxKHz>Y=j70z z=$3qWK{216bFvm2_Q9>th?y8Ry4k6s#Jy4n-Ic!(sXXS0(K1Z*D=-?kt&Lv>YkoX< zuyjWh9gPMWm3yIJ;KB&vU-$(yCwVkbTcCgOIg%3_|NXC66YO6FFrY(rPpQMzVmJG< zY}4lsWGhiJ>5&PgC-J`GEeM^aIpoNLUWlOOFA_=y(CTC@=5 z9UdZSlrE&hAngU+j=NU*9w49#-4R%z^HXr`6h)eUeD~%1;_pRX@8+EQgc5~Ux)y&& zd;~j;XM<83m<(c(*4w=D$xrg_&{Ohwgi=E)1A7>TeInVO0J+J^&c;*|=SI}JtXFSE zqosiV^ucbg(>xGf%3kVhfQx%}|Q0pKpa@Mh~)& zvO@z}P(1`}Ul_GgtC}Je4pxA!O5N{hYm0+q?F6$WC-2=?Uss;zY*55wzA?k{tk`*@*T%>ajvmd&iV+WsVV>W;$e$X-AZqvS z&xK1U%eTE!X(=i9O_{si;U^Q}kH^Qycb1dyrQa_XA`@Yq3$fOcGarP)^@(z5mEYXj z>YwIgXaBk;Mg$e+NwBA!9V+aCw;c=l!V>5Qc02mpf+bH|=>P(j*$OYACLAf1Tf+q$$22PY#Y zXBU^9djvkq?Ia|REX`usbGcN@P7xM99Qe8Po9N5#SC|;}XpM9tpJR#ck99?HeV-}p z!sDOr{9GLUuph*dS|D6hG~ezqJ{Wd;M36)CYZ`g?9=}D@jzAlY;BXjt|Mm zumd&5AAEcFY*NKcNs2ntP4E?w3buu;FEHn}#NZb2p3S#UDbm`0yI8TVp}l@<&STRU zzuAeYt7;l!Z&GCWEZ?t*_{y@NVqt_&iv`bJQzb_A>Iac8Tkx$iLBHZZZ!g8as8K?- znxRIw9`y*&MD=8m=OM%Wal#cIr}3-))FATl8P%(m#jgIbN!2&C-5$h&!|GZ14=xy1 z*)kU&Ra3@SA3qsMaLa#V;uv^e)v(l#9Vwl*9*zB>plM@SRCo#vbi*8Th-X6Bg_bAa zvL;V?K<+C+F4{~>LEA=cNKlLF3rT^u?BEF~D2PktSLh$ay*}K4Z*I9Dpg`S0WLuokEqcugg#=0?1eebU+@mQV?^(gve>Hy&2j`pRK>=L0o+?QcY#(`NlG6<) zlD9{fSMc%i``#VFP(BRGc6s1%d#IHZ{0G~IR2FRQTVfK*MBpr37z9V=()tGYX(100 z4nH|!YFz%-@K5-#M4rZU7S8b^SK#jlNj_`vXJJ2CcmLY;oaOn386*D@kTZS-?Ucxu zXb!l5{KEI_A1n%*`I5c{8DDHL?y$@Fp3E)|$rZ&|sTuxuYm+gp{fT?M&BXWXrOUjR zKQB4f-MknMoVK>ckI%XW^&Z%}(JS#1U1ZfX8J+oB0Y1 z@;OvuVh<;I5W=3G^-Q8hA+Zj=Jg>RjNLA6on&!s^pgs;GVW?Pu+YQ@EObd!5 zW=0(e*iW@czm$|HX~&n@?thu?#s48Xeb%7Z?&CS?`LyAtA{hN#llOfM=E>3VByL;a z5h6D#=Z$IkeekH2GBW&}(X*O9+g^!%eIg@TpnaeV>f6>1tl--L6ZYdb3JMA(`TRIt z5P}E!1%P&QH^s%d^Zb2rwaE}1 zU`mocUywcR>7o9+a@?1n-fc$Zj2VOqTVizQn#ZoxbK#39yTZbFPa?@fQ=#!RS9ZlN z_83fBFW~jHi?x!AnrR;e-THY_(oa`eS=k>W{gu93`z#DL0}PX3pju-ngPLW;zT{zo za&{*{xkf9ftiwe?Xv!4$oYqvCnVES*iX6YaU1M(Fz72aoO`s^egD~Xq@^vU|U3{)D zLMQfTH*vb~nnCeTqx%dF@t$Jmm$-ia{=J>W${mu9p^H_E3=fZoX8SvZdS8J!D#~E{ zkYRFil7f=bMZO1n&-)xTwc*6@mq!*|+jr>#YY;XkfD7`5JV5qAY9`^%$^x}Zz3IqO z%~dcOSRaE-N z*Z0_n4s#8(>mF~0u0n{)6&WspiX9JwA zZHqFC`}VRH0V(MVNVn=18zcAR1w^m(Uj?hHsI2vLeZc5;g!Noup}>!!ytG|{W=Z^X zq@?_KcXn>hQOd%@c8D07Eo$ArGh0%UW4$%_PJwnYuj|D_Is<1H7xl8H2~(PZaH`E5 zk>2e;jil^T_Z4HGEiqqt@RH;J0aH!G$ih`(sA-xC75@E6#~i|Yh<@bB@!#}n%e3`} zlZ~pWqJNUo?St}$nBizrbobb9e-3jY=g>qMD4=MEFX<^%J}AF~ADqPDkr31tC`9`# z@%$^=_Y;Zs$(u>3>hBWVxPJZH4OSHbqurV&M`Hm`I)fXQXl`Kz+TMZ4#c^bGFjT;b ze?m6Ex?)4Rn+Y=7Uu`hX=hiDu0ipl6sLmUr{0o2mao>0R6|>mUaQs6X5F`a}#C=P~ z%Z$lWm9R6dv9Vc&9wZ3_4nu&OP-O#0=(TP@J>l_cY;X?3;edidc(>VkfVoyNGwzgI(}-YPw3#Qx>5WTUz;i5 zvVH6;rTUOa&P75L5tckPWq#d>r_V%kDjIuHbl5nvYq!PrzDUp!@H|U?9733} zY%>xb?_(MGXp?Ved=#oI-r2smjGJ7vHBKshOn^<2Dv3ls9XXWE{tstw9aiP~eS3={ zp)?{bC8#tAC@5W00!j-?cPJqZ5&{YWqJV^ScXx<@bW3+Ph@_NfKDhU{e(|33?!WfF zE;j;et>?bym}7iKB^bb$QF}1F&z)T4==ll6yCOEq0$mdRCoj1;7RbefUQ=Hl{St>Q zdBeZtA_^6nw)SMVRW3+!*5h`ACUI|Eg{bZawA)=dys4WbqzPa#-5RRV%K5M-JA4Ii z;dsmA?TZKrN$BX67$B6JQX?i6p`Z%D`4)$_LkOd1LTjcGXGCYm{0uES>Gtb~R%e~c z={BaZ5IBH&l!)k+4;+;1GgAy2!b;)fqodN6K-j3Ezn4Xx3D$1#3N@bvB86x!LFNU<{gv6nAlX06dLNiD6MZN=TSx zX++r>Or!da&}#BrCN=xf0YGwEN;FDKgm2$i`7R+YZt`-i;SHfi;!AKwYa|k%S-+u5 z7EKPc5(HNfI@$?|Kz(?sY2fZdK%J@d7(vEK<^+z+AIp{hbW0%J7Ns6lAO7)E|_A z8-4dYn5;8->E0M>*Te4fCOlkkmSUp@L*zC{3p({Cd`}?Mkr25E^`6XhYK*s7ODbx+ zUNJRf3yWf-+SAjw_GHx?Tyxy&hblR?ShvG;gk+7F^HI7Wy{8WhpqUdXS2+SFZ+rk0EApzF%_SFC?!KV@d zBs73X>Nme;N=KK*eA$Eed@pi7LXvDAE+K5Cf&9jSXgiLY6}IWhuT09os$V2O1viIQ zmfMisTivFDR26Un(t?nJGzU{>> zwo;ZIUij8i45#o=p@pn$jIZAUnJ{VYyBy>_mHZ+NpF3j7V*P*L)#jBQ6s=7Zk5@hX zc4}L0zI4-s_}ZW4tzI5)3g;OrTHPjHGI0Q7fhX_`)oIEJRx)DN!NbopJ+8%Gct)g zTn$sdap64d?}~qauEVg*d<=N~@}93{S}&jb(H%V^mskrMmv5Uz7&hE(>B8Fjwpreh z3D@CNZL!n-A-QeHk`(u&OPH=$96mo>tG=i9BpjE4p|CKI(ZKF-ot?egC3fCgh%j&7 z8f!#oAcqqYCtRz>n58|bIP9h*!;P?h<_tn)ybL7%l(*MIa21~}z2!+Ggq9$X7d!q8WJkB zf;$8Z!*ZodqC=UgY+C4awrwKXey6U;GL^jUhUFa-Yu0;jYy2FT(WJHcNU39>)jZ@rtaUSW z7gJ2zccB{gs&xt)KY65v%f-PE5W4hm+^*MHmMO$}rVKb#CNZ)VJi>ienJU?~8HD;H z-LW{rpWm;Gx_<%T)a=6+sH*7^yj+xe(xhz`)MiEjm%cqvZ4-FWU1@KH{R0cJXPh?b zx5J97Prw&R|JqRooC6APqG5jft6vv-tnePU!-JFmkYtBAD*&J@o%fe6cB2Lk8kbuU z3BU4x-|YjJ@s($&ZE5VtK~*ddQmXAKjsg6;m{RK9Y~Hh!7c1qztUsSJc3b7p-rO`C zK3kHevFiRg+KA_@JL;H~kqM?j;A~uDZJFo%Gq?Q#4a!)LENTCnqlkLAso*+`W2Le< z-uKaW8@)2ePf7@IgT5giVsiHrsh`&JLt}s9WVrA&7q$?Aeb9e96|M4(J87{ZVW^4m zmJpknvNCRCY9ncxb;}QM7WifO!aHgG4W>$IA&yaVaOSr+rB)!kvs9fl1;fmfq;(Mz;NNBG(q?k;?-wX&)i!&cv)*sSsJf!D2Of0<>0Bjn_FAk#CJ;3G#FUnt)x%&TQt1McKKGF&inam;h;;t5M*VsuVr$8;>Bc` zfes%*bmSJ?_d?-rgYXe{Y8GSNpFWJfO9LBocB()y;z>OG%twzTb|*F_sw)G)A_+HR zdNwwBm}lqUPltWJXTMUiMS=8_H#9azlzNPs4d#S)3I0B=@+BRO1tQc_L8zC6`~p=0 z@DD+(teIO}j2c`8>;9N+pB#8+*np++6MEpKfWPyO1-Y+VOu@^NCg%qe@dN4Jt1MK+ z6l65jXqq%;DlDO2Jza(?ox}C7@oDdVdI)W-hCXJhn`$r#Be80)ROrKO)eGWhKsKJD z%5t7wUUnw{z(FcDlk@TvKy=*kr0$MD@HfH?C9ZInmqxn6L4WQwfF*JWlpeQ0h#kQl z1e@hntH8yV7LM~Y0Uvm^OsW2xyA<~M%RfP0G@j{~CA(und$gaT!Qa_WT^I%c8#eOc z3b-pP6j}wMdVrGK)716(-k?itK8um4LPTgNebgPRtN#c;!HbYW+II2s)unYLs0hg| zW>Fuk_aNww4v`_xQ}ch?%-;H2u;Oyt1t+RUSQn&qFIcO3FQ}wFo6Ijwj*Am=adl0G zmz5}MUbFd}gruYl=*!%*m*Ln9g)*Y3!MfEUNT&>#Af-SfEl}fLK&z`;T>DIAq0YK( zrLtTKXoj#mbSXE;S%a`y81RwqMt6u3K1U{zE^5ylP?Igl0Owesu~~;s^}X%2!=J?e zlsl667ou{-egD3pW()+K3PB77_$e**5Ri=$xzfMwZ$DkQD1&fqJ|bM3`LOcHe+}}h zs29K0e$@<+3??XB?M;7tgEE=}mJz?ew$bh-qYcDEKJ5nf7c&iENpfEB z6o8rvDF|%>Z$WdjejOqkBg21Qw?I1q8-;(lAQTgx<1yP{>4-c6--i~g+{yH`G0vwI z)RCSSg^H2Pqi*8d1pLzGZ`@`B?HkrcNV~Sd&QebW+pBg15V+y^;COmDy=i*8EvvBAGR`uGYoKFPB?9xZSN zF+73P6)QNZd)?eXMT+E(zHJo9LsJhEOOiW8l9jO*NE@tWr+o=_aPi*J=1_00o`uDe%#+~zikZwgzRPx+a(3y zSvv2yQHUn$HUkNg1~|U9OTh^Zqe!Eyla$mOWJ&^e+dNoaxN~PWHdvvi;Ugd(k#=5z zCg;uS)IrJ~FwI6F&(tQpyx5y>kh*LbNABbfLIZm_GFKd8W(2xG$-R>-{L-3#f$b=P zLes?LP11FXo}Vx3pis>03sHe#|D#*X&4XlLtI;)Sz%11q_HGs0rk?SA+apN7aY&-- zHByP#f{_Gk&GAneUbo{iE=aL5MJf$|duebbkd^?^;dV_bv3u10)Pc0ll&bAoQbU`G6K_GGGG%ai=3-poIcIvke(5p+=17 zEQ(K@Fmi}WCRat@*m!tnUyNs?{|hcz#T^1GDtF!xN7lUO+!8M{q5Juv^D@Q|s0FNP zJl0T(W_WTMRDI7QBjf2L`e|!Y^L1LzmVh|Fw~;pKCXWX5&3jub##=|n`q84Ej919L ztnN@xH<^DX6ZO4a_IA^A6)r`E22}h|MHHg%znz}CAKBti;Msmyaumoe?9AH-O#qwa z+T^D9f{D-vZbt8cjsnQ;9;##HFPPGKY!Nj4)02OJ-`#ooF$+DvL@yavUBrg9> z@ZM!jIGR-^x}W9b)EvxQZqxIYNqkdWg14a1e>+Z)Cek1t=1Zp_Q~JZ33Clxi1Kc35 z!n%%$GTX_j_M~K<piMR}SFh3`yQOoabj?%?UbX>pBs1kUUSX$z6&os#HRunWPA%)8$ zrB=CKv`<}kl`Txgsp=|(Vuh5xD_mUb&kWyNMl$rO_4mv{1Lf!EPkvVGR$xBNDJ3P< zV=>_M5{F74>xitsvI1wR&Im3mrjKpZ)g$C?=e}r%Fe`TS0R=^EPOLCIdy4g(Faq9~ z{&`4)bklyfJ1hwUwX2GkH`fojUdAg z;Dxcj9R#fMb2!6CN^zUM2>C}xM>B4gHdV+^!Mn9M#P8G{2vuaQ=e*) z#&e!~9GOb}ysn2I%gQQ-s}`CA6b!iPXsP+`-5b>;*h$PZDaztdnAMC@1bDPqlzd9HxN(Bouu^9k1`e!@8jrc3fY)`S|56;V%fgAQ@Da z5V%uy)cpo)XVI)d9h!~AJ6Zc-zJ)|r$jNtpRK;1dVH$I zYkHQiD_-0Lj=2OIBMlq&^HhaCmh!)BP+njP}zX66agWLpkoZ-|6&0_;&6LdUI^C9-F-Q9kM8Dt#+B7+4h z@xr>Owg?e!(?>1%euj$`drz{k(-5+Z5E0Qyc zG6kOKnbvwi_fOxS5Z2kaisMIfW&uLsIK#s5QunD~nM@=kdrKC-Utl?I93B?G^b@Bw zhjKKD`ggEFY_}f?rhfnt+oqv)R*_h*y=CZ{Am`e(E_^5`ZNPK39>AYo$V6Gicv64Zpmw7io)2eltKGN> z0Q));Ft)bsUh5aWallgXZ8~~t6stsw=x@m)wIqk1T#jgY$mG8)lpW(z-zZc zywD4Fe#MWS5a5qXXrOsF*NvHP?QQiprOwN$*>WM{FZj7yMREC)PRt?ff^D6CPEq(Akb?DAgzg;a^OyGK@$M(MSp1Er_DD)wKKUp^JcLvl1 zOVCyj>W&uIY5qA3-^VGkJx#`eF>qf4u2I9FdNfvq7NE`AT-razC!wW`ltm7_FzB=cASW!8UN2?b%exgLVh^}GKE z&J&4PA($bN`#VoZN>b7i&uZ|?gC9EMgJ~1$R+-o?5^(9^;Re!13wWQc3Mr?z;l@8$ z^Ul~4nB1!d@O(DMK>}UqDZXDmmF*E+BVuZ4BW`)0a6ZZca7R($LAjRx@8rKLehth@ zN)m%B@2*cz=@MO;?ee2+46>8sESgt3S8}-%<*5&Q;;pCxJ*Y!Je0V&6vZuC>IacFZ zsY1~68&@v>;zc7j9};t2B@%oM8aB4B&Ylb-7~5(^0~{o3zrx(BR+8vW(|O^Jl9VDZ z$o1Nv(c?g{?HP_3xxvmVph&AX(mc{%``|_LIb&>;?v`P75fQri?z)kSM3UOxjER_6 zQF?}lOQ`4%dq__(*E!Hk4-O8LD&^(a|K+Ia;qpfz^BEda%f?9HbjU$SJOK9X-+WAn zMUALJ+Yu_50j88}iuvo;?N*&2@5cM2Y@=cZ^w8sp3OIZ3% zPQNSXyJ?_q;;)klF=F!Hk(K5Lk}pCp-W|i^=~>epbn_35$0T#b#n;&4 zSH!1)wt!AzKWe`pZx*zYAB{{Nm$ zm>8z?76g3$zNw{3N=grepXMZO4rR18kd8$;NzWKmH&&|K0Bh@$e$sDN=i9yic`})g z!O3JxS`NPX)xoAql+fsm7?j)Q9l(EYD~_Kv#{v7Fvy`S?7Kta3c;3b)0$*4q5|s$L z#sakT-ll_c10$n0(3%WRkAH=^I_<8|L+Bc=&=^`hvp{-(5B7i&-bh!i3fuQcaTk?d zBYyOau!bmZv#^|xx@F-1v;B3Knb_ChXWk>s9L&FNOG|TWw4}@Fk2I{sG_}UBvtO63 z*sqZeV~e<9kW618zdvyysjN&P>~tslpco_g;W%q}NTMY0P@_$QoYTK@ny78C02Vo1 zyFSDUdao-Iq_pI~R=Vls>8TH>#hLYW7Etgki;q-&=+_{`khJI>cL&&~*pVRQ6b{Kitx!kdu$O_6=Ve79=tHco_?mum6erfDi;{vr8#v%eLWJxUqm+e(!Wnn5C&GM4Hvxs_^5UV zZm?fx*4XsFyuCY-8IemN_>{pQ*`4P%5z!o=IjutX`OYU+ga!v|j|_^_=L2kOvG{Ca zQ@PM{U+b9yN&p;3t$MKc1Q6ysFrJMT;6}bvbiE(mdJ|s7&!5xXm+>h=d;-5WrO76n zAInJx#-v+AoITMjxJqpT! zg=2s~z*423^N*iDdp9Q__5wttfITnfTeo^rjN#|xj7_J(tF!88ZJb%2XA!2sCm^3x z{E0)Ew}biJm637oU`y{%gV5ey2IINdzZ^n#3JvgNV??0U0-koz7?740f5}gnVyO?I z%;x&o4}lT}Byw|C=>)#<(lQ9-$}SFZdBs)FN7eiJ^mDf<{O9e0MUzjCwXeitVGjPLHCp;Ex3 zZ(rWw(@A{K8~pWON1@Nr(bxZV79t^!z3EY>GqXsQM(5_dBNdWz?Wy%m`&vu3=6h); z7e-5JWkH>if!nD`59fou^%w1eKQZpYM3ig0F{Um#p1^y6Q!Z(IUxT^4`i)<{HtW|mANelG|LZvP?Y_$=YBHN0AXIaK z3WQkx!JjoEb|1Qu)T^C}JLc0>yoS)a`mB2@JIi@n}K}J{43}Ue;rb?PdKhqr-c?tEiqq@pMbK0=$nb6CE0yccdxOuqhlF9H&TIKiI~+N5KnvC9P*=Y40N6XsFAtr-Q*UMO$V7FHTSi*cQe?CY}ZX(h>zWO zU|?B&%LVss{yveo4~72vNvYB%E%-0&>^^)6W?!B-VpOlukNFrHwj=#7WVirR-#lW`$TR#x zwSnxjsa8=gpe<4D!vJlPmWj=*18}|TT5WeAH5YDK-)nau%5rH7^=~i0CHQrQ*C1gy z8OYe%MpOW^xFvw}b_Rb+V*PFdStl}C30VI1NMn?RV!|K5(y@Ou_+k6Y`b43F4QRA%S~}LsmO`@VUWh1j%Nc;^?_r9J@b;n2Nz0 zaa!8L4<uJK5N{jSve%la)NMz#E{H&`Cu?D%XST)2jG1|ZyUWiszC zaBIYNM$Dd;k|f8#X)pk{O@&V$4TL!ce>A@M;c$GgMTXJW+sl0P9d-49Z1EMNJ~UR? zLb-@&9Ka=gx?qxPC%6wSUrGIsiJ!PV^j z#@E04H$+PUgy!dLQ!*JMowI+J)xk@)v%8`sAfa^;%5nO;j344)WB0EhY7FyHQfjK% zU9nwGz;Smfvbq^(u(7h1a7Dy0dB=kASnZRR@maw2RK_k**S?9;erP-lvhzd*6&XR> zS-1z)8(^Ol_*OpRB~9%X1T0L|%F#D|OIVLZouVYiD2W{n^e0*0c)zUL#x_{#d zQrP=cG;wBneLcIM#B3?|wczu;INU)JJ$($k0^)2nLa>;~VtZh?nW?Z|m1ncUy!0k`=pZn}e(6;*@23nA!CPbJTt6*z zetwdA4t+_~Sm>PCV~#*&WQ^Mxg>r(}muZr}neuQ@Atf>3s(34-YWIHt&3$Eump40R3X^fOu zWNKY!v={#bJ@z=-2q$w-2O(v2P%{C`*uWG+?55CCy@i!Ts4g~ zEG&4d_b9#_n8xX&mA=qH!ob%`kV zlCXC}q_?^Yk})=1=M!@&MVi4>R*Xw8;TBcbzA$xoUw+4)TO#)esxBa0ni;Ee97vuR zY<8hGXsOhX{5&6;+mzY>WTMjV>}0!6d7$e9wi9{takF!yj?B*J)=uJl*5PMQ;#5NI zscq3PH_u{zS~ax5t*7lr3L&6fT$adCpm)ge^GIAuJPZN6_BqF2dS7-!@-D!ff{%kztjafC7;VlqlG0W4H-sdMVcbdAdL8D$~8+>t%4}H{gjoKg(ok`L1!i{xL|hja`BYQCD%P+Vh=dB}?^N2oUOq zrt^BS27SYQSCTsQNy>?y>nA{fkwSDx5=4ibKBp|A#K2)n+UN7Vc*cQ4_?*Pd5)2Y(dn_d~hL%aSlRWS?>BhgDYTn9rU1C@-5b> zNBf+$|H!A?%ka_dxN^!9W)AUIBzE1p2al~M440bpn=qb`c$^@-U+3sUmDt5MW^c;r zJ3LLPB`jyD81J6-%lxLQ6+{XW#M4A5^pq)$)c^UzwYiJ`Bu$^vT`Ok!e5W8UbY#wc9Dm%*F;yqxi*wJ9?@5o1>4{ zIVgp}L}e!){N;;~Rw;3tjw=im6$2})xwSc&-rD_WUrd?Rgi$lq&-UM9SNAx;Kfhv1 z1qr{LUGE{-3x|O>a#`Wr*1Ar|uPiMS=$Dxp z1#m*C{R!2UpCDs`Dm#cNfj1WQp5aCy)ra7`2g?rXR=jqHMRWQF1JCDVhzBm#z`fD{ z%#mac0Oqwz&|Q7KIX*Ua9eTV5*Vo}G%<8X9`t{1d!8-^Hz+r4WMFviEpNf&2Q0)lb zi8q;>{rGn; z-QBa(4YBInB6t4~lGyli9~<-C_Zko9m&qgJZt0@2f;Vs8%sWzkCp`%}km5HxG0q!3 zr=G?s7oDfmkxhec1BQk5c=b_N#_BM2FtW4#N#Xjl`@Tg9=u)FUNhUV|q+FD4OiS?) z@V!*C&LI1$5B@-q>Dv)x=kbpRvNV}vo=y;4A)v|MqNLyKMzO#tSpZd;fX@!dUB_5a% z=a6B1IPk|C4_5fd^Jy=@US`nH@+<~*Hnw_PjK{r$b#6JFOH+hSLuO>}_DRPVL25NV z`^`*c5lKqC^JyC>k>2YZBD7zp&I(GW0J8*>RzYhGAR(2oIV$$eQ3^R>B!o7bIz#@Nq7UqPW@_VI$dUjJYGp3Gf zRCu&N==hKw6++2(&J%x#eP-WWAzc)YGt!euR891GYinzU&ABYBzVF&oXpy0-eNd@n z0H@dpTOI?65aKUfxSdS^Q(u~wP-~mKUut*|YVoD;zo))^iw!pT`mj8C*#<)|p8=NA z$JpQmGPEGgR>Z@Kh;7_e@geBoB11AnPrGyZVY%hFoE&}~La|+!UC~5EM3|Ky1PnED zvB3rQ(Iacij$ara7?GbC4Z$VP36zVL_V(|Fx)kKoB(arX6e0^mzOBX9BD|&lez5Bv z6BLrnN^m5(BYHZmDfRS)AtQmL*DsVF)VD1OJ-@M)@5&|x)V%nFaVS#f-AAH^NQ-SS zJ;oFACdwzE*pPpP?0ACfUgyQgxSsvzFr+~;=IsKTvxvGFHtzrHptd`MaORVel1xkWl7m44uN_$@{!r*T z*vig(cizx+mE|9A$Nv7l zNrZ=|y?>nF1)SsL!M4FcRaLdRw+!DxoEI-QNeaPI^Lz5@^A6Zeupv;goaepW4p6EC z9wTNX3<(~dL?3=oPBS=JQ2BT(A4oW5d<>(&S5>`(iG}%LqdGTaUS>f`-Q>;P%CgpY zFW!)_NZN-FJIT-p*;eUOAI5yVa71Z;F$lKs%TzY7MsS2XmucD85-?89!J44-zB{=0 z&U!sin_;beZ_~6a`txU`|D^!r|MHo)Oluq4;M9rRnH72^KiKP zw}P}{ccSmz0RR_iq=OFp_S{t0Cxo#RfvmMXa*w~KUd*oTUm5$qnZ8llL(NR%m+mQ%H4tlptpoc2QEWlu2010@* zy>sn0XqU?{Pv@XifzOYz2?GrR{;%Cx_TnmdDBq-NHambb)1~hO5g;dMb0128b0o zuPLdhthPywj&eX=wT4ZQ3~X)?lVwO`WCl@XYaIpA1dy?s;n?9Gf(TLRVTIznD|{7} zL6TK&x_}yRyz~|r$g~xELe+2GPm)zODqib`mB%2rtYwx8c+lwdI6c!mF#1ur(3e&2 z;KZHz@*X!uni4BmW|%@TWYRPO$+%k!s=-}Fb_KcmkqWw1!SVy?{W7@sm4q=A;|7R8 zp}DoE8c`LiwBP_kM*4nU)Vn+Nm9v5Oc81Wr0W=5Osz(Tl;-npzB-uZdeYWLgWcm=& zoVS8A!0s&y*Ucx1kXVc>r7(7U0qkz0PO`g*=z=fdb|M#rr`>aKieqNYm6os{As%J1+RhcH=dz1WawII{aKH7+<1*RM=ko2jTPevZ|@sC+v zVj5`0A+QkV{aE=d$|rpqA~}61gn-V|xQKe3g^i&Ps$}VXLGXa_kdt@2yjfU*J%QR& z(GSnHM5qt35@?aU|H>;oAschBTr$(($<-Mf=5$a8?(FQ4mBe6vhA1+Xj5k;Pa1B!@ zO84;-QqMg6^NK*N;{wXP*)|89S|Eikrcm?ZTNdG+_Od^Xr(td0sflU)~M z2nYuQX@2|$wzEz;%@%YAFv#t=)<4knzM+)8Q48;<31uR;JDrkHIluS$_IYaRSIU+v z+3SmH=y|OW6`e<UvZ*9XqW)w`HnWo2apdCIom^XN<= zZr(8{QH+IWPDY^g8&9DJy(=xI*tEaZkcw-Q_AV(NMRqOKVP1TQQ8jLgcDg^}E{?-d zTEaSruJ`Sd6-FgF#s|)KqE8nQqa)ldt5lAK0IpqifRzBCTi{oAH}J;(&dcSv~QIy>7q7#6c>sF|2DTa%4POR_igT#qtO zeG4;r917etx6;NybDgTx5o0-| zoZ*o8^%byfMZBb5kMXL&#c~~*0g?lkxV3*=Vl*UK!@qhpWf4es#TJH*=Yn9(u9Ep~ zDauIGOqN{l?x=mE(3NN=36WWtZM!A$PH1|fErc48Ubadf;hozJHErQ+gBBQ(X)b#J zREd?8kXXs)OyqpK-~?CJ3eIfaq2U%OKHKGFFHzXTC#T(f#&eymkZU*Lf_v1<&kZ1T ztEj^E{3GQkPfLtedjGZUM?U{R-*kH|etOyX)P_9;Jsk_>JWX6pe1%Ua|MQqvHLpH( z&V@a(%wOAvJEd{*r6cMGG@oc1NPc`~ko^=_he2nEugOkwVY+z)j%0I8>9hbEl6YK7 z*#5$PA)}78>8qbs`>g}`HLFhqF+7zGw}wQv=_gSI;E`|isS+yP=&1@ImpCPRetMT7 zdcE?z1e;zGYYp3;utTGL$wsE%%FWKdk$2=?B0n6FExaBUIgczN)VLC6izcD;wNBYj zr$kxyE=JRWsoOMD5n655`4qKi6==TRw?}Rpfor)YkI!uTXs`eBz(fq(2xb)^iPqs? zis#(nMNYcR@rUqdiP`>2>Inpxtyy>##Y=?1?JI|B_2TkDta19p^dvGCI7_$Iv#;~V)DEr@%RmmMx2TEwNG5Z=*xinF?@TRj3! zQO2Vw5)2Ux1?16=Y)p|ojn1*I2lvaZN{{3zyqq;hFuc-paVdpo*K<0T@ff;E!v6G@ z4HWa;L~?m~yx_jonzV;o2hWl2$qb!jpc45x9T498Ex|}!(f#*oGT-p|UzuCA_yRXRKrMnwdbjE4lMTm$3m4|gC>Y5)#is3u3| z&qI>c30l0A!cm9nrdok8GtiMInbl{mEy9$ zpIr_GEir)2lQImx;Ows!;Lt&cGG^2lGF(B# z?%Q<*F(4~;eq$rY>>%Or;QM2F^}u4MUDNCuT5s~aFt&jm?zmedcn1NzMERXRz<032 z;bsZIq!0u5SrYhb2kqYD^S$V}%A%oPh{Flaa@Wk#l8oRy<7zh6_R^|_+0`4P=0Oe)kMh`)NNif~MeX+4%G_i1vT(b-o=%qnIxCKscE|2UA&QmD*d#EA9YJ2-9=B z(7BmndZF_S_RuB2x%^=6;WIDW3yjA4Gh$zTh=A=Xt2>*_To?cw^+WAi?9i_%1U_Q$h zfGa|U95-$#*UmPa8iPene&mrQ*-Yj}UdZ(%&9f7DyiBPWF~&e*IgceKeA5Lm!Yr-_ zi0!$uX%uh|%<2UVKZmYy0gR+a6uF$(AN~6BE1r}}(8ycdTS!TRt)wOzBH&w`+^Dn% z+3MwL_p7VuZ(bMCoxLYL5r1KXf?_g1^U9UE77z2&_nFvqb2QhfHRIpl_p>=G$Z=95 zFubRebv8uA#HlohJe>LJRctYe2UbT68kV0>VSYS}gBtN-pSa_s%2;UthNt-NFgy&g z$Lx_2Ot>?7Hvl!^lWin&BQi$OQ45@s*v>KJ$I)3)J7CV;If7a4L>YAOgG8Th-_eNx zu76JM9W%%+_UJ(Rhut*KCaLYXMSeIEsC~7WG{C z=Z%E#AW<^*y2;A4LHZBy9jIq`mxW&Ar%jdr+}kuizqp5fr27)yR;_^8O8dus#Df9u zBR=*gy9zpDuj-pMg@RXy3sXA;(v%W#sSkg}n+#RdQpcr}&^d9K5|3_uUdP6&i^J8t z-0tPqdgGejM>g}(61fZ4ft`0uv!>-ZAIg^i-!fBLicTInn)*}~hiN&4zm)~ru3;HE z!p*pNzd|9h)pFa?HEWbiD-{v!C04WdU*Z+BExIO*a zdxcD8?~5bC$c?E1sBL3G7m^MSm0k0qey#1Zl8iEG^3@v?$`eyOgqy!=W62)rVt>#j zKbc`q#uA}PQLOWO<^W_F?z^*UB>Dcl7qe59g$dahtR#L*fmM$kKf`P^6}MlCi*43N zu@fy?Fi@TR+ZC>X026(7T~aS+7^%oS5s9IARm|=U#7pSd;cD321553*I0-TCU#hXb zMyyc9f%bC=Ij?K%^!~fjh=b2|S^H1S6MgP^M;*l#L^k;==84lX&3NXUZIF&L$thnT z`>a&XpytGK>sGoCKPyi0ubfa-FcshHm)%5>QCJMp0Me+rs&}Not1tW1P2Enu8INHuzU4_mDgjbp;>~JtHMbVj2lH=b3h5T?$BUEo2aN}oW~j`mY9(&6wpQcBHoJrrOb<@( z?(TB$p4XAn&T91U_D!C^lWhXazDzR2FS2~>;XTvS*j|M9=|iZ=Hia1)Ixaaqg4%KkjEGgSJ@1uTh1H|mFjjAWwXwGD zC1;SHfOdIg9bj3x&VzjmLw0Bnd<14wWcOZX`DDO=D-W_GbJLfarF;93$TOZQ2W`D^ zbaZrMQTYZu<{v$Jqz?fyYglHs0Y8Epk0y=OvTPa+sa-QT+*vMwg^m_EX?y`EDlaNz z?NX&d4|#X8jb|$(BeVO$qJ}Bs4U)44XR_!(jusQxdHZd?aUiJHVO(MSK{_y)iOz%b znh~V`(qC&URj^2K%9OMD0cp$>!P`n)K@`6VSCEgGJExs(9_($gDmHkki!CO_AMu$gJy+~rmS za9Y(~zvzSZwzdyIOE5WC__C2mwHdC6+*fp{ya%0Ya{l%LaG_>Y2=!S3F0!GkOJ3k; z?e=iKo-Z2vYA^uUsIx2Lb$z;DyTZFid0uVF<^bS+(m=NI`GTzCTLqpYhB3I;A+El| zDxOI@P;(LcdG>L<6fZ#ey3qTj%!Z8M5@rqHMt(_D6>n*Hbq`k~G%y>qUvo1N`=^GN zqP`Y;VD2K>a?e&M%B!tSzIo&GDD#ow@AovSSR}MMJugCHjqZ^o&_xNQNiqX=zSEIGUOtBx(e!IMoGHMigIb3L~y z&d%KjIeYbb75L82KNh8q#K%8;J_@^{lMo*nV=*(S(VF3nQ*rT&Gt1Kk_M@-A7aGZ1 zRBUCzo!Z+O z>H{cv!dPCC?A34UobJUfe|NfvCK_j|N{qDKOGk6xZ~AiiOPY=n@$AeDV|Afrw<>O5 zpEhf4D@q>EB$2Yj&a?aEtNY?G3ddcYJxq{ZURW?34$Qe|9F~J{PYwl;hoNA~>n}qG zVwhMsgo3|?z~TGhnrlc>x^Fl|D}Ns<2?g1$?5~M-_bf5rj5qdGMjYom8x=QIDRe8n z@wg(p7+hMEE?JP3K$FSjH7pCh0>5DxKo|Sr*@es2eXEN?D9xfeRs08MdYLu5%#WF*+ zAx7n0qpBvdl-RoBhW&5NCIJdOk)HStTTdy_+1(SW^L!Z$j?Dwi^l{OAw0H8tRqHc3 z!G_CyC50RP-k)>3$n&w{Q&w^DUj;Od5f6zjz*YX^!Jd|Fukj9LL)!Elk)Vw5X}oEW zW4!jrdng=mgoj9Rua7jb$Y;eC5vp=Pb{l`-NO>%5fa68ae(~)theGjfiHqbkZ5sO< z6CO8c$6bQ!W^z%C6WVjR?kr1LCyO0BR8$eJTXew{ zm6dIr`fu%a!NY~|qNFIv}nR*?1f;GLH%*@~C2MxPovYDPE zhBoCUSmFFnZsAlNTt53%x`~cRnS~9?M@paAI$4n}wHDK$Weg+{Z#JfTs~G*7LtLxs zOBcy8LA|n~0;3FSlZ|^|_Qwm(XcG%OfWmwT@fLjhyq|#~~5FCuB<$f1j zVSAgCx$)5AMw`NFux7yyCb5qj4H38Zg5!2L97^_VRZ%5{53)W9gK70H2E#h7a1MRyRay&*6 zf#^s4Kv%V%YsM#qvl)5$4nZ;YTl&hucI)_AY_ag*cuHx>dgX)GZ<9%L#`%_JGZRW< z}JLl>0zqY&B zPb6M%xfDZ;iHg^So^n_@wNpa%A(8zz+Daulk>2FN!tg@6b{5pK%qWma(VFxhlcL_@<=7y`Nx0l8)<1QRDdk=@ zO^#TEA5v_w>-&PXv!LluN-c6wQZC9^vK z9g=zc+<*kjQ9S)?6JuO z`FvMF36j}r5)w~#1b{>=0lpm)n^9cyyRuKd_H)7e{ePLL(83%uaU|&UJdNPUt=P%? zLwdVlUACZ&a|y}d{Dso-oqHY%9t-$y`fjd4O`CVfq|d!Z^AmCf(r}^0cIGly;ak88;C^m`@|nQBj1mljKBR&!hE4&{?% z_TPDyR)hJOtT$ALd+5XqT(+thbMJXRt#)bw?Fas6kwF4Cu&3I7)-nT&EFuOy0Oyv2 zlT$0C2Aaa9Z#ggp6bG-w0B0emb``of zR_2BKJK^yp`V96qXnh=d-;CoRJ`vGTbFelyr(cPJ*V@)L4?|ID$gaX1@=ztE z!zPQA;=cJuF0+kXnml+oO<<*w@a+Bw7Ub-+m>9&1i`X7`V%5K*1_*#8SpGpDf&nNc z)`vS0%6mXlwPn#%+Jc8J8^jl~t)s!DBn>>y#{Pa~@EkujIQl!E@lteZ@^tSGFEoCj zWv&cdvHYI)9*dMy46gO5I;>!7t{(+28OzZabYMBfAP;u%-^eH_eN;J)arr5geK>8X z23+%;%~3EL%3vJBvaIM5CX%z7m?{~yEL6JQgJtdj*OYlUmP_y73G_HeN=TSE$O;yq zXZ6338T1*Xkk!;5s1;2R6EBR8UnA{PfrSrsQ!ClizIZU3O|UEegx>HZD77MUINaaN z^}rlO>Q%7WVUgOeU>@#{V+uyveU#Y^ofphh%Pe zLEmC!Wj)h7C0^e&n6={R7xem2ScvK?(F&56atSx8@jwyI?KHo5Mn85xJU@1?8YhJI z1Nre~u+&=~R!qNT$_WPdb}OJMc6mj}CY})+yNS=6L)zyj&;*vZ@Ofa6LnQBtt~g;Y z{f)8m0_aL{4Rn2xiRFp|zauTgLb?dZao14SDKIyEgcNDp@vrT5OF=3o)tn+Fj4hH- zX!fA3VE-RHvk-i{jQLKaS_(&B)k4JLrota$T;kV@#soeaXWf7!8GD zMK5$V8taz${7|PtLC^>05q$DzqY$z~{rOfLu1ivw?~Jt!YJa2+gq$>8llfiYlLC7` zV8(T1!pu5o*oJUZjwVS@-`Yqv=30}~Z~vKvjL7r-8R;X-Qe`6&CW{4>1mss&k%y-{ z3;3A%Sy^*1c(&#nuGe+y6Y4 zR$N~Fwflq>^`v3#k0qW*njdqwFYqVmAeqTGt zzFx^NTVnEa?QYi~^`t?2AqMl5jko;${U1NN7nl6~_I2Y>Q$EziVMaH>Cd!oe8z9zg z8`vWKdd%N}arBPblY@5OYfcZ)b>hmef{1uX`xN6KkmUa~_LX5#u3g(hNGPeIG$JB0 zq@<+CD5(OH(x`MPDM*8WZbgs|rMpy08Vn>vIwVyKO0`(D>t=Q_i741(O5H{d$R_+bgan>7#5e0O#{4Nd+jq4B7~2#dvL9TU>;^>m1Rwevd8*JsyI4R8h9ucL|)v9T(b2TfHc zqX0B^ZLmY{C%}xHpq0HK(yN_aJ{|tDrbg9VCBbdkH=7!!C{eC{3`6Q3HHQgqOkiSf9f z0C52;EV97dOdkjURFr=W{`~T4XRlU>E~<}tr)dBjA0#&8$4EYUOhUvLsKDOAVg`VC zmEP_s!WIl|kN+@3in@9(*4Zwqsm}GANSh8CnRO7ja3Z~aRd@K|bsaA_n-i))+V~H+ zGIuPp4o6-t^-?uD2S~lqhZ&~Ze)-;c19N(a^4s>FFN$p{lcuk=pur4pb$}m!uzKOY z^WLo}|GLj$+pmI*IX*UK)EQ?Oz7zfZDeS(*7i*+7zkR#Dw`3A|(6JKq3Tnp2LLwv9!|0UK#hRO3@q`Gfsf<0S9fZ6H0bkz2l5a{hc(6lkkgLE()S9|kw<+s>vK zEuKbyOrBo?&~~4sWZ~jX4Zq_=o&UwrR#^Jw`@(BnjXJ337NyIV+lj2Qkpi~)yaVh= z@EeW~1A&SAs8apF4S&6y3G}78R|T7YYzO;Sg#W&L{@*m{e=~hppN^1OiUg;kl2Ex{ zh9CuwhOzTys2qL?dE5Z?rvDi^KnFTGmyWQ}^{b7Xa63Y);hdkB7a3G%tUCEzcmEGs zqYcW3;Ze_84Zg2BoqVUJe!_QFuk9Dt>!t6k&4{!H;uwPNBQ}|nP-b30)Z|r|a%UDc zVHFA%-_o`db=9n(ib1iFz~CKnw6L&P1tzG`h5$c*4D8t2Kms*`+K2&eRypr-6n4Tf zH5>Qji2$4?G21_8jW)bM>y!nW?i%Lz0L8BVX#7R6=LI8H*Ea`V1F-zthQ@Wu5ZTkC z#bfPqzVnusl+^dhtFV9<{+}4shUHX`L*6W{{*0@599^NW`098zZuV&nL{z^R3%RL^kA|@ETxslp4FYgo+ zz;dAyI=*yxyUe^i6_Dbd08ksc6;9Y%$NY;^4M#5Wf`|gNNfm6UQRDP_0l9=Po)(IM z@mLFb<1D0-g%R5e*n10Z0`Ef<;9l$3gjeT^6(A4$hj2HyO-_m!jXTeIOscGb)+pb( z%gv7+OvfE7xIh7+j@vHCa|%JvICJnz39W~g%B+fu3U-!ZA~!!NBuaoam?5Yu(e``& z%xzi7U!e}MwY8Nv8;wsnbL*80O`am8FRH?1D8Na_p#B;GwC3)>Tx`F^Ol&MPRr~2X z%%RS%0?IR@oOu7cL$V+z*}gt+uYGBYz{A#SF7fiM$qW>}fJC~Kby z?>l0u+A}ce_CQP40SznvsGO|q^v0-jJoFLj0O@jre#(Ckws{_p^x1Z$I-h!HXlBnyNsWH%Qvp|AA4gNy8+qk{Jt5&=O+%#Z?`(YQ z87kD?W^`v@WXu~-5ZfJ@0Q-JI@LtNR z%&56XxADk-=k?cmiqEOO8;N@Kx7g^mu&w^xkgcp7lowm{^&>M#QO% ze2DS$0o@Kj4b1ooY(7ZzZ^+sQbt&vMf?n-Xmp}Az2Z6d+MvHBMRJm1n)g9Uza@m*W z0EfEx#NU(d{`V)hWOsha5#}<*zg;?ip8BqBtU?pV`>b@X_0!lRe{<3aJ22Va0|O=j z62)nAr%I@B_^CdZnxssrrzp3wG+nE0bz>v0xA#i&fm>jjzf0n*ft&`wWZe+Z>6}W< z=5s3|Y5rfp_Qkr4mY4z?8K7|5vi)%KBK2F8yeRn^Os>mc?aM35nEweE%g}6IQ@S%3 z_V(bVQBd#nowQU)Ris){u>4R%$<9ePWCLF$jO8T_DgonkjeTGgqD6{(KU?K3dJXfVf*a-T< z*eQ1Y%XgST1yapMe-zyV2JQ6p^l+WkZvBdHQ%(M4Kv$_cMY(7FO)5AXGD16nDJZWD zI_$+xm1sZJ*W6+m6-x`T|(0{4R};`**KYu7E@q?peUY%sNBi0~)Yo<DBQh&3~M;ptrO;3 z%vtoA5x|?-U2;a5DZ)VzZ7t{gAV4C`|AbCS z!4sheFI(J|4)K$frrmp4GJ7=|z%uoUu7Hz{BsrbU-+TCd8j4Ew!3&V=J>-Yf{sflm zYYVX9&=nFsb8%;fgj*JS+53;AdxXj%JVL#Dk-}e2kmHoo!{pYdCe{RdEnW3E{+_eX zP&gy#PVjk1rnwEw>xFffbX8^sEGaz|F;aK|rDSa`olCFBlfL=TfO=VaK2v8}%iPG1 zz_j4|%pW+w$)t!u_TuZ{XFYDL)W#U4BSJZY4?_el=E7hvc*!L*S9lVI<8I zzjzi{vC?*oyC1O{*}?KrjNkv#s@Y;<)L!c+BbznQm?Tk}lm{kh%(Z8Kz5AvHF6u@HDzzr;|BMU%? z%QzFq!wd{<5Dn+%^#XaS>@jpC?gA5&Ssuj$ut+-fi{E|z;ahh)&RxzBK7*RuiR{Gm z*C3pj2ZhadE*S8MgU38_`zto!99{!%ERZQ+WlJ|8M=FaDB^07t%AokW(UH5pXlPu9 z?0ZWS*9qldvG>A#K~Ii`{SnyylUO(oCA~F#-XfK@|DLW4aMKGwtFR@%-me|!OKOVrmu&zx?rViIQct#@ zr&S+K|1k28m^!_UeL#V<9-kubYY3XWKde*gR5*uqo`zB}9Y-sp(2#cMG{nwq0sH}? zevZYT9&pO~KKbwx0z1Tfm~^F_otLo|2ZpH5b+WHbvOqi@tCY)m5)a38US?lv>bX>d zaY8-C;@ppW_h%wGtqBKz(=^`2(1jNqN(!6>nxXH`x6?tK#AJjtHhCWdFc@AWQ&JZ3 z*}7SO&daNMqqa~zfMktR3NpB4yxm zy7~bOhJ{D<{5hSxrK=jc#IT3z9YWNM#oV~3PX#5%-J(M;Tofe+j=psEJ+3l##w$$N zAm9l}ltNf=J7~BZk@7i#^XyqOW#Y`M9}^~c0DS=BjTCi&4HJ#bAlCrLG9{L=J3txi!cwFN2b#AHa83)LJiDRl}qY342ut5Gi3W$)jyuD zN&rZ^w^=q%8i)#I%rt;Tx;H4~*;gR5OXxxr%^f*cP+-N#Sa@4TBiL&8VGZJs>uAs? zfN!85P^JqOJ#CNZSZm#_1OGvBx-Vt7M3cS~HJ{}x^f+_{Ss}mfgMDaAx|%e~E85R8 zR4eBXa81F)BaXdU*&uXJ-#Sy(HvQ}PCi&LDGqgbq|DYR86S%o=>of&i8}tLgjSyo| ztw0w->++*ueAd|9kVS;NlpC>oa?j}#Qy2YySYlzbKJfwx`Q3zI5)>;cXnOPl_sZ)r z*}gyN;H+1JX#=SOP%->!-`&|v6>!uP(kVM12cYRQC506osqmDUri$hYnt5*XJ^C&i zdz{IG{8e@AV8w-eQ~u3f!?&@SJ}Ds8>njuVQqO#5?;YZ4M>X&Bfx-}3@KdPieEar- zKAkPZ&>?LuI3GD4>V|+8_lidVsdsSrCzK_TM+Cd4{jI3av(P|gBq4#F7<~J%lwj1h z=e#@-oGG|07vV2?v{mi|CncrJfdg;osOePCh1^y+MShN`i%RE4(Z#|iwlYV;)UvA* zdw(^@%%3VIG5xE8s(jyH#To3x%EyioQQ0<~KcsRj@<4UePv2 zfYF2yF#|1%s=9hK*wV;5_KOOdHSohj(5U?p_@(U67w~v|-w_N(;j|p-WsPJ$@Ny6l zIa#7%V!Fh%J3F0a8`9*j?YV~4(rVFkDEqjU3dRsou-=@bL)P&NUD&zxH6O20v{+~e zmg3=2Zq)bODNr!b)HJ`HBbl9>+wsD(13DR{Nyj23u7U8JKH$vW7_V^`0jIEAXIQ~7 zj}H=5a$pNGM?jQr_S>I`s$FL8vokq5I>w>}_oN9G2J_w;-x3+3sw!P~nBl9J&0Qlf z`ld_-&O9kO`NGY98H4J+@$urlweP3bQwO;izCHCL*tWH{Msn@xOlzyk_FEyp^xS7W7ZZ+6{+!sP>OvzDjsICf&!g#5|J}kO!wNO4_X!p@B=E~E z46jg7KkBys_2KD0)AHt*}B^`%14{l6NyVr+lE?9jrHg)$T$zSv=xwg&FaPD{jF` zW!@UqW8_~z!G*yHr}FkSV1^VTiNI5O~bti=nN)MWW9>*h+7ovNs)D4Dm& zE-JdHVGl3!N8&+ZUteF~59{RQWXsC_MsG}(jdzz52 zumxK^@rT}`vn_Puc6qOcH1YPHTuB&A(@!X{cFaP2qOUdM5@c~TY$jJCQ)RLg+ZGRk zw((`d<%c=Ec$I|YfuW%e*vk=OWTYfRZ%4Z_8?tG;mbJI54cVkdOJ7mCWXAWwb>F*3 z9Lrekn}BW zURfZ^%urS}zZnj)H~i+32fb1A>P*M_$^8}c*I_Td+Ue}4{b<^x-rHUC7XkYq|7Io3 z%%FFY>__JrB;8qpcQfIeVnv^RF^SI1eZ#&y56QwGWT0geKwjJoe0nM#9+hzS)jrKs z+6Ou@)m^HJBP)osVoySZ3D~~KM9F&U&KJ3ZN6!wfZ?n+KW|3qi305*!oV@H9cN^4# zYjg30BAOtN%jC2Y_~mr~C)$wZw}w9<`l*NBEIroFO=EYQ1B9dX9$F7~0R8WLMz#VL zTlEuTFF^X}>-QM|u9=6D6T&-G>vFoePqPQf3v8Vj4x?Z1;88n%#kB%ObD=#cdkv{) z5VKqg$msYCh%uOD5ld-C3dbEb%h#8Wy74CZEXV$Dfmiz|Of8w%yirg5?7`tip=@Sx84;qe_)D@loV8u3I+1#A&;*58=7k)o(X^Gu7uQXQu zXk+9HzPG#blH1% z-dQPl{0e&??$cU%^%dg;A+GCRsAlY@HR@9eN@CUA98w-Uc*qjNc@r3`s{q~^fkE&o zHa0fI$3YpLZ$96gBcM=LL{ssoHK~F*q1Q4yJG;cX$h6)NcI^f8)yur@ z7Z0S2e*DI&OjXO`X_%g5$fNL>$Zq;x%}q;TR(=QxnTc=Q$&QJMX$6?+2B0k>kTZdh z>2woh5xw2z9|r>nK5etu*|$R%8Sh^OhwGj1kNo@B0Wvsv%7XM49!lU1GQ=feX`foDAv~3W78rv6O$h2nAN{6zO5)f+^7zge`~XZ z1#yC|$NJ+j(d(7Nxfj{o;DR<3f3>+_wl{*~yS01yGX4%c2`&(>bjP^X_V>au+$Xyt zos{DzsC`@w@Rt^u*&X`7Mu2{&6<8E&IgzD`mxvyLo_Spgh|9okAFG5*|K<3_t64dU zrk8Z@ejfPPBj~v3NT|=q@mpq=)XIR$zhg4R4OK(L$~Z_zKW_8qm<&ol2TCA{!ixop z;#`G~UFJI|w%W9lBIrZ|qhd8f!=$IoC<*NPqOZ z)*iW0J^yJ!zZULagV-5#H)Dnw(Jij};P2||LH_PPs_#ZVE!F-gFIoWxW&QXYtiz+Z z6WD%t6g*8BaFxkKs8Oc9WX z9;h*{UuWBQlI;r|$}?cD(4+qWMNGir#}asht1#~`Jo{P>!HCs9+b@7D*^00Zn>)y* zHIIeD{mD4c0oT@V!@49MoLAKE+^Iz*tszP1#(+h&=I#&t3FKYCW@-i^Ex%Ms42Ded zKWfp~;OL>{sFIS)`S~xgQ#>bY9Itc3*}PA71}Gh99i?t(S3na8yp&#xW!NSRu4Ad3 zCL2t^H{=uufZW`*p*fZx)s$1NpM)S}nh=uug_oINI_IgG83~fqs6n@Go^1edvFesx=ies8pkbmGDzc@xm8=t=b5T7KWv47PC&dWB(eP_$QP}fW5Dk|Z!FxVpYWLsyac=(#95}|>rEKps>HrP z%^;)IR!rOPC9ca5`r<=`$GlE$0AS_*^(~ql^h^SB~B!j0uC03yz$-+@KaR* zuG7)e!>8_jkXcqyR#rZ%0f$cTlX*_zW5-k;=jN)qY6p)Jen?$~=4Osiw8U8X0>*+? z&=#G5Q;NI+N%WD(9G6m)yNN7ep#G>|z8nEc2ctnSZ$W+qH1?O#&<>xLx}stbKcsR< zI1C>HT44%}JBb$Llmd)N2fk6ry#qBeBcr1;uw#_=0atf4d^BjoUhyh$o=$QpJ?Nf< zBLNpZ&w0~(#F$s`eSFmETTbAaq^Ev;*S*SJFH31tr%5}4T@DM#PEA9h{@o_n3C};< z1WMY1Hv<{M%s?(10|!n`O(CqCK~#{NnmOS-_EL-d6;O4F-1C`xTz|2_l@P|-1%v^2Vr?UUxmtv-#;Du z@9H(#H(rc0GjXgSB_&fGo4fT`!nz?v)?3rg9y{*$&JL9_x%RKDu?G$uSU6Ofl$7MA z>8e~jX;kf!EhZtcLHX!uUcODmV7F?q##p0&<7nmemIqPD`i36bdSN#xDg$$7b|bRD z5RDp)J6Yuju_x1Cj?S8-s;l3>u@sao;_>CMdRP;nc{+_wYg)Oco}PR}m$mFEp6Fn7 zwBO>dlFS$b&-~zV#NtIGJ!IMZEC)7Bw>|Yh%yYwcaA$`K!kt}OT1t91q`f~zY!@%! z^!Ctd^Dh(c{ok$D*N3=IY_%*I6uLN3**ZB5)&}1RlVtb+p9hsmX3)s`LW_9phliX4 z0|VaF>9q|TS$~Sv$4bX!zX(IKxhy3P-C>>2D`45@_5-?K;h2Pj#B4NSH!Q6f+Yd%t zt5jvG?_YKONzMJ)f-5Wi`Gn&W-L(lu7g6!!HdUk4mcVF@dq8#FOhz&^A-%FvZ<$oD zuN}JD0ZWMQSOpq`F}XrcAQ5KE8x2d5`r5h{r?izDe@`w`Fis^i7#bz5TUVSEKH(6O z(j{fN#opis5PKrn)+49WM+Xtr5jlrIp7n;EWIpda$d)=lP_ULa)#bM#%0>fjXZc+R zbov{&K}J{VmkQT8nWVPjCj~c8nG^F*b$o5gnWY@^3S*<+(X_9RU}+~`RK9wp2+~!3 zs;~=yhyHa%%YtgmN}K$0p;jxfF6I^T{3^ZkGp$ql1*aiW?d7gKT(dhcG4Bo@iKM=T zza1MmkpsVG#eIE%CK~$crbwkf)#?9le5!M~uHrDpsQM&UaK@6`MPebZa15NB9$)D_ zAuVy4m^f&S!NppBo5R*2&-G_YX<2{24g%wTF$^rS;3XmfGU@=pKPx|9H6Fm4{>5Te zlvrE`628^s$(@`@L21a~+WAcDKZkA$gXDSWv1|VfTHU!$N+YtAEcCqbf_{SQ?iF7a zW_iYGlv6$QUR-}i1E^FC7_6dkg>>J(HfVs1P11TvKN zfYrB#n}_F}qyD;}zQuO{H+E6$J_qaN1YurP2Z>~W^42K>>9u-#HO=_6dY)fPtyA#X z-OVb`G5}_B(b}2;o^Y+Ip8_plwtoIxkk8V9lSL9}E4bHOH@?K&Xp{A6a`aU&k0d1{ z>lmhto>px3+Lda4nx*_~|7wv8$Vt?NstGFl8XI?JghDZMQ&U{PERF3-2a7$QlF3`W5Xz`k4dN_SEyS`pGew#o*7z95X@jy~jT-*_aIhI#e zwnL(s{hXwyJ#j}z2Q|7Vonm36StL;Jr;N?#wIvJ~jos&&4&JTJDlXP#H8Cl{di(P}dv}0pgkw9Ms*LbHad0xKL9ktzAiPssgsCNSIP?EI=z!XQ z8`X5JIS5XAZi;R>%x^&AF~1}mV89rmamIs;hxvP+fA8%bJ2en1S@Q5Nz#qDw(ff{g zc(|!}&Ckfsz~c~@fNJV_rMD{j*173*&(kkM9iq03;<}!do!zEM1`k>ml_QOKaIY`W z`L=mvy7Apt6V2U|{vguWR@cVWr?bIB>bd|bNdHWKTq0Sl-)yrRAKJY_-#apLoJKi5 zOb`7cGLTE}K|nk-nc{nx=Ik9C{*=yup5bj4olW#y!tMOh!l)9#DMJO% zAe`a_@AHONY0)UCobcjgw^iA_)W*gMx(w6$hfnCR`hq5raO~+{Rk2AZ7n5Xahv&KZ z6Y92ZLSfM<@tC{H=jT^LYYcJ2+ANBwIZDFYhi<@wUiu>F)v2nu;;m+e#Jx2)8A42< zdoUZ!#y$%0{V}GK#gwd!;*P9&5+P#Z-hWW8vX6@%N4~R(_iK2PX{{nCmu%!S1 literal 0 HcmV?d00001 From 5327eea72faadbad5f419acbd97d8d88cff48add Mon Sep 17 00:00:00 2001 From: POUDEROUX Tom Date: Sun, 22 Mar 2026 07:42:35 +0100 Subject: [PATCH 4/4] Revert Epreuve 3 --- Epreuve3.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Epreuve3.py b/Epreuve3.py index df6353c..28a81e0 100644 --- a/Epreuve3.py +++ b/Epreuve3.py @@ -11,7 +11,7 @@ # - Pile descendante, SP=255 # --------------------------------------------------------- from dataclasses import dataclass, field -import sys, time +import sys @dataclass @@ -246,9 +246,8 @@ class Simulator: steps = 0 while self.cpu.running and steps < max_steps: result = self.step() - # yield result + yield result steps += 1 - time.sleep(0.05) def dump_ram(self): print("\n========= RAM DUMP ========")