From a106e4645524160279e50565ead2fec2d2bba87d Mon Sep 17 00:00:00 2001 From: Sadik Ozer Date: Tue, 15 Apr 2025 13:29:36 +0300 Subject: [PATCH 1/6] manifest: Update hal_adi module for MAX32657 Update hal_adi node to get MAX32657 support Signed-off-by: Sadik Ozer --- west.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/west.yml b/west.yml index b83e00c587e9e..a13b49765a906 100644 --- a/west.yml +++ b/west.yml @@ -142,7 +142,7 @@ manifest: groups: - fs - name: hal_adi - revision: 67b88309c327d207e87bb7af6e37c704cd9d5b9d + revision: 8f33130dc5fe33ce14eb1cf29364bfc39dc82020 path: modules/hal/adi groups: - hal From 95bc94f4ead7dbd08bcab4c47d2b329a39abf328 Mon Sep 17 00:00:00 2001 From: Sadik Ozer Date: Tue, 2 Apr 2024 10:24:06 +0300 Subject: [PATCH 2/6] soc: Add the MAX32657 SoC MAX32657 is Cortex-M33 based Analog Devices MCU. It supports ARM TrustZone security model. There will be two boards of this MCU Secure and Non-Secure This commit defines Secure version of peripherals. Basic feature of MAX32657 device: - Core is Cortex-M33 - 50MHz IPO clock - There are 54 interrupt vectors - 1MB flash & 256 SRAM - MAX32657 has: - 1 x UART - 1 x I2C/I3C - 1 x SPI - 6 x TIMER - 1 x RTC - 1 x WDT - 1 x TRNG Signed-off-by: Sadik Ozer --- dts/arm/adi/max32/max32657-pinctrl.dtsi | 101 ++++++++++++++++ dts/arm/adi/max32/max32657.dtsi | 43 +++++++ dts/arm/adi/max32/max32657_common.dtsi | 143 +++++++++++++++++++++++ soc/adi/max32/Kconfig | 11 ++ soc/adi/max32/Kconfig.defconfig.max32657 | 14 +++ soc/adi/max32/Kconfig.soc | 9 ++ soc/adi/max32/soc.yml | 1 + 7 files changed, 322 insertions(+) create mode 100644 dts/arm/adi/max32/max32657-pinctrl.dtsi create mode 100644 dts/arm/adi/max32/max32657.dtsi create mode 100644 dts/arm/adi/max32/max32657_common.dtsi create mode 100644 soc/adi/max32/Kconfig.defconfig.max32657 diff --git a/dts/arm/adi/max32/max32657-pinctrl.dtsi b/dts/arm/adi/max32/max32657-pinctrl.dtsi new file mode 100644 index 0000000000000..6f74cf673ad08 --- /dev/null +++ b/dts/arm/adi/max32/max32657-pinctrl.dtsi @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2024-2025 Analog Devices, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +&pinctrl { + /omit-if-no-ref/ i3c_scl_p0_0: i3c_scl_p0_0 { + pinmux = ; + }; + + /omit-if-no-ref/ i3c_sda_p0_1: i3c_sda_p0_1 { + pinmux = ; + }; + + /omit-if-no-ref/ spi0_mosi_p0_2: spi0_mosi_p0_2 { + pinmux = ; + }; + + /omit-if-no-ref/ spi0_ss0_p0_3: spi0_ss0_p0_3 { + pinmux = ; + }; + + /omit-if-no-ref/ spi0_miso_p0_4: spi0_miso_p0_4 { + pinmux = ; + }; + + /omit-if-no-ref/ uart0_rx_p0_5: uart0_rx_p0_5 { + pinmux = ; + }; + + /omit-if-no-ref/ spi0_sck_p0_6: spi0_sck_p0_6 { + pinmux = ; + }; + + /omit-if-no-ref/ spi0_ss1_p0_7: spi0_ss1_p0_7 { + pinmux = ; + }; + + /omit-if-no-ref/ spi0_ss2_p0_8: spi0_ss2_p0_8 { + pinmux = ; + }; + + /omit-if-no-ref/ uart0_tx_p0_9: uart0_tx_p0_9 { + pinmux = ; + }; + + /omit-if-no-ref/ sqwout_p0_13: sqwout_p0_13 { + pinmux = ; + }; + + /omit-if-no-ref/ tmr0a_p0_0: tmr0a_p0_0 { + pinmux = ; + }; + + /omit-if-no-ref/ tmr1a_p0_1: tmr1a_p0_1 { + pinmux = ; + }; + + /omit-if-no-ref/ tmr3a_p0_2: tmr3a_p0_2 { + pinmux = ; + }; + + /omit-if-no-ref/ tmr4a_p0_3: tmr4a_p0_3 { + pinmux = ; + }; + + /omit-if-no-ref/ tmr5a_p0_4: tmr5a_p0_4 { + pinmux = ; + }; + + /omit-if-no-ref/ tmr0b_p0_5: tmr0b_p0_5 { + pinmux = ; + }; + + /omit-if-no-ref/ tmr4b_p0_6: tmr4b_p0_6 { + pinmux = ; + }; + + /omit-if-no-ref/ tmr3b_p0_7: tmr3b_p0_7 { + pinmux = ; + }; + + /omit-if-no-ref/ i3c_pur_p0_8: i3c_pur_p0_8 { + pinmux = ; + }; + + /omit-if-no-ref/ tmr1b_p0_9: tmr1b_p0_9 { + pinmux = ; + }; + + /omit-if-no-ref/ tmr2a_p0_10: tmr2a_p0_10 { + pinmux = ; + }; + + /omit-if-no-ref/ tmr5b_p0_11: tmr5b_p0_11 { + pinmux = ; + }; +}; diff --git a/dts/arm/adi/max32/max32657.dtsi b/dts/arm/adi/max32/max32657.dtsi new file mode 100644 index 0000000000000..0e38c346e9fed --- /dev/null +++ b/dts/arm/adi/max32/max32657.dtsi @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2024-2025 Analog Devices, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +/ { + soc { + sram: sram@30000000 { + ranges = <0x0 0x30000000 0x40000>; + }; + + peripheral: peripheral@50000000 { + ranges = <0x0 0x50000000 0x10000000>; + + pinctrl: pin-controller@8000 { + ranges = <0x8000 0x50008000 0x1000>; + }; + + flc0: flash_controller@29000 { + compatible = "adi,max32-flash-controller"; + reg = <0x29000 0x400>; + + #address-cells = <1>; + #size-cells = <1>; + status = "okay"; + + flash0: flash@1000000 { + compatible = "soc-nv-flash"; + reg = <0x01000000 DT_SIZE_K(1024)>; + write-block-size = <16>; + erase-block-size = <8192>; + }; + }; + }; + }; +}; + +#include "max32657_common.dtsi" diff --git a/dts/arm/adi/max32/max32657_common.dtsi b/dts/arm/adi/max32/max32657_common.dtsi new file mode 100644 index 0000000000000..a9d69b0ea0b17 --- /dev/null +++ b/dts/arm/adi/max32/max32657_common.dtsi @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2024-2025 Analog Devices, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +/ { + chosen { + zephyr,flash-controller = &flc0; + }; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu@0 { + compatible = "arm,cortex-m33"; + reg = <0>; + #address-cells = <1>; + #size-cells = <1>; + + mpu: mpu@e000ed90 { + compatible = "arm,armv8m-mpu"; + reg = <0xe000ed90 0x40>; + }; + }; + }; + + clocks { + clk_ipo: clk_ipo { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = ; + status = "disabled"; + }; + + clk_inro: clk_inro { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = < DT_FREQ_K(8) >; + status = "disabled"; + }; + + clk_ibro: clk_ibro { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = < 7372800 >; + status = "disabled"; + }; + + clk_ertco: clk_ertco { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = < 32768 >; + status = "disabled"; + }; + + clk_erfo: clk_erfo { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = ; + status = "disabled"; + }; + }; +}; + +&sram { + #address-cells = <1>; + #size-cells = <1>; + + sram0: memory@0 { + compatible = "mmio-sram"; + reg = <0x0 DT_SIZE_K(32)>; + }; + + sram1: memory@8000 { + compatible = "mmio-sram"; + reg = <0x8000 DT_SIZE_K(32)>; + }; + + sram2: memory@10000 { + compatible = "mmio-sram"; + reg = <0x10000 DT_SIZE_K(64)>; + }; + + sram3: memory@20000 { + compatible = "mmio-sram"; + reg = <0x20000 DT_SIZE_K(64)>; + }; + + sram4: memory@30000 { + compatible = "mmio-sram"; + reg = <0x30000 DT_SIZE_K(64)>; + }; +}; + +&peripheral { + #address-cells = <1>; + #size-cells = <1>; + + gcr: clock-controller@0 { + reg = <0x0 0x400>; + compatible = "adi,max32-gcr"; + #clock-cells = <2>; + clocks = <&clk_ipo>; + sysclk-prescaler = <1>; + status = "okay"; + }; + + pinctrl: pin-controller@8000 { + compatible = "adi,max32-pinctrl"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0x8000 0x1000>; + + gpio0: gpio@8000 { + reg = <0x8000 0x1000>; + compatible = "adi,max32-gpio"; + gpio-controller; + #gpio-cells = <2>; + clocks = <&gcr ADI_MAX32_CLOCK_BUS0 0>; + interrupts = <14 0>; + status = "disabled"; + }; + }; + + uart0: serial@42000 { + compatible = "adi,max32-uart"; + reg = <0x42000 0x1000>; + clocks = <&gcr ADI_MAX32_CLOCK_BUS0 9>; + clock-source = ; + interrupts = <11 0>; + status = "disabled"; + }; +}; + +&nvic { + arm,num-irq-priority-bits = <3>; +}; diff --git a/soc/adi/max32/Kconfig b/soc/adi/max32/Kconfig index 2bddfc6e556b9..63e2d1b4b3e78 100644 --- a/soc/adi/max32/Kconfig +++ b/soc/adi/max32/Kconfig @@ -9,6 +9,17 @@ config SOC_FAMILY_MAX32 select SOC_EARLY_INIT_HOOK select HAS_SEGGER_RTT if ZEPHYR_SEGGER_MODULE +config SOC_FAMILY_MAX32_M33 + select ARM + select CPU_CORTEX_M_HAS_SYSTICK + select CPU_HAS_ARM_MPU + select CPU_HAS_FPU + select CLOCK_CONTROL + select CPU_CORTEX_M33 + select ARM_TRUSTZONE_M + select CPU_HAS_ARM_SAU + select ARMV8_M_DSP + config SOC_FAMILY_MAX32_M4 select ARM select CPU_CORTEX_M4 diff --git a/soc/adi/max32/Kconfig.defconfig.max32657 b/soc/adi/max32/Kconfig.defconfig.max32657 new file mode 100644 index 0000000000000..84da5e22a18df --- /dev/null +++ b/soc/adi/max32/Kconfig.defconfig.max32657 @@ -0,0 +1,14 @@ +# Analog Devices MAX32657 MCU + +# Copyright (c) 2024-2025 Analog Devices, Inc. +# SPDX-License-Identifier: Apache-2.0 + +if SOC_MAX32657 + +config SYS_CLOCK_HW_CYCLES_PER_SEC + default $(dt_node_int_prop_int,/clocks/clk_ipo,clock-frequency) + +config NUM_IRQS + default 54 + +endif # SOC_MAX32657 diff --git a/soc/adi/max32/Kconfig.soc b/soc/adi/max32/Kconfig.soc index e0be0041b4b6c..e4b2347ca0218 100644 --- a/soc/adi/max32/Kconfig.soc +++ b/soc/adi/max32/Kconfig.soc @@ -6,6 +6,10 @@ config SOC_FAMILY_MAX32 bool +config SOC_FAMILY_MAX32_M33 + bool + select SOC_FAMILY_MAX32 + config SOC_FAMILY_MAX32_M4 bool select SOC_FAMILY_MAX32 @@ -25,6 +29,10 @@ config SOC_MAX32655_M4 select SOC_MAX32655 select SOC_FAMILY_MAX32_M4 +config SOC_MAX32657 + bool + select SOC_FAMILY_MAX32_M33 + config SOC_MAX32660 bool select SOC_FAMILY_MAX32_M4 @@ -88,6 +96,7 @@ config SOC_MAX78002_M4 config SOC default "max32650" if SOC_MAX32650 default "max32655" if SOC_MAX32655 + default "max32657" if SOC_MAX32657 default "max32660" if SOC_MAX32660 default "max32662" if SOC_MAX32662 default "max32666" if SOC_MAX32666 diff --git a/soc/adi/max32/soc.yml b/soc/adi/max32/soc.yml index 3bf7288d120df..1a4b7c2568d38 100644 --- a/soc/adi/max32/soc.yml +++ b/soc/adi/max32/soc.yml @@ -8,6 +8,7 @@ family: - name: max32655 cpuclusters: - name: m4 + - name: max32657 - name: max32660 - name: max32662 - name: max32666 From ad4af113e6e017ba6727c4d9d353c4fe6353d871 Mon Sep 17 00:00:00 2001 From: Sadik Ozer Date: Wed, 3 Apr 2024 16:28:32 +0300 Subject: [PATCH 3/6] boards: Add MAX32657EVKit board This commit add secure board of MAX32657. Only GPIO and UART drivers have been enabled. To build: - west build -b max32657evkit/max32657 -p Co-authored-by:: Furkan Akkiz Signed-off-by: Sadik Ozer --- boards/adi/max32657evkit/Kconfig.defconfig | 25 ++ .../adi/max32657evkit/Kconfig.max32657evkit | 5 + boards/adi/max32657evkit/board.cmake | 7 + boards/adi/max32657evkit/board.yml | 8 + .../max32657evkit/doc/img/max32657evkit.webp | Bin 0 -> 46968 bytes boards/adi/max32657evkit/doc/index.rst | 369 ++++++++++++++++++ .../max32657evkit/max32657evkit_max32657.dts | 48 +++ .../max32657evkit/max32657evkit_max32657.yaml | 13 + .../max32657evkit_max32657_common.dtsi | 62 +++ .../max32657evkit_max32657_defconfig | 16 + 10 files changed, 553 insertions(+) create mode 100644 boards/adi/max32657evkit/Kconfig.defconfig create mode 100644 boards/adi/max32657evkit/Kconfig.max32657evkit create mode 100644 boards/adi/max32657evkit/board.cmake create mode 100644 boards/adi/max32657evkit/board.yml create mode 100644 boards/adi/max32657evkit/doc/img/max32657evkit.webp create mode 100644 boards/adi/max32657evkit/doc/index.rst create mode 100644 boards/adi/max32657evkit/max32657evkit_max32657.dts create mode 100644 boards/adi/max32657evkit/max32657evkit_max32657.yaml create mode 100644 boards/adi/max32657evkit/max32657evkit_max32657_common.dtsi create mode 100644 boards/adi/max32657evkit/max32657evkit_max32657_defconfig diff --git a/boards/adi/max32657evkit/Kconfig.defconfig b/boards/adi/max32657evkit/Kconfig.defconfig new file mode 100644 index 0000000000000..0309586a787ee --- /dev/null +++ b/boards/adi/max32657evkit/Kconfig.defconfig @@ -0,0 +1,25 @@ +# Copyright (c) 2024-2025 Analog Devices, Inc. +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_MAX32657EVKIT + +# Code Partition: +# +# For the secure version of the board the firmware is linked at the beginning +# of the flash, or into the code-partition defined in DT if it is intended to +# be loaded by MCUboot. If the secure firmware is to be combined with a non- +# secure image (TRUSTED_EXECUTION_SECURE=y), the secure FW image shall always +# be restricted to the size of its code partition. +# +# For the non-secure version of the board, the firmware +# must be linked into the code-partition (non-secure) defined in DT, regardless. +# Apply this configuration below by setting the Kconfig symbols used by +# the linker according to the information extracted from DT partitions. + +# Workaround for not being able to have commas in macro arguments +DT_CHOSEN_Z_CODE_PARTITION := zephyr,code-partition + +config FLASH_LOAD_SIZE + default $(dt_chosen_reg_size_hex,$(DT_CHOSEN_Z_CODE_PARTITION)) + +endif # BOARD_MAX32657EVKIT diff --git a/boards/adi/max32657evkit/Kconfig.max32657evkit b/boards/adi/max32657evkit/Kconfig.max32657evkit new file mode 100644 index 0000000000000..7f1cae8fc8376 --- /dev/null +++ b/boards/adi/max32657evkit/Kconfig.max32657evkit @@ -0,0 +1,5 @@ +# Copyright (c) 2024-2025 Analog Devices, Inc. +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_MAX32657EVKIT + select SOC_MAX32657 if BOARD_MAX32657EVKIT_MAX32657 diff --git a/boards/adi/max32657evkit/board.cmake b/boards/adi/max32657evkit/board.cmake new file mode 100644 index 0000000000000..2c8ea68612c00 --- /dev/null +++ b/boards/adi/max32657evkit/board.cmake @@ -0,0 +1,7 @@ +# Copyright (c) 2024-2025 Analog Devices, Inc. +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(openocd --cmd-pre-init "source [find interface/jlink.cfg]") +board_runner_args(openocd --cmd-pre-init "source [find target/max32657.cfg]") + +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) diff --git a/boards/adi/max32657evkit/board.yml b/boards/adi/max32657evkit/board.yml new file mode 100644 index 0000000000000..48af69011b6b6 --- /dev/null +++ b/boards/adi/max32657evkit/board.yml @@ -0,0 +1,8 @@ +# Copyright (c) 2024-2025 Analog Devices, Inc. +# SPDX-License-Identifier: Apache-2.0 + +board: + name: max32657evkit + vendor: adi + socs: + - name: max32657 diff --git a/boards/adi/max32657evkit/doc/img/max32657evkit.webp b/boards/adi/max32657evkit/doc/img/max32657evkit.webp new file mode 100644 index 0000000000000000000000000000000000000000..dfdd54a34da238f220bf22385606e0c1a7e9815a GIT binary patch literal 46968 zcmV(uK-)#=C%Au-eH-~N@87xK z<2}0n+5bV~v)8|&|I_}{)i340bboLC-~7kDPvk%9|AXwnvNfcl^Iul>Ks zXY@bt9-LqQ|LJ@d{m}pa|9|0Y_Q(J4{BQn=CK&SD-w-RnP#V?%*02V(fHkZEtzZpn z0BcwSTEH6C05ao5>q&OP?S@x@{r;o z#6yPJ^LprU(BXvTZhC@EFSHlh4o~EdomWKb(!(b%Ws!XkLn?ZON4}eCXKQ)$xD{Y=4 zOd)$ght0;WWD*osY5yNjmAmoECfiM)62FYOK`24{BvM*%5RkJ67F++-IfDqzQ> z@d-XXbk7%VAIu0V5-uCAhsW{qtwimtubs_?_!!XbZEm6D6!!7_N7cIdxXvV zTn9pkQeof!Q?S6dDZOhPhg%V2A)Yk9wm{tXaQh4T3k+Q6vxk=p_4LLXwswty@E zIix9t?x|R;C7BQffYHz+l@UleJxSDs+P|VRO$Q5-jx?5e(6>15VUYe^U*6Qi1CpKMM36yOhsQAGK$lxv9}8k(_DeL>tc=TB>n$ zQZvor9!fG0+E5BIR5D-Y7I!^SWIeGEKQdZgZ&&`Y3xcQE6o5PHV(WR=hxeE+?-|G> zvFU_mF3tp36^_OKtGj zQdda#Ohze1)kULqc4Q{2uC#=onYo!@dey6MG_~kG{uZ|JBd^M$XFPF#`9_iUdHry; zT@VNEV?YAB8)E(J2Bo`0Tck~ke1(ukH_sKVt(D4N;Ulf*# zdp&oUzxQznZP<|`v6X{`jT2R4R<)dpPXcxWMG33T3Bo%?Q>4y%ZkU%Pn3;eh!)V_{ zpi*esOsBbDZg|yM0{dG%)Gs;XdAn=-M2}TTkRbmNju$%4p$NxI+%s|f6p4ORnnMRh z#@WGh_uT9>HqLxH%G0vgk_>obop>wbLHI_Vk%Pgc16OV18Y$0i({b&BQSEMz^}qf+ z{;&DSTN3qPmNl1EI&KK}L2?ZG;y`x8=-wdRzRG@f8=z!5+8C19Y_`a&e>pJ1oo<{r zsh^?%iU95(w2nt}FmgAvB*ol3i(Zb(=I&ASGYR&7ExBKu)8Wu)d)O;ywT#g*n0iFsy+11*ACT}wy*%=E=X5wJTJye~e zC-2T=61FeV+K|!Qu+tfRWzqikSAVlaYJ#jCn;g)sbsV$3V^+^&qfRn&-Cf$#Y6cY z@e1!5u~L8Ri|Ni!f`*OuU4eQ-q#JdFuL>LrzFeviUX;U@a=+}3V)B@Q(8i(G8b_k)-;=n)gH(E^~b!A0+*@OO|Asfyoc z2bogmd(jWPp4 zH_&!1&qwS&PHPw9*c(2and%QpqhC==8^81TD+@|+Qk7;wZ+2n%YqVr$lF0=2?Fm$# z@rU4O&lVtoAqn&8OI6dy0ceGo>xOFuxZcQDyd#W&%`FcLZc^Va1CSd7I^y-M^Yg9` zsfz`RMK3b+sECRqQzfgu8F7pwFuaUIuJA=ElCcP0TE`M%ZG~W_53jI*;q<=-ynMDs zCd~)vqF01Ddc3sfr#>C0ZZoCnKfArU?bWz+9}`Vl*>rc(t};?G+!7QfFG>zh>ZhTF zkw*qAduEw$Oz!j2w0nuOS)VbAsKr<@!-WGJmM0!QmbpLye(H- z2xZFXL?<0RRY3hnMEqpJ8`4($H{r`nVqBDUEd!t)w!Fza-z==AZ8({Jq|B#aZI^D7 z9df05mu?EQs>T2BaaRl9vY({xI|+=lMHmdj_?R{o!gPp1qqH84LBA+>gj1qhM&{yl zEu3Qh_(5p>hKT{qGyt@vYhrJiOnRv+XLdR^mLgr;bp*-=R$4kXhdwC>6e8o=$OZOP z*!Tn7uQ|q|N}a)>h{oFc{^wja)iOh-E4S{U*10yGBQPlIYnjuH_wc9m#pgrvI;%Z| z`ZPsx<8^e%5QOlW-E=<7jnGZqIZwiVSYNV3@favX!kW0_B(RoRf%g!>O|`ml5Z4(Q z{0^o3vRpB0L3crUw5QE{12>4Ly5xlcvCYMiOg8Pu#BJ(R(lVp12#uJ}bch}9^D6{U z(T1Y)H4G>tj9^2_wltO+)&S8B_#+|eQKnk<3~x&T*1kz6Fa~JQIipF;7E- zLmf^vaVT9+t03QdEvcLiO!JkN<^qFHXEdCcOM^eKZ2S2^{14mrT-5O0P$v!#LdkB& z?p*MscGE&WU2;U$T*OnoT$fSTf1>46I}2w2pp+ji&H~x@L?c=^L{1P=rwq&{eg|8@ z2sb6{@I0bedJI-^axDI4QA6%OlflE>?(mU)upg;vwulrk=;%Iqom$X{{kk_@jHgwG z^+cPQXK2T;#bmEbNQ2w~%@e`~0o~Lu346_OB%$8gJEIGH0h*#p`7vWsdmM-YnJ$|v z6roOK@BU`M*Lq!=uM3!trR+~KJU#zsP(}ink0N7$-f1m6PTAX`Z?grVj-(^nJ-Ax>;$ zOgoGX{(sGH;d&Z~S_|W8D8aL5W?eKYPQ=OL&e9A*SqELne$tw%K!RZ2xt!=uxY0jT zHDR*Yz;=QkD~f%Ov3n?|Alf)RTOlMVkGMBUxQrw_;)}_oe(t8*DJpEV0}RIDK#G4m z#mWh%+NS1WE-RhVdBn#~<|b=1cMK}FtXX77!ZYRGA$#%6aPtZl+b>0HoCoIxn@FUV zSoh>m8@{w#>_SA*!9#lo)u$NN2i-&7G;{qriTsbcYNU0h(xFtP>|>_zUc@D5;@=vv z`a>{b*KePA89`1ehW@cgRv3{8LV)EE=5UuXn97>S1?^kJSO`%j4WFvoM`y zqkn!HF0xt58Cl{F9JAbSE!8$-^Ao>`qUr?Dc@m3UX7!3AMVEgtgiENghBkKkQN;^E zjR3aLCx{!*q)yzP1xJ95|oMA&;Q)?!3>I){oh*~9gwuWrc=!i;xr*FoZneJ#n6(m#s&=$P~tdhgzt{y zr8|b1#wnkRgnk!=cM}BlA6(51tXjMa^H6yb7kIzP#%F6w%zsu!S0J4C#v#r zQs*x+jayw$#`z(7>2Zo2*i%;}bKIcwVP-IRuP{OuYlcWwro3J@mjWt7&+zwhrl@#0 z?%4l0FzCXGM{Gm{_L<3HnZZX|!CTxY?_-1sn**x)DyRSdC)z*`R zFyt5M=u(9muG>MA{-N~UGXU< zU~xm+T5XxFlwzBfNbgw=RHQ8XgP_a;;_84m3|;|idgE9XfSayvD>l!iZ`i%&lC%|D z%1|HOWkJH$`g0*$!<2%DhNHhV=5MGixosX`2pGc+iPZGw!#NCl(O7@nGDHO|tWkfH zz>JlbvlBshHExwkJ-TKLtYJos7Rs<~u64Z2xGb=`wO&y_Pu(`<$k6d@>8#0x3YbR^eNiV#*}|yMJmqGvtkkrbCi~Ds(6|J!RjQ&c)2SISHf`dB zP2<2%S`*R+Z=w7~=+9F7_v~&Z#dz~yY=L}Ay7+avAJ@LEIOsQ&a}afYNFO4r>0><8 z_5=d5qi}XRinGq*OLz~B_U^A*!KT#t;8&6d$%lyuFfom+$7v0ngfLElw2a}+Cskj-gJXG(@fJ}AOU2r-59|7gnEp&L z#pMjA@<*!y>|Mql`r3u=ZbJDtaT)%;$dk>xW&7VnOg&|<^v8$;UcZv3w23+x220`i z(h8^@YqS(sb293YJ^ob?hsi008Y!pnuxxRZ*Dwv|Ruw8Lf)iDefu8u6*~;{rjg>Np zU9h`hDpq8S^hxRU!7J&AgAoQI3`7`+F%a(O-OsyoUgf)pF@50@^Y8s z1HWgDbDPH#qtcSq$<0f^xiOn~;);*bI23bp*vMuT-tFBv3Y3$S8!9rFs* zzx=8KoG-9;SYb)CxZs9Tt7zDT_~qGk+tkM_IYsv$I`hpXh;xq9d(k7l;!q}yvcY=S z#6=SkPwYt!i%!rL!MLTTvKt~-B3tL=qXQaaQ87NcGxnGsZi+K$SzX%nM5Yf2nKrVC zVHZG8y9G16o&C~@pftlcc{&8AX>KT35CMtoNC0ARf&PSRo*))_vJY$>oLj5MS9(;JKilkz;6B(jJmwV*hPC5I-oQ3pCS%$mJ&DsQT^lk=3^B|Q-gmV#Acw}Ao-GhBV&8Qs#tKQ-< z0m=59#vcvSJzGz5W{o1m{Ipy4=#WmQmkq!|e1Gh% z^d2<_Xg|!0W%x7x)!%NlfJ?fht@%ed$5i+kqrVZmv+$-y_3(o7)@Hhct*{B}lSe*e z%}X%bl5$NaVjj!~I4-@^NkM6Gr9>F!_Lk0@DhVR4Q+qRPOV8&lC_yFNSKM=ntkGb^yn_@XVql)S#Tn7x(})Bb}hd*`&2+_WE?@%B-S7_gKWib)Y9#mp_GhScd8xg|cVULyrzItSYxKQRzaGBU@v;^@1NKsHli1 zOgRO19nVHrgBw}iRJwK5q=T6vLI~Icc$B{Z9W|+0bH{#z2jC32~PsJ!JhLz))jb@I)wBGwAXlQD~{K~3Cil%r_t%lc9f!hUF8%8c(v{P$G-by|)AxUK`CKD|7WP zvBS@A_h^WSKVIDsYrhs`G)xMX;ht_g<$`1jO+HwO+6+KFQXu$d1CxVP@@oSB1LA~X z$DK|Yih3WgzGt&H67zgjR3mN^YknH=&}u6%!8Fy8|2<9!dy)Hut4Cf1Umx1ior$oM z_}fLEWsJcr|Cj71r9YV#Q&9YrO@`0mv3#JqX7SotPdsbMBgIyG?#t6>w~9`;F+ZRC zVqLl=5xa@wQS-o3$o-DY@zsCkTwM&290{x=n} zmw_eTO*-do%vfHsXzR`WEVwxD;V&O5+Y5velK52GYR`wdq-uh}#5Ci9#B-`vngU~C z2?(N#+{dN;rC)$)xv@|lzYufBDu9-mr3!pB+9R>CTD*IArdPug&D!q!tA1_*`!KI% zo|XNr&1exIlZ)*+B;G%w%nqET<^s?Z%{WRM?<9FLN=H33A{@8F8Ck8e5YF2DkIcsa z3EHb8K)m(n7Pf8PGP?=lbNk~Nwz^_Ax3TU;Udo)W9Qq z*U+$`?=1oFfEifxg>dwZoxUUb<4)UqTBGYvyn>c1hdWaiFY~?+<+q;dxgwcOe1w61b9~k(Ry=$RX+MxHzs$#< zuQ+-;*NUoWthG-Eqy-9dqrTwqR)_rLOXGSM#aH(YlD?=cXr8#EWom++T@4s(Tv@z- z8cv1vZW_U@+mtxRh)M__6ps&Im^)`HS6$VOBC6gVD*cRrRGmHrLydTNC|4%vY02#V z2nAuqaF4l*mXfqA*TRdNyAXtm7dqYGHVj$k-zHRV33#XNHa;n_?ZI}l@J+6%{$cWQ zCPY9W;%h+Twb$#`E(W=9HL)+}T0P9fl3NQ13nB=ap62d(u0ON^JVyOyNv&fY2@H?McVBM~1zkGXs%{cjS+aJWr$ zL0W1}FU74aal1wDYvWUBmf~)+gyigELE9cgmRl8NGnAW8T+6^AW0IFo)$pxlI!8M# zvR|{%yLeoNNuc5Mf`bWS#{lp1ufy#-xMfXDjSnl>^v76%ZO-fC{OI-{u`_9FxfV7A zZ!OK)bP<$f%;#ta7U7Z)x7769}T7K6cJW4QoJti%(Q&VS_FR_FL0iIGm^y+G)-N{ zw5c;}@-N7)x>h2K7R16aqJ(D2c!<+!K26N~piZ>i>#C>e65;Kb73}V^21ulT0{U5z z)dY$t{bUnk3HJ~c&5so5NntYFP(aM~nJT&}RHRH0mmsiaL1xzjk3i0-7e<-~pVH|g z0kIB80LO7QV&z7uc|N&BYdo^`0LRvjQcQ6UG2cZM5+QPSY6v~66#R`Gfo;rOP4RVJ z-MLrk+0~+oLXo^7RsLnmOIYWc0{?T8NKyn^@mxK@1Bc^cC5SW;(iAtGshT6FY2U3O zv4K6x6?Vq(x6KkU#hyL{ulBL#m&=$BK`tw*pyrtMGkQ(Dh=-HH`u6&6)L&IO3-41w zTEgg)N`^no-dELzzvET-`L0gDlV$0;c*i7!b_6c%XRZcCWxAsp6V;sklrPiQJQzby zIYC6tcY=p)bgeDNPGQLfge9Yr#SJlb;#O1pN$f9j#c{iSF(ghO-qU7ir#vqo>R*`9 z0DBeg86H;yCIvJfw**o3(9_VYPkR<;-|mM+QYv71VRc(MfV{h}lR%w15fBzg+vo1D z>Ab8#bzZOw!v`7Ck@@<@J?z{*L<|B1oySb3Fc z!Z5XTj?@*wi3Ub6Ux5pnECJ)+))VPZt2>o9^jLl>bq~-26}laSl5Q9Pamt`IDe9#M zq{U3GKfkJ=K0$@|#5f=coNfuZ&-AobiB{}i&!tJQq zIHr!|_S_lUm~l4!&N$hE|Dn_C{>zPwnFo;x6Gp9db2f8xb?U4?4kPzudI`EP>THH? zCR>y+AudmHHK)O~kXh#O!WMtm1V0m1yj<9JCR$$$Bu;Ep1HEmb>@19<7E4d`x07mpz;GcCwYI*vRYH*h48>*pV^>;-y!Ui2{ zlTzTffYks|#@HZu4oD0E5;Wdp!x20A-D$?iQyBmAS&~gmkZW{h44KB;W z|8XGsmF$=B#)m^G)F9d+vMIf^R=-jIf)m$@ifB=J?@X%_6}JLcjHT&KOj;t;lPw~6 zmUS5^#1VdPFF+_XXe2m*8Rrc0ym2ZT(bJDn8M3c~=)F17u^uh*?3MSI9htt=w8;iC zLe8|HtM;(I;-r)`;WYD4K2HVD+$wRK1LUN;SGjQ0I|JCBcs&8GobKnOC|Rr;eG=}s zyONIiZELJ(k2)G7GHuIgs0b;u`HKZb_#{6UWfQ*`)?NJ91Imiui!Bap7i zzg439P=3ALc^>SCxpqfYj+Arcn)-X<+%%Qm`JcGd;f8x&JO5?^m{gS|!!UN6I$Wra zu0HC#56&q&nnt|8v&S6&zj^x59VW-D*u3Xmj%uBk>(DE)#_4DRCNUre07g(`KpDJ< zVlu&@`8DhplO??96Wmv9c(--bN4r{DmokRj82=yQxzRbFm_btiB3WSHQGJEaj}?E? zyq-M+>jwRHar><(XD0{@`od37PKWH9#*p5*P-_cg(3o;yO7`%ZSwJ`ghhI(cPn+88 zXUW`U1+eBeuP$~zkBYG*A)1rq$PI`jF7#I?6+#si5hLPEGfEoi$Bx*Pm$bSu}Pr{_kj2H_4 zb7RI34tPwBkMhqqb3rfY1zYvK>LYI)T1xwg{A9Mp-`Rw{O$2;Do>X9U6n45}4||4H zXGH0HszAZ#YJE(vM4;1|TZnIx84uXsU3{mM;s4yOx$-M+@;Hh4RKJ^NYGc+UHe>*u z1Qq3J!zGa#dL+|BXMs}nJ$q}=c>uNtHS$mlxGHHJO^rMBnM5LV$dYRC+MP8q>~u>x!DkCTW4TxTYJzR3=igK~d0cL@ zODs*6^ZWI#m2yFr3f1CT;XZgz81?CjUCS9~GpOqX+x@3!ejjZB@;e?G!XIVA8c~n4 zFAwfp#&e=XMR)J{GN@R=19=OUl8xWI3#>p%3u!^}7H->d&&ih+5n-JA(LywcKst5v z;k$vXDpw6dWacQuF*++mq97#0Q8}IUMfSkdGK~GXY|#XXw!_3NGu8t+tq|Hx`uxTK zu!cAQ$4dohI&~c2cpfb`8Gz4X?={vJy?wdlx$&0_vJfs)9Rc?a3G!bf&l+cn3=kaM zuKMebkmk5ok$bA7_r&{9{XJr!QXcv?mtvMi*+(IgXlVs49}T%EH@kB7K-oqItE@y3 zhigWu9(KbKR zR_AUU;ki7?S_UG!lk3t}>aP)~Rx(%Wc2rSo;oR_!&f|$wy=nyS9_Yg8%axbhewc)h zuj?d}yaqI|Q2pQiFqM}$8SW#XD*h4mDWZ0Z-*~ye zz4Va$!4f_oY*x5e*)_gokaogCd#V|PvVokzt&EY|1^vM1_A)BUN=(NHWTviC3QwAP#o&w2kqc1`6f|d6e z9QO*Y_aW%rp9KZV3Dl^N<6aB3u-zPuubDzo#CXD2N%ok1SPpVAibao@c!}^Q>p4FI{;c^;)0x(D-Wu56z`F`ZZPM z_T*P+Bi~0(4IQxO4*U!?(;_R2Avz-_ksXH`gtULQ=7&qeYnaB|GS|V9UNspkPK1C8 zPW&2<^raO$Wph>0w(+qqzX;FnzI#nk;I+t)-=Z(q*A3s1>py1@r52kzj08osOd;QKo9GM{F`op&KJ2m+h zne&Kgf}F!WpJTmeV2Rw11kv9OP3wpe}372XW^uEs%%1zKz?F zVqjGH85ow-=B(X`U7! z*M>RovT@8-3n-5KqPO7)8s_(+HBMA#_-RfvAkf;Lwy0EI`t2s9o)zAP?N&od=Y|(q z=J||$>f?{KEqCE*J&4cD|JZrd=?FbpL6?HRUD|gWr<`XFY_qAGNc#L*^+BFySYbhv zO{6J_le8)4alnpzZJ=LVS0UB&6=!f%!nYTGIISLzJ}97XO3bK{o)q-&MBMv(?0e%)T5Wl-QCK$n*P1?Nx_~=g zt3=})%6eJ^P9}bFd?4nu^2ih9@cL6DEY{cw&poyeV9hN-TC$h~!y0PXCNr9-KP zw#Wv*47V3{GSUas$Ze^p|812WPg>x3k`Onoqt(t*W}ChHu3ITE8CA+Nk5ybr;p%)= zO-J-hfeaMRDN7$CiRZxo#NCq^joo$^h)&jjP%Shq#5b86%nlSqbvFmYETiBaC_b1U zc!Yd}7z1%=>}K$9K~;QTI?-4$BDA!X*qrc7B+dgVjQuqbGp$8SmWh%M0~EfvmV=_$ z1amj*9HLcJN~=W}c@9u2G9>82aKO&K-v5+CVAgjUlmGDg`32h1L_XL}0NZm;FyOx} zKjORYF;b6;81A1yj#PE7Nn6SJqS;niPJG;+)U=;f)@~E1?ow{Qh*o^V1HQ3Oj?)FXRIL z-hCR#7)5zF?RO>3hUs^4Yv(&24VmSoEG}HSv^ALf*)^v8iI&*(9R;Fin?-i}4TX79U%h-mT~YPB4B-!F${20_fze$sGDg`U zqHQcgegk>(h$i!qNU}z|Hm!*+13>skTeBNo_k^x}3=!jclK_p;=u`wXcC-q27dG_f zezP%p@kv4O9BBF^5E$`Tv3y(VM4E05G&|!ae!!X0F4*4hxR`G;Re74|Tb*YF?KGBF zqYl@#ryE7-ui6JPkUy6G4GaZP9!g2M@smb4uA#91hS)_orMBOtWQ)bavS^|4ct$Y! zsjkA1wwq}<=hcB>kg-7F41Fw}`gQ}Z+& z5^fj#P8Cl)abn6_3Cz`&EJgNU#wF_T4~3-F4lL&;vVw2KQwebX<_ifxZTM}3W=4et z)?CTHV^7Pk@BZAD5`uSMTAm7y7q^Npu` zxM5%2U_jO;X#}JofO$TSx!J@`B0{>^wFb_Vu!q!YA%pphxb@)~WCWO@uM$4VsRV6v z{LWo}cWV(4dS|~cn>Q~M6UQYwXqc^}2|=R7YKLe8vVB|lPn#*>^Aij$j7ym^RFa0- zlIhOpIKDUmY1T~87qeRRVh}!6DW(PCTe zoIIk>ZTOn{Ut06(4ucM~0jo-5M}U@!Z>oU=U@Y|*w|~`#I5vDTJViErl_sa2Zf^4; zk)(LrzRB*TJO(S>=K!{t*o6?PX!5WsSQcK=l_yE!H9|MT_dQQyNizM6!q42k@BuGA z+jD>~$qmOfi?}uox)c|JzvreVeyxQNk%7~1%-@?Udun7!j`<9@8Z4X2R%h*7ZeF_s6w4oY@Reck+ z24GY}5!jGC?iG2>ty*9Q(x@UDa+2&d@sFLioveIH!xY$=RkSMv)~^GxeEX%5uZK@I z_jlXxN&M3!ecRAQ;5O1|C0n~3x3-%Y9_uBkWaqXRqKrw)7ca6FCstw^{Wz_ZTp{CW zOzRgVn9X-6--)fAkZ*I+7cSDQ0+DpcFOByJAip?t<;*CUB}xCzWwMdlcmR(M%cyNn z4sR|OIHc$Lcz^YZ^$_*T%mYA$v_L?WWYCnmy>5=k0lv5Ti%b_C6l8RxmhJ`rG``eM zM?$NQe=ZTrZru%uP45QD-<16r1qf&uh>BCrcsft3HrV~-?UWNKC9F0bghO)(Bz_~5 zMTB@H3jrjY1ud$`Udg&iBg@v92KZ`g-4%~ghQmF*FiV5j)*%{*OrjyFDc0*CWWJ%O z$Q+3tbkRP{Kl;*&%p7XcmRYCob*dC%ui97gPkq6U=I{2!Devp}WHQ4^2;+vnCuQT$ zf=%|=8M6AfUOHjJUtuA*edd0OINdjgA_b5U=SsjCUE0C0NC3@$FqvUm@B1I|Uq&@L zG&&~mg`6A4gz(fNEcbdq_oHBk93t>{J-c#+W(bU_+Jj-n3(Hf?RXDn8!Xepkn)IPv zDhUuVXiC;jr}mRB4`ORb*b{|ZY{(RfrT&d&90lGH@_nO{$p#Cw4gA5;%AYxu6kvE? zwN*qO*j}#+==UR&Y|7PmkUHZt=A9i}WdH`fssyE{eWR^$6$|RbZP>15nN^h&womc! z=kY1``lm1%NA|IVU#uauk0oA_lVS?T7U*hx=u)!44Z<)mcTXn+%w#K*Q`w#e6FnUw z=-&KXppyHrK4_?$0Xef2Z!v~#o|OTS>SnuSy7OsZxlczEP2j_J=XdCQ7>g*bJ+Q%P_1=p0De)* z>^Jq2IH;cqqJt8p@p1`cs35py9v2XBi=Nt)O!*o*t1vVkN=;0Fzk&9Ym%s#a>J>e& z#h#3Dls4h0-J@Lt*;|`Ekkm$79{FU!2zSD+3L52}WC7nT11wSubxXcStv8C~N9dh( z7-WaQb|?wU{bwgh^SLL8rV9tzx2@e0x8>${Q(mkB@BIG$ zFSpSHd<2Oq77${pHna9|tVu{dHb`YcVhaA4ED} zk`Qc8bhfJ)!{~d|MKIHsk)E8dqwLtiFJ%#i)!;nQa)#ca`HRT`CFo$fxP_)!5{(A9 zP9pm~(H=+PnvZ_vJVIBxJDzlP6CKLPb3*^~U5V|)&)xg(6n&C3bnm*CZkBaGiX@pn zYcOeF;$d5ig#SmqK`z~C?0)RR2E4j_(?YLkHDjj?4}7cP6`f11`~TKv4CN&v_XVKT zXf+K@W@m%mA>A(rZ*N;ep)WT-0Vvo4tCEoui-KCvNR1ZsAB#_9yF#{&S&KYy^x~cd1t&$^51}&p3}I`{)+pa7k*R=94rT} z>>rxli1ib(LLRhlJ}bEmSL~HO$fe)-%;_}SrT|M6wNVWSv!%dcQoob*F8IV5qfI_g z1lBU-GW|Vnbb#cy`+ep1xrEB<@k{8#322@{6!DDG%VDS(^oR`ZvpKJvWKxt#pXj7g zpsPOLWP#;2KY?z+ZnJy?-X{5F;)GZhejBDEwd+&sd|y~>H^cD9j9QO=Nk4WldA=AJ zr;&;G7$H9gz1K`K%K&R&YA$M-G>T~&7Kr{uOFI)U-Jd{*w0$CWa1J&JP-@ry?oljY zGouSz)R`JU0<0Sda1N0n#ETqNGroO`Oluc2#3rnj&VXQoR}pK_;pyyvnU4W;2*8P6 z=b9=Lr~Pymke~CA0ss&b{{dewm}ge)NntxVa|4g!2l3mGJd>m*xHZe!rFQP4f7`}N zbhe3^p9p3l==-`rf=Y`8LrPM{cGS)}Lu^eLdCgnzfuevJBT?9gRf0@$as>)Qo1GQh z;J)3?R_v2Yx2D>bw4ey5mr=lNRwhINYG~HMM z=H@rCHBnT?UN+w`u!SoN0&MvjusYmA7FL#6EnV^Jh0R_{+RpAPFK`*qju7hsXy#p; zOyTl$&)c0YtWp{vwH+J3;ZKvhoqK~IcNn7d5!O&hCZ=xwba!gtG5b*X_zr|>#?0Sjy~j$ z6C@Ch&Qdv@vbXQo`$>%|IQ^3aGYQo;rNDo!1e?jfh#Trkz0XKokgYtj*4VMsbXOil zu$yVNWA&WLHJvKLMKM;TwuwahPGWcVcjDp3zu_TQU z=8wrF*?}gP9ST@h7o6`?;%nd94T&*uMdhP&!?+k~Pj0-$QE+o-ews5x%l~;H0D8f4 z3*H645F9Q8!j2cz4NxAb%g3iyCYUkkL6rKec{bHoL`=(68hf}CIvf>t9G9~Zf;&NT z(N>Y`#~*}&K9wZWRa)S{d!vP_mGRpGuitslMK67}b3atZk~fTgF}DQIXmE`i)Mlay~_?RnH;lW3oR)*CGQ=S z=2-SCx~uL$8>VJ5OBCNOSZ7T(eiMUS|9$aNqcfg|<3wl(TUZ4-%?PQQX(avjVV?L1 zUBQ0#QA~nn1`V77=z_Ay4 zu1m)X0wtJ2v!Ao32B zsnHVaND9BGnCX6aoMw)uCX^wqlO{~5+E}*4Pqh27bT{{!^grRxXmx6cBde_oGrr0W zynNZ|sHnuw`1g(VI0qV?8}?4W2&P2la^u&t#83nEI0L~qmOh6=@OsM{c0GFNocq)3 z;%5(>I`@N__=`Q~#+IxO4T@DDAxSQR7R=U+ee`%1O82e{=lxSOMswcY6ER)*Of<5;DKQ@aTaG+GawLa4}%tud0v$2kjq8N&w zMko*f9D>1Vwr6pB$$G9GK>kJ0G*?)hkp5Rovt{3Mb+OE74DT_I^rps=DPcC*p3ZOQ zn-Q{A_E~G@ZiQQQUaQ$`*s3LnRqn98E6mr<}?>hdWw?bv&#`68C9%>NO(`n?)hXidKLV6)MO z#q_PDi%?e;s55jrb&0H7{QvAN(;v=-Sfd=QnJq49Phs3-OQZkE@nF>#GF7He9z&|K z|B*TEzxonUHfr&Ai|1w2LmJ5{!~$l&g8 z{xMv~D3M~*LOZ3Cqx3jH`#QoTxWLZ5d$g5`sr^Xs(5szU6g^b*EC84Wn#Lix#eu$i z}{p&{~oRS2nUCb|f| zWJhkbou&X8Bi7M+OE?a~vp>Q<58Kn^$L9|=X^E2Eam|d3;L6Iiwo_~SHB@R6nJ#Ku zg3IP?9>O`o`(ZYm-51c7Q-xm(o!b78lc{CM7l577boQY-_8xjqaMk?zBvK9+lo>yE zCwQQuy6Je?s=jMZ*Okmwu+6_VcJQyCk*&_MWVUi&u594_BA+x1XqLUJBNKWvYcw4& zHgz|(`j+mMzy3L6K%7>J6dz`|EyU$o(6T)5jACQXSfV8HkSnPc-JSsFix9kqAl7F+ zYOI~j^H%e|$;Ba`bNfpMP{V(}XH!RIvUJrkK7~J`R;Eo*qTlnQY7SOZSrS84-r(Rd0i$Fx+uu)XhL~M}~HyV;VaAtRjXc zHb4t3-T_hlSq!Q*>29yYdu)G@2ESe&&oe{TH6f`{yV5fnquMTF?j~R%cf@bz$gy#d zlcz13t{y&@{PkHx_0*^ItzMn8cXYz-lDYrKsCQuF+znH87wvN<`P`0(p}tC#72INn zeqOZ`%)(0hO;T;0iUhvU&2WvhFFQkRGNaYY&}0^tRg`L+sqv$OeKmV%P~K0h-ik%Gex`vf?4p@{&XSk+&g%UjHA)zQ51ZH=yy7#+^_2BDZ=emuRe%&` zfkNBb;Iv@RkPdvzO1Onrh?VD8P_F3HVY3(Se(0KI#|%SQv*M-o+$s*yNcdo9)?4$z zp_b=0iNc@jOuOu863dT`Px}z#Mr#6kRCa;W1@vba7eY6tQVuP|{{$k9Q|v@YVP~%? z^4l>uOgAY|c^qWW(*90tCjWU5T_BZ+2`NJZ0+$_jRG*v)BL9AjT7L%ARPkYB{pj-4 zw)h0IzAPTT;PlV_q`8xd;`w9=ZgIfJlmA%(@(OPl^bdqSB}UGIIQ-B~08>*kMoiKT zMEji}?oH|8ZH~tt%!>^Tkmvev?i52$HRAXETu!A)r0D<$UiDm~0QA{u#4>`Rxx{T= zAhJ8-BqMdx_G0x)jCW)TKx;bfj|AnnAW?`9-F!|Me215gq>j@bZ$gjPc(JoUQFijn zbRc&T)Rjn;&gsYL`s^tkfQzt3?c!fnC$}-0K`s1R)${HUg(7q5tvhr7Mo?wJW4Ra-@`c zqY%meUWG4uWAoducqd0V8!m2UL%Em7payX88N=K(aIX!npj^$U6kZ37*YcjH@5nq$ z5VzU*wl>4K&@i~+(N`+d8N*9Sk)8gjPBukJUquvH)%-|%9u?us)?A@ z4q#ENNHh!I2nnll64gvp*DLJfms0%j5FyewHsW*+uMC)@%Hi*Usf?k8*3@mo%L^w$ z^g+IZOn52^nqTI9tbHdV;$_2bQ5DL=$RVa-4%gTcg0qQuZ{Znt@p|qE07`E)Agf~n zT+V8{yUzcCQ&s4_2VS8O%gPtFs_%X)DjeY&=}_j_ws|p`rt&*VgpVdSaasRv#=tLr zJ6eK$PjaZR0LhPly;r&<2mFmi)>qVP#$7t&N}OVjnqy!uj&wRd_jIgFWIvQohEVux}SJZQu#d}a1uMu&8xC-vw5bX39JDj1Rcv=#ZCIim58`furVwf{?%VO=-^`QfUqqXsXxN^rtZiT;>Cv~ntwVeK9vSf3>K}#8tobMM%P~31k&p*3%Ru|U8t@+z4nHDH z#Qg?$A1O_XxlUmwdv}RU?KI+FOsMXde>@ zxa4~uo=iUwJvrx*y>)4y56CiKf$RW zog{`yTp}nWj>UA96V87pKv3+DQl*E-wrBL!trWtgoJW2RIb_-TT|lnsq;^T;2R5EMBsg!qB#9r=--zb;wv^%!Ov5F| zQ*Tj@aA_sK@5Upt*4>9YN4?p!=Y#K{clgl_9i!jZ;FHZ<-r=4sic359g%-~S${o`# zC7Eon6RNCb24OLdA{hV-)}gd19K?>Iu=qmRJN~_O*k(LV+GHwKss9}3PV0s@_2=a# zA)Z2zAMt25+dYWpG*s0lR@zo0O}7CjFaSoPKvsQY@IAYRizZ#fOa zihE*$!<(UZS3jZml@+HY{kD&3F89(<^!`ZMfDGsDFvgBVWS9zUeb{@3PWC+W4zm*! zMdlTW=w~?=K$LrkX;RG-ILll~3CshYxJWBxYZ@M1cjozf+t}}ky<8BNHqYqVhXIl? zKR!5SPMHkfn#q+qK%O}r(3vM$MOz6&X%Szy0)B@gCx77^v>BD~8keUwp2F>sEeYyt z6u9ve7>T5PCwo|>o)LoianzgN>^JebY-6<~7e_cEm1KeZ8x*K{9L4pe%yhWYGRM*% zg*&BfO6+d04$dC*2Mmd2uD)4zw{O!vgjxUwWm7sezUa8ex(HeKNiS3l3E>erO^%oK zKJD_CFqNbvJ$Gjl7~{J(ndagCOwg~x8LxOG8*X6DSrC;IQClVS1o{1Mv?w`2i`O;B zV_xP{Oq>>Fs{x;}2Jha&-^+AHEB##K+jV9SYc{4w(w%FXuJaQPValUnE3bClRKqry04JT*+m9Q`NYP1m^xHf30C~fZ`^8E zr`i$}{-1Vxv?AZ5aiVySZM|KuJak1{O6YY0>1*|NRfQlruZ5d6^IB;>-hJ2vhC-li zC?ix8-As7Dftqc83`VS*bYh;sgh%>k2Z@xWO6cY;_t*@dUnvP3Zn(V{aYQe{hd0gA zKLQ>*;^Tm5Xo_p6VoPmi#uRm?oNmP9b#(7bvXfMQ%wD_u^OjQ!70szTwk8qx!7cc| z?3iRwsRxV z`A?^lrl-hEo#HNw>73gtg6OH2&Lr8Aug4>p(Mo9~kemm6RikRs`F_ULl2{N#DJ#rb;gdKOIP-kU<4`!LDPaxWAIFrCo_3|ygH1Qi zcGH0FaT)PR(}Ziih<7gSEPC7fjQ*w0v_Cv0i_lEIi-rfwLP%WLi4j0 zCjn^$w`{SM!;8AlJ1SJ16VorHP7Pv1c+}qQ&Udys}eV~=NZIv z%ONXk3HP?;mpAKl8XlYg^wm1~lbpj2$Q8C8c=yXpZwloQ z@mwb1l71m;(>5b^`h9Cnx?@=Y{e5Rt&8&gs1vEV#UDiV==CNyOj z(Q1c54bwim%=VELM5O0JFU!gCzLjc=UiU!`^jl&@hYnX!1E31%W~hYn`|RV*8}8F{ zD9Ed_7B>ca@oTa83%Fqo#i5g)4x3`Gv z&4^P{hX3SNK7qY6O9sXX6(LG@zHe&6JFmgbPSM$4NIZ{0Txl3Q*+~uLfq~z%B`^b3 zMwL6I6*q5<0vT#PMH5$fZvERw#+QPCvhjmmASdkCwN80AMotTj+?eOe9ShYC78|iL zM?cMPyy=NUHNFb@T91{eTy~G=(^6SS%^&ctBW7G@RD3!lQTlc+dgx9)X|TERl)Ai% zzUz>9zHA0NL)FZhF*9)p1-C-LLMeSLjPFp6px*DK$cZKjJBj*K5g3<~-Np%IF?N2_ zpGJh$F_wmWGm~8CgGY$TmMH%$Jyb>=GPVn-s%+BN{Eg1Xd zaNfoPRxHPY+YXbF(h-p+JdJRN2H)f8GASJe37AJE%!*3-gCW)=xOGARB+3Nh(`v@4 ztY(yH&dmW+jO6m#xhxp_|0?vp^$KP557p2h0W=(Is=a3cr>l`2Wo#1RGkAwvd-and zG&(PI{=kX&fEqFhnwU!{6^FzFd83mqxpNlkVv_saJN)Jwf}>}Z#l2_z`zrM(NQ4ar zpBDi7$4E&kE(*3~Os<=bXndk`n;a~4g%-qNjAAB}ljxW+OV(_uP8raDBAZ^-YrK^a zxacNB3g_#{&z6Q>$-yo+@=%OSWkxU(&pD*|5S7PvwIit%Q{z2>$@}A#ivcFXX~7)>!NsZr&5TR&WNTJ(J|GgrQp*9r%A64G8tprXr-%A61nMo82Sg7c{Qv(JM6df7j*L zIjXwzIM(6?l$iY>-ef`XQC9mYVlWbW_MaP%`zb;_VH~818Ku#NaB$M&7#dERt-~*^ zZZ$$PLi=wx-E3DHI%!@1j!+(eTgHT)>t(&Z1ncqQXYa%dAWgP3Yed1ruu?gC>V4N| z5u7)#6>(t~he1gZ~NGRaX)gr@KKl zlNQ|19I(}8uUO6CTBH9#H{!E<;hSo2^A=4ZBDBRmJIX+T#XBd0H7dRv%*z0YKFYgm z_W-%sjI@B=0RpJIHvV+orK=WAW1VrOzri&U&f6|0xu6kZ%dH4ixI>(eEnrsSX$V^n zNY1Cs#ky1>3TUuog_y5xvjD)n#&3g-5JC$q;9Hy^E;-GNY8k*XFtQH%q@_7_k+a0*~4Z_Qj6Ckt2m<@ z&0&v#HQg{4Y{eg(rS~e?nk#YX1(Kuyzu#P6!MD0&jOc?;(r~PrA)-a@o z5UCEmP#M{`l5fF=) zZaz3tr&(}q!Gw5AW`&(9jHdj9-RAO|pML075Ku@dh4WgJPZSrL>jWui?zFVGF_>wE zZNc(Elb&1lFJ6P{qdF*Hw5#A!+y4lge+b4Y1?D$iH)0s$4`pzh} z;Wu8Ol|j=|w_m=syJWQhI?-%C%_Wg0UN|uTP~K@e^c4&ba@t3x!Y`WNn{yFImZ-tN z@rg))8Ggp#$q=_|@8)^d+yZNr45HXlmCQUKUIB?zQ1TyTwxVOhv}T8KI2VxpAY*JZ z=HI`UpH+6G238p8Yl9oRL{NpfVH zM{@|!KH0x5gkNAih9kGJ#q0~#S(v7uV{=BSg}piF9VQvoH{Q|R7|lWoRv@#@jv4ig zA*xtC*5Kzu;AJazIH6 ze^{s}KA>nRd4Jp^mClLI0VhcVyiR74b-=8p%wzO<>b9s~)U_<2_HeB#|9{-E<4(<= z4GbWAU=3>I>;jyCL-tzAC-^0MjpSv5L~)jW{SjTjk?jBlCo9vB$F~}PH~9nk)j+m| zOO}tSfS+&Wzy=6HC4RF5xJZmdYxZIoU(_YkCsA-0T2^tN9yy78O&q@Dmo#Ej%vUFU za1#a7UW#L5aC@oD=okBhH^5VzK!3rh&isHmhVhK>0QVlT>k|tFBOu_zp8`aPp%>72 zzKl0-+ZvGTTjpOnpUcF>T0GY}-nY@^_}l1ac?(y-%jQyqsie&`t1II^Ax;6RbXKUH z1bIgJAzVt&hOjO;nwOd{1WQ&L1)i@U7iKU9j;tYZM+OlizN-0{Jj+uni3m!=ndvWJB%xGZZb8KMC188qnKj$G$?I(#Yd)l&NKZSF>SpFC%c zM}D&7HonMPJ))+ok%9#gVtisH!CDt^>Q-LKtKmVsoGkd#FaOqv3AJ2E)mG< zmLW2+VwP=q3P4mS-)^m(y=2H21Iu!fT9qN{ToTlW^17X11I;5+5f!Akt&iC|W~Ni6 z#7viSPl*$6M6}vOzHWz(N^xO>{4_Now9(2^&5n!df0xVH%DV_Gg00GvY11u0P+V{b zyxqZ6Yo!(2(K^k8Ab&^jAC)%?<&4@ks;hnsm1*HQy2hE(gmAs81*! zfUenS{VVuqOw}P^Cr%n_|0|BdvZQ??oHXk?=QMNozG**z)=%mcBddghqZ=Pj?*Fadf#oW})K(Z8}bCwNNcqfr67-PnKlj&;G6iT7?@M^}`(t-1b};$V8bb zb0A0=3*F_}y%QrSNmqjF2cq(abi&~~y+m2~nR?~JVo}PRju#R6*96#T%#u+eZ^PC8sSE58jDL>bYEA|OGv6Dw_S+`Q+MN(yJp)sK|*QhK%7+6rOE@0?`|*n`0(05bDXj;JsO zTX^k=XNyI>lA4KKb|bh4P@$S+xdQdo2I0Na$l~jCoTlY3(^~AQ(4t#ReGs{jtc{;H ze+FovwHC9CGaIc_Vbk?ztOt0`BPS&n6Eb&2ym{Um)B&OA#L$r;od2_PmB$hD7YY5} zVh|$NrHw{C*d)2%l4L3G`}jqY0kmwAYrXPlY(7Td08ZRFIcUHbS}??B^&98s9gZ@Q z)$!4A=bjLTli`S4w%?`ToMVF-vscQyh9EsKN4e_dVtHl2CB+z z_c@|%RvLJc=A$2bb3PnT=63?Vv%@M8!)o6YG}_6z-!R{63rPtd@-$xd4U##HSnF{U z_duVM;aYAJDP9#48l~J1b*q51W(fw7yw>wIOQ~9zDgea^nAyjpWPh|1!>RT;{u7_f z8!ZM@D$5cM%zUcWfDb8(W^C3(!ejBj(NO%vE8j*gX1h4es^RphWdJGI4K0vymovUEckD<=`Tu$Mm(BF$f@=3NnwYcy-xZvX}v<000A`vAc`r$l`~+($yWw;Z93*+ z0Fx{s{*Rj5Ydf6AzIVU7s#*#!R{GO(8es~p`Tx3hZz&{vP6C4(uhZJ0GauQnD|X*j z&NOZQ$X~)&#pzI}Rqd-%-8IWef)eKGSl4+VL1ptJ$iW}3Zn{F|K#BeifCOO50EfUF zM!Gx>0nPRY8EIJ zPu09A*OdKcqMT|x2=5u8GR$m?L{E$b>k*9bD!NmTYRqUxcNJ;ysmILOnJL9X#~gcR z7-N*Pczu$=-QvVTOz#y8O^y2_U}(3OWK2cMW`gPbd%ac4ateN>gV0VO_{8oT2_T1m zNA&V6_Qj}IrM{7V=uq6Jj(`m4j$b4;c!pp7cecQVcNDP=JN&!xHkbB*KAJNV_|0ae zfC}m#ky)h|s0S!zUsM=IT>U;|amSsa?pc~6Eu5f-KRxsh=Q?Z{+QLd|klw8uE?!zb z=({nGMtMLn88p=Upe7aR@gblelsYq3R=-@JHrIc5rmv&FOrCHH65sg$Tm|I(($xdDs_VIwy$fsH-h3p%&YYXLmI0wzrW<)_5j>H_ z?(@8iUJ~M=Kpgi>Z1S@hoT^T}_(vvrbtNh2Vq_oeiyM8kkK*z%{4Zg~apzmeY`lt8 z%uRbxSFm6gtFV+HwpA-Z{vT%Sg2Z$#_i-)uI;Fv?nRl4FyZ4(g z@@9Y5)BS|WT}qIYu<#)sFiz z7j5PE6~P?AlWJz8X)rzUJZar|-_5+U`_@c(nh;=(1u2+j1{Da?p_nM)%}M4rhq!!U zRlhGMLv2F{XnuKPj>dXv>`JzR|7>@0JKXb5Xj|W>Z^$(8!-)HlG?!PH4OhIJ-zbhu zTruWSecuM|3nRug+$r{r?_04Qv@5q;ATm9i6`C;EA}U;#Q0aqwEbUoVYVLqJVI?ig z06p2W^wCI~Ju#DuJnhWR*>f%ep$A<~9h8SgN{(xuuM2=JL%Ml~P=mTh;BNzz3=OmS zv-iXNiea+0z7FMwlJ*z(&CR$gKu(48maEdOA5=o@`W%M1%ZN;(N8f>bU3GYB1^G#4 zA6f1^gXm)jHm#5HqjLx9*D}*o_7dTko>4iD_vFf!t!??<;V|*eNGE|oKq<-iNJqDO z?IAx|pPvy{`Erj5WUKuW^ZdFw5nMq))b5YaMRwO z5;H5mZz?!=`En|JeZxlf6%c`xkw5;}c{eh^12%BhV-tr1)Jjm(-NeZCNn8R6C?Alx z-%x2=?pTzVeeWKJ7-QpY0!Ov=nQt0sOj9qIM!G)UagBN_(P3oE#<~C2p zey;08=Z!n*-qukGkl=>Avjv$qW?-+S!2^rxN1u}_M7&Nd0<-`WjhJXZey{0O_5;`O z#;vAmi27(SN;I%CBh>8&lxPMWZFH~7S`v)F5xUNje?56x@<(s3pHa+Z7i&hDwFk>@ zZEOGo`UI_#hFbJaA%Vh21T%EGwDI)H|HqQ|0sc*YCRElO$b9_L$f*~oYt!(*&dwG- zv%%~MO&Du`kkUb-K0aV*{5t_39}7NTyY(T4*NFJTsGh=yTOxIutaB6|e`$c07v_kZ z#{H39i-YnhR!Y8Gygj4Bc?(_yeRTYc^9P2kNEPYq8MIc%Y%>Ucr++ju{&R{=LCymz zX^Eg`|D@#i`@$S|0_=WXKt184J}c5zWF}B)t=W@IGwGUlPYYfUPTp3NWw?`_E{T3x zXI@US?<{mm!?)8FKuZ@JK#7vil@H(BrC!xjmR{=xS`j=km_mjMfF}KjD|wUJ00}%; zKdJJ-<*8&$k|4quU=(3ng_>$J1S9-ZJLZkOcKcDNx{I_e3TQvunKW?59s|8rqZWjWk+CQj zz*bZ3A#ZVS1q68I^NX3R(cZLr zD%I*ggpXM7+KQ;>s?$w`_6ag;e}eX-)Oa2>G}O^<_@d_XM~R>DC?^1lx_POxx`(D5 zTzdj%g=6i^XZ~%*Mkz*VZzMC!^mJo;xX~W`iDc2U`lQA80BEp4>1S8nX6APKX6iP> zP(z8;9P00M)hT}H9mt48T7OUoc1|ZDr-z3T;8Vqq=?W$&?~ky1B4P@E2arp@E>5a~ zGh5Rm^+jJ0`1h3G9n<JcUoNu0!ss9R(*`6w0zv8A?z zxEV44CtTYd5dNO4^7#B;14+@17{6(n>M7^_-m&6@3A#u@vb861Te@Y)mD#OhetVwh z{@bPVxNjW{n?Qqzv|626ji& zeQcAC?*h^T?7f+Xgl2*fcw3ohk>FphZAmkwRaZd#%g4)<{Qy_hx{X+ah4jple=s|$ zDL4Wg$e^vs3dQ%RepP|&neOVYYAvb0sN+XsQ`mbtP?^KrM?G?JOEG90Zs;^k zrIQ^3u-j2Bus7l!|HN`0s8fBtlN%UOYP(rG9=lTknBl)ASEDy6H6EO7A*?^A31R`H zH=BwFa6AF#CRhWY2oV4P#?3bQvdV7Lc8eDioC3rJK=`5*8Su?C#=Pbqh_~DTytMS^ zs$J;p)b}e^>P8r|+e@X(mn3j5?S9j~WHXRH5zlcL@8sO_$~gMr*aGsycw~^k4=B%W zlG$+AwLe!pwRoHBa1aXkkHoFEmNNyVKS?%f*@A>t@oe3FNn)E#Dee&mZpnjTP#Cl9 zUQcbQif2Y_4;764sRTx-9_udRzT`GGv*B$*Gne@*+L4ckLYUOPbtmU$nGLBQ=-dXWE=l#ez7iC8$zWc)W8d7}0gLCaYIN_A;@YZ*@NUPGEP z*vPKP!c=tF^P^Y)31Ax_-Tj2rtK|}?o0YK|;{+YBDcBd0#5<=>HAz~247bt{A5>T{ zl$H+5H~5^lpeb=n_@6RS#$S$Do6o&T9i&o78_1rw9Ia8wlATYzshW|G>*+Kp6%|^a z89|~4&duJU=aO4W?F>fZ`BSn$0QyaLz6}kJS*KO@^*7U|ciM3v!hQJUQ|EjIm9O*{ z@F|$iOhU&rP~-;g={|DI+{Q3$Gy~ax!iT-NM&fuR5o6_@2jPWA`E(WIIsj*iV1W9VYw6Tqr6G2qp&I(f?KuE4`{UMRH`57ko!miNZ-y&QcAqu80)=pf0l zu=t+-XY2{1*TI~z%>W-=6~NnBLof<>3@VGXNHi#bY6!Z-FS7^H&*IX&_Al(oAwu3r z9#Dmbr2BCIB226Vz>sCb!j>7e>Q#Z^)um-2Pe1?wH(0i^iVpBJS->9$AeZ$?-oeQET3+@w<;V}42*Z93r$>UPcdUmIL6`0-^@D4o`liQM z^8XxyL2a$3KgbHAmhn`=aRSpGY^xoBqn4QwFZ|&lThkTMX_PNtYS?nhX~5i>pskb8 zzZzxcm%)@oV-6|pF1bgSnrN}^9oY{eEOjiO&Ywa2I>QJfn*4qRqM|CaP~(0quzgZy zD&srjH#_skpQnp3w!)z#HaCI!KHvK3lFPAhno4>Se0jgLyH46I$GAA+9S{oNc zIvPr65zS1P7Tb(IEkM6sX9_T9N=i+PCM}acDk%GS6sy{7y78Py!A%=DjgmB3li_b6 znC!Yl&S#lQ z#flcQPqczO4^}_-OX2cSU@}Cpv_gZ`FB1b&2qNPBOgmoc;H4Q2DY9!w;k+`F8OEy( zgXOs_7g7VkX4T^0sY*ZFzDn;8=chs!1k0>gs#n0DsnMcNUL0O>m2I$EUvj%TX&lg2 z$HiNF7Yb1^2}Y(6{7{?&QvZS!-QD;c*s_m&#aT;p#`YtF45WfJQBMP-luen3EXI?J zI70AAEaV>b-U~^ouO)tNa1Zso!ktYDBL(+uNHg8tam$|metDa=Co6R=u+QY6cXl52 zmKy&9U<~j45e6sVSovtk^W@+lr4D}PbrHJ4Sgf-1x`a~E-Pc8QlxgnN?;Jin3u6Xz z6l$UC8D>q}*y;n^8HFHZwh-D)wa{g3wv zhCfbCVpnJ0G8Qfef(_gozhziaR2g&z?&-l+SZQF{5ReKj?BPv_*A(k+a10gLEtvMv z{4YJF#74&dA2hYbM+L~V8{%zsRH@T>eJE6Z9T)>**G~7it;ha|$@mnLxNawqpZkWY z@6PUJY$PQ^GYglGt-F`G&^LRd{YAxE^mBeIl4j*|m^+8;AE8y^mOK1*DXfg(3Dz38 zYmLoUx=?PYd!j)Z(y(Q6YX_Jb*@FlpH*? zv7tJQQQx@6%;$%ydo}Etqyk>}_F2WodvGz<%Ms7RyUS&IdCOucH8{8nK63u^4{M)p zZuQ1)yUGgjkPCTVs6Yx)xart$@bKE4*`%|~BGVZQAEHNCm54|p%Ugz&p47gkH(@p< zM3!qlOLqMD=g^*fVpSll(}{FK@D6wGFqsrWk$>lM#Qlbm{|Tj!sZlY&o9cPB!Xj5u zT@ZC!8nNNtB(x)BDq~^m?)H!~f8W!?El>Y$3(rXtuU`xov@U!!|KY7P&>;TEfMPyN z^HDxz06W;6ZH<-zPJ+1RTFaLpevD!Cv;)7C7U}wYj4{yLjX*v{vZ;L1Ac<)-A)(1W zOd(g_#WSkmYQOGq%bEz5L3*{P@Yn9LltqVMU~r7`L(xH|JBI=uSvfXqGL_)&&o4?Y zkOEXXB;t5@1F;UBNX^+wn(jLYuP^y~uy>_gOHRDCA>^K;HKi-+B$&@7uv}93&m%R$ zA*x6Fb!-Z)cN+jatWx+eCG~DQ!4Qu-#~a=tjEI97wc2+JT<+(3cc~MRJ#6}ucyV&$ zx+($TjFSw7Q-KdeI)dIYz{deY&Yo~o1g%YNZxIWdBIH+a$zWL@8c<*SF$q|87zKMM zKkA77fejn|6)oF`7Qy~rRt^~ytO`og(#uT0rOQm+R;>KphxK%aUDVOqjNrI;&`q)m430RN zA8K<}%#38UzRJ3jyxakMjLpX?21s8%hWdov zEC7`;&(7+5x+1)yGp6RcpAMFjl&y@2tn`;ZU;N;uEIZ*-Gp3QS#2uR?TggV3yq^{; zn4$)7QHTOG;VEt9qH{>NTKpVi!QR)PSA?Ql$F?i1EUo_&&nc^(TrvkA+pXccbeZ9+bq4o0S0N8ago`0F;(41F9hQtiN z16oDm%x|)cWvZZ?u+vsKAyofl1}6i0-*poQsX@o*0^FYejBYXHgnP48IN4 zHgsQnO_<2=P2dH@w04IMD<-WYuHrk3G|Tv}=<0UT5+YyWCo=SZyz2gqmQx3%k|2i_ zb5=evuiN*~WB2D{JL9GD3fqD~8p}iqjJb-(lPlOC1tNl-b|G z)2|>!u1QSTOK2eobNL(zzN2r*Os($*%eZu-2PvsZ-?{$_m4K-lO0|@_M9a$!tJQ=k6 zxR-0$+|lSk`oL_VS|e{y;cDRaUg8(JJZMBe!``^l_;h>TZiU z;e2XSRWCDM1okRR7&d163c;x{MZBW8X!Mj$AT8*bUXft<7u5afLhmOlgwEq*s|9ds z^nAK1PZ#vw#vzenRBqAplQ(E)bYFOWGr-`U)kSqLcc+9Xnr#z#>5rk++mA=HO}Rgv zv(lD07lH!dJszw;9`tIyw=J!)-F3eJav`Bm(B%3i1sOsVEM=8Khs(}hC3a3=0P-Z? z^;jU`NEFRsSY@xVqWqnca|8B(*l)NZsQx-`U+8JsKUDEKyN_THz_1SO3=Y~1SlZy>9-qDkV zA%7c#^7Hz4TL@Rdqp!A|NQeM&3I+mwhaa^=LEAljveohW2Rn}HVN+4}M82H#)jw+< z6SB5Mnx@OHvy1?nFFDnKSqKXZ3~4#|9RLT=&;U7UhJs@70gVAg-cT9_pO$$5f=d$f z4$g`gS!)sVGJ1`X-naed(R|q*#C_GaL&`CmtCrTyQMl*rIsEhbI#$p`EnOWUqs;M9!?%fw=LNjEnANc+Osy;Lk(Trbta}+YlV)@e*#AA^K@QKTfRJ)8ycD_0=&cPEh zbDe=#J!-5V#e-PI_A>W4wmytAI(@l3 zGXWID<&o{GFWJlR3Sw4rD3Xq%_{>M;pLkL8if26ab;g(_jt&MTf0_8LFezzM_pg6nR#CTF8T(e#?4>% z@&{=<4$L8gzC4Bu(dhPBMnA9mbgy#``wETo$dy|bx#`VdcTd3{tY1j>D>(@Zrf0*) z_r@z&2q~b`j_(XLT+6@Jp9hCKa124rdg7DDc8tz|Iu~ETp8k{ZmUTfPk6z&dWu4pX zlzDBR1fZNeH=x%%j5gtT+3dpWBY4;GbDuu?kaNL|tmd|uSPNyoQX`B|OX9N`BkuMk zRq98joHRTF+SS*ZHtxGWA1r@@jZ9%~H?9=z+DxM4K8?vLryhx8B~S*k_1;K}&N5z) zkBBc!wY6BPMXduN!$Bpv%4|cn#PMa;rH1xFk`u;0-No}`PX)~Pc=SIt$DM7Si$+`0 z$$R##@WxH7EJV|zP1qdfZ|L@+^l5jL{@(6mDYgMUh-FAD03Bx$I~6E;2mL)8le(0p zw~9HPKoediC0doFmgL&8ri{ND0(UA=xq~(VwlL9Kri%U#5>7lJ=B=Hai^&e9_QLtE zFFsHS2P|DOrR6<^6x%Bi)nqoD9i%r+pjVm0w8SMR|9%TTS##ZqL?K=?*!k+V&BICl=r)?VXrMXnr&tpf#^n94qa z#ndNPkrI51>3qiI@>E%SpF%mZw!@lPB_(?h$9+VHk;%wc*4F-WYkW(S!kn&+c7EOhK4Z<$c%8EamQbl4PgN+9Ft4>(sFzh&ktjQ6?soV zEH28ocuX;GCkuac&)sH0xRzSxV;`QWv61#5ARv#8$1LBlR$nEfwf3USqf0r#JcE9= z`oh-NQmVS17n8(vPmE~xAMr2p@;YuRA^WiEw!Lt@X*Z2-zW9E8?aYlq%{`}{AC|~x z;B=tbdF~nd9Q)(XWwIHPkAVNOtqHG_xnJ`3*2#7$GYo(6?gvYPuk_J85bI0j^1p_) zy8ryBH#xcNubVzcH247bsLlAIJB5%84;$KHG+{~(QDnv7BGlmw8Q~*qAj@z34@p=V zjKWV?z(ItGB$O_L(f?PIQQ(>82@=td5hccjc0(GCGBFjkn;TbtgV1!?>fumw5EecL zG!*Z{E~2up)}PZ9ihzNphwR#{P%`<$v;gH8sa5rETjivX`qfV7OHJ*ogf zZ_@TzawSFu(PrJ^L&`adEm45`t}FtrOI@|iL?%9|kkgD9VRd+Qy+{v+oRDWBnFToc zou+u{hJ6W#yfnT2r|?V=v0K5~&gO!7YVIi}k~OEedux`;S!N#%$iZQ8&52u`mezo( z&@`4_?ha1@v7HzZtm8IRoZDFo;y0hH96$Fl>ORWL@L7r20jY<60i}(X-6#u+sUV`E zjXG=vYpLnKtiQXxd5&df3J7$Csqsb?74GKcM$@s>1**Un>je)tE+Iupt;HsbyNP9G zsfCB$SFSWl99XLnZ$Nkdx(|BkLs^WD2-h=@7Q{3_(kFA1tuIc2nfNA z{jYq;V49+23y9^;oQqr+e+k;>RltF-ow|w3#rX*m%fZ2Ff-+cpzJ6&fi{*&53`6&0 z`kk|%Ydv}fqX`m2^jMbkSC+7K=}8FEMoDFqVY47dKc&J&1X!ax&LYZaRIba1%HQGc zjZTMC+TEO3NS&mUW%L_itcYa^oebj3=P+3|dqWiEHSbB6Wb$_g4a4!Oi{=Sl#{Du^ zR_y?xM`{y%L<}vz#5G|O?CSoce04#@p(;M=qq;rxdjmNjCjM3x|JxOpfqy0Rd%xGI z^#lH*x@AQdBrojuzLD@Ca&NglJaZIM4?=QgQzz)_4U>08QLNoStk-DaQVcgce#6=-w_p%~avQLGKOt)TRX2?+X({gJbahVS401g+vL95@9<5v+FomesU{TbQ zZN>xEY_9@XOwK11Cr5#NRj78l6HW_uH~f00m&#foy9;~2XS?GHlDxo??DG_G*+;ix zWHfbJrsUS}%bnts%}#W!su?PCsATbF!TG^Q8kkO3^@1^($6}IeNYA(AIS|Q{zexku zAmfFGXh{ENwV)9y{J>nV19=mttik$RMN_f<{L$Ft#ky(^I-ydNCbH}oz~*ui*t)kP zoSjSd-EsPzjsv%}sl~>-?<6+rXy;$HRHnYql�BEK2Ygk1l)G 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 g +#include "max32657evkit_max32657_common.dtsi" + +/ { + chosen { + zephyr,sram = &secure_ram; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + }; + + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + ranges; + + secure_ram: partition@30000000 { + label = "secure-memory"; + reg = <0x30000000 DT_SIZE_K(256)>; + }; + }; +}; + +&flash0 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + slot0_partition: partition@0 { + label = "image-0"; + reg = <0x0 DT_SIZE_K(960)>; + read-only; + }; + + storage_partition: partition@f0000 { + label = "storage"; + reg = <0xf0000 DT_SIZE_K(64)>; + }; + }; +}; diff --git a/boards/adi/max32657evkit/max32657evkit_max32657.yaml b/boards/adi/max32657evkit/max32657evkit_max32657.yaml new file mode 100644 index 0000000000000..ab1e11c74f5d2 --- /dev/null +++ b/boards/adi/max32657evkit/max32657evkit_max32657.yaml @@ -0,0 +1,13 @@ +identifier: max32657evkit/max32657 +name: max32657evkit-max32657 +vendor: adi +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb +supported: + - serial + - gpio +ram: 256 +flash: 960 diff --git a/boards/adi/max32657evkit/max32657evkit_max32657_common.dtsi b/boards/adi/max32657evkit/max32657evkit_max32657_common.dtsi new file mode 100644 index 0000000000000..5bc950bc16700 --- /dev/null +++ b/boards/adi/max32657evkit/max32657evkit_max32657_common.dtsi @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2024-2025 Analog Devices, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include + +/ { + model = "Analog Devices MAX32657EVKIT"; + compatible = "adi,max32657evkit"; + + chosen { + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + }; + + leds { + compatible = "gpio-leds"; + + led1: led_1 { + gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; + label = "Green LED"; + }; + }; + + buttons { + compatible = "gpio-keys"; + + pb1: pb1 { + gpios = <&gpio0 12 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "SW2"; + zephyr,code = ; + }; + }; + + /* These aliases are provided for compatibility with samples */ + aliases { + led0 = &led1; + sw0 = &pb1; + }; +}; + +&uart0 { + pinctrl-0 = <&uart0_tx_p0_9 &uart0_rx_p0_5>; + pinctrl-names = "default"; + current-speed = <115200>; + data-bits = <8>; + parity = "none"; + status = "okay"; +}; + +&clk_ipo { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; diff --git a/boards/adi/max32657evkit/max32657evkit_max32657_defconfig b/boards/adi/max32657evkit/max32657evkit_max32657_defconfig new file mode 100644 index 0000000000000..25ef03ee5131b --- /dev/null +++ b/boards/adi/max32657evkit/max32657evkit_max32657_defconfig @@ -0,0 +1,16 @@ +# Copyright (c) 2024-2025 Analog Devices, Inc. +# SPDX-License-Identifier: Apache-2.0 + +# Enable GPIO +CONFIG_GPIO=y + +# Console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# Enable UART +CONFIG_SERIAL=y +CONFIG_UART_INTERRUPT_DRIVEN=y + +# It is secure fw, enable flags +CONFIG_TRUSTED_EXECUTION_SECURE=y From 594ac784a96f790d75478c02ef88ad2f71592fc6 Mon Sep 17 00:00:00 2001 From: Sadik Ozer Date: Mon, 13 Jan 2025 15:40:29 +0300 Subject: [PATCH 4/6] boards: adi: Enable jlink runner for MAX32657 Enable JLink runner for MAX32657 Signed-off-by: Sadik Ozer --- boards/adi/max32657evkit/board.cmake | 5 +++-- boards/common/openocd-adi-max32.boards.cmake | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/boards/adi/max32657evkit/board.cmake b/boards/adi/max32657evkit/board.cmake index 2c8ea68612c00..09717336e5fda 100644 --- a/boards/adi/max32657evkit/board.cmake +++ b/boards/adi/max32657evkit/board.cmake @@ -1,7 +1,8 @@ # Copyright (c) 2024-2025 Analog Devices, Inc. # SPDX-License-Identifier: Apache-2.0 -board_runner_args(openocd --cmd-pre-init "source [find interface/jlink.cfg]") -board_runner_args(openocd --cmd-pre-init "source [find target/max32657.cfg]") +board_runner_args(jlink "--device=MAX32657" "--reset-after-load") +include(${ZEPHYR_BASE}/boards/common/openocd-adi-max32.boards.cmake) include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/boards/common/openocd-adi-max32.boards.cmake b/boards/common/openocd-adi-max32.boards.cmake index c231f5ad1cf2b..c815a0db64f33 100644 --- a/boards/common/openocd-adi-max32.boards.cmake +++ b/boards/common/openocd-adi-max32.boards.cmake @@ -14,13 +14,15 @@ endif() # MAX32666 share the same target configuration file with MAX32665 if(CONFIG_SOC_MAX32666) set(MAX32_TARGET_CFG "max32665.cfg") +elseif(CONFIG_SOC_MAX32657) + set(MAX32_INTERFACE_CFG "jlink.cfg") endif() board_runner_args(openocd --cmd-pre-init "source [find interface/${MAX32_INTERFACE_CFG}]") board_runner_args(openocd --cmd-pre-init "source [find target/${MAX32_TARGET_CFG}]") board_runner_args(openocd "--target-handle=_CHIPNAME.cpu") -if(CONFIG_SOC_FAMILY_MAX32_M4) +if(CONFIG_SOC_FAMILY_MAX32_M4 OR CONFIG_SOC_FAMILY_MAX32_M33) board_runner_args(openocd --cmd-pre-init "allow_low_pwr_dbg") board_runner_args(openocd "--cmd-erase=max32xxx mass_erase 0") endif() From 4b259ff80da561d28724f409ad5d51a56f8f364a Mon Sep 17 00:00:00 2001 From: Sadik Ozer Date: Thu, 8 Aug 2024 15:53:25 +0300 Subject: [PATCH 5/6] dts: arm: adi: Enable TRNG Add MAX32657 TRNG device node Add TRNG in MAX32657 board file Signed-off-by: Sadik Ozer --- boards/adi/max32657evkit/max32657evkit_max32657.dts | 4 ++++ boards/adi/max32657evkit/max32657evkit_max32657.yaml | 1 + dts/arm/adi/max32/max32657_common.dtsi | 8 ++++++++ 3 files changed, 13 insertions(+) diff --git a/boards/adi/max32657evkit/max32657evkit_max32657.dts b/boards/adi/max32657evkit/max32657evkit_max32657.dts index 692952fcb6493..7cee4e1127711 100644 --- a/boards/adi/max32657evkit/max32657evkit_max32657.dts +++ b/boards/adi/max32657evkit/max32657evkit_max32657.dts @@ -46,3 +46,7 @@ }; }; }; + +&trng { + status = "okay"; +}; diff --git a/boards/adi/max32657evkit/max32657evkit_max32657.yaml b/boards/adi/max32657evkit/max32657evkit_max32657.yaml index ab1e11c74f5d2..8290aa1fdd523 100644 --- a/boards/adi/max32657evkit/max32657evkit_max32657.yaml +++ b/boards/adi/max32657evkit/max32657evkit_max32657.yaml @@ -9,5 +9,6 @@ toolchain: supported: - serial - gpio + - trng ram: 256 flash: 960 diff --git a/dts/arm/adi/max32/max32657_common.dtsi b/dts/arm/adi/max32/max32657_common.dtsi index a9d69b0ea0b17..e419155bf23f4 100644 --- a/dts/arm/adi/max32/max32657_common.dtsi +++ b/dts/arm/adi/max32/max32657_common.dtsi @@ -10,6 +10,7 @@ / { chosen { + zephyr,entropy = &trng; zephyr,flash-controller = &flc0; }; @@ -136,6 +137,13 @@ interrupts = <11 0>; status = "disabled"; }; + + trng: trng@4d000 { + compatible = "adi,max32-trng"; + reg = <0x4d000 0x1000>; + clocks = <&gcr ADI_MAX32_CLOCK_BUS1 2>; + status = "disabled"; + }; }; &nvic { From 1a93309644ffe65b8e43d10240205c40139c1529 Mon Sep 17 00:00:00 2001 From: Mert Ekren Date: Thu, 27 Jun 2024 18:45:47 +0300 Subject: [PATCH 6/6] tests: drivers: gpio: Add MAX32657 boards overlay files Add MAX32657 boards overlay files to gpio test be supported. Signed-off-by: Mert Ekren --- .../boards/max32657evkit_max32657.overlay | 13 +++++++++++++ .../boards/max32657evkit_max32657_ns.overlay | 13 +++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 tests/drivers/gpio/gpio_basic_api/boards/max32657evkit_max32657.overlay create mode 100644 tests/drivers/gpio/gpio_basic_api/boards/max32657evkit_max32657_ns.overlay diff --git a/tests/drivers/gpio/gpio_basic_api/boards/max32657evkit_max32657.overlay b/tests/drivers/gpio/gpio_basic_api/boards/max32657evkit_max32657.overlay new file mode 100644 index 0000000000000..12c94d3a4944f --- /dev/null +++ b/tests/drivers/gpio/gpio_basic_api/boards/max32657evkit_max32657.overlay @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2024 Analog Devices, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + resources { + compatible = "test-gpio-basic-api"; + out-gpios = <&gpio0 3 0>; + in-gpios = <&gpio0 12 0>; + }; +}; diff --git a/tests/drivers/gpio/gpio_basic_api/boards/max32657evkit_max32657_ns.overlay b/tests/drivers/gpio/gpio_basic_api/boards/max32657evkit_max32657_ns.overlay new file mode 100644 index 0000000000000..12c94d3a4944f --- /dev/null +++ b/tests/drivers/gpio/gpio_basic_api/boards/max32657evkit_max32657_ns.overlay @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2024 Analog Devices, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + resources { + compatible = "test-gpio-basic-api"; + out-gpios = <&gpio0 3 0>; + in-gpios = <&gpio0 12 0>; + }; +};