From 323a91df6fc1ada141a8bc98ead1c2108f93dd7d Mon Sep 17 00:00:00 2001 From: MykolaKovalyk Date: Fri, 16 Aug 2024 15:15:20 +0300 Subject: [PATCH 1/2] Add first pipeline check --- .github/.gitignore | 1 - .github/actions/avr_setup/action.yml | 18 +++ .github/actions/get_changed_files/action.yml | 13 +++ .github/workflows/Lab_01_CI.yml | 37 ------ .github/workflows/lab-validation.yml | 114 +++++++++++++++++++ 5 files changed, 145 insertions(+), 38 deletions(-) delete mode 100644 .github/.gitignore create mode 100644 .github/actions/avr_setup/action.yml create mode 100644 .github/actions/get_changed_files/action.yml delete mode 100644 .github/workflows/Lab_01_CI.yml create mode 100644 .github/workflows/lab-validation.yml diff --git a/.github/.gitignore b/.github/.gitignore deleted file mode 100644 index 8b13789..0000000 --- a/.github/.gitignore +++ /dev/null @@ -1 +0,0 @@ - diff --git a/.github/actions/avr_setup/action.yml b/.github/actions/avr_setup/action.yml new file mode 100644 index 0000000..3b92db0 --- /dev/null +++ b/.github/actions/avr_setup/action.yml @@ -0,0 +1,18 @@ +name: "Get changed files list" +description: "Setup Node with caching for dependencies" +runs: + using: "composite" + steps: + - name: Set up Arduino CLI + uses: arduino/setup-arduino-cli@v2 + + - name: Install platform + run: | + arduino-cli core update-index + arduino-cli core install ${{ env.platform }} + shell: bash + + - name: Install popular libs + run: | + arduino-cli lib install LiquidCrystal + shell: bash \ No newline at end of file diff --git a/.github/actions/get_changed_files/action.yml b/.github/actions/get_changed_files/action.yml new file mode 100644 index 0000000..ecf73ac --- /dev/null +++ b/.github/actions/get_changed_files/action.yml @@ -0,0 +1,13 @@ +name: "Get changed files list" +description: "Setup Node with caching for dependencies" +runs: + using: "composite" + steps: + - name: Get changed files list + id: get_changed_files + run: | + echo "Changed files:" + git diff --name-only ${{ github.event.pull_request.base.sha }} > changed_files.txt + cat changed_files.txt + echo "The list is saved to changed_files.txt" + shell: bash \ No newline at end of file diff --git a/.github/workflows/Lab_01_CI.yml b/.github/workflows/Lab_01_CI.yml deleted file mode 100644 index 985573b..0000000 --- a/.github/workflows/Lab_01_CI.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Cheking of compile Arduino sketch for AVR/AtMega and ESP8266 - -on: - push: - branches: [ main, master ] - pull_request: - branches: [ main, master ] - -jobs: - test-matrix: - strategy: - matrix: - arduino-platform: - - "arduino:avr" - - "esp8266:esp8266" - include: - - arduino-platform: "arduino:avr" - fqbn: "arduino:avr:mega" - - arduino-platform: "esp8266:esp8266" - fqbn: "esp8266:esp8266:generic" - - runs-on: ubuntu-22.04 - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Arduino CLI - uses: arduino/setup-arduino-cli@v2 - - - name: Install platform - run: | - arduino-cli core update-index - arduino-cli core install ${{ matrix.arduino-platform }} - - - name: Compile Sketch - run: arduino-cli compile --fqbn ${{ matrix.fqbn }} ./mc_labs/mc_lab_01/*.ino diff --git a/.github/workflows/lab-validation.yml b/.github/workflows/lab-validation.yml new file mode 100644 index 0000000..059343b --- /dev/null +++ b/.github/workflows/lab-validation.yml @@ -0,0 +1,114 @@ +name: Cheking of compile Arduino sketch for AVR/AtMega + +on: + pull_request: + branches: [main, master] + +env: + platform: "arduino:avr" + fqbn_master: "arduino:avr:mega" + COMMIT_COUNT: $(( ${{ github.event_name == 'pull_request' && github.event.pull_request.commits || 0 }} + 1 )) + +jobs: + handle_bad_branch_name: + runs-on: ubuntu-22.04 + if: (contains(github.head_ref, 'mc_lab_1') || contains(github.head_ref, 'mc_lab_2') || contains(github.head_ref, 'mc_lab_3') || contains(github.head_ref, 'mc_lab_4') || contains(github.head_ref, 'mc_lab_5') || contains(github.head_ref, 'mc_lab_6') || contains(github.head_ref, 'mc_lab_7')) == false + steps: + - name: Fail the build + run: | + echo "The branch name is not correct. It should contain 'mc_lab_' prefix" + exit 1 + build_labs_1_to_4: + runs-on: ubuntu-22.04 + if: contains(github.head_ref, 'mc_lab_1') || contains(github.head_ref, 'mc_lab_2') || contains(github.head_ref, 'mc_lab_3') || contains(github.head_ref, 'mc_lab_4') + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: ${{ env.COMMIT_COUNT }} + + - name: Get changed files list + uses: ./.github/actions/get_changed_files + + - name: Set up Arduino CLI + uses: ./.github/actions/avr_setup + + - name: Compile Sketch + run: arduino-cli compile --fqbn ${{ env.fqbn_master }} $(grep -E '\.ino$' changed_files.txt | xargs) + build_lab_5: + runs-on: ubuntu-22.04 + if: contains(github.head_ref, 'mc_lab_5') + env: + fqbn_slave: "arduino:avr:nano" + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: ${{ env.COMMIT_COUNT }} + + - name: Get changed files list + uses: ./.github/actions/get_changed_files + + - name: Get master folder + run: | + cat changed_files.txt | xargs dirname | grep 'master' | grep -m 1 -vE '/(.*master.*|.*slave.*)/' > master_project.txt + echo "Master project:" + cat master_project.txt + + - name: Get slave folders + run: | + cat changed_files.txt | xargs dirname | grep 'slave' | grep -vE '/(.*master.*|.*slave.*)/' > slave_projects.txt + echo "Slave projects:" + cat slave_projects.txt + + - name: Check if there is at least one master and one slave project + run: | + if [ ! -s master_project.txt ] || [ ! -s slave_projects.txt ]; then + echo "There is no master or slave project" + exit 1 + fi + + - name: Set up Arduino CLI + uses: ./.github/actions/avr_setup + + - name: Compile master + run: while read master_folder; do arduino-cli compile --fqbn ${{ env.fqbn_master }} $master_folder/*.ino; done < master_project.txt + + - name: Compile slaves + run: while read slave_folder; do arduino-cli compile --fqbn ${{ env.fqbn_slave }} $slave_folder/*.ino; done < slave_projects.txt + build_lab_6: + runs-on: ubuntu-22.04 + if: contains(github.head_ref, 'mc_lab_6') + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: ${{ env.COMMIT_COUNT }} + + - name: It just passes + run: echo "It just passes. It's too complex" + build_lab_7: + runs-on: ubuntu-22.04 + if: contains(github.head_ref, 'mc_lab_7') + env: + register-bindings: "m2560def.inc" + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: ${{ env.COMMIT_COUNT }} + + - name: Get changed files list + uses: ./.github/actions/get_changed_files + + - name: Setup AVRA Assembler + run: | + git clone https://github.com/Ro5bert/avra.git + cd avra + sudo make install + + - name: Preprocess sketch - append register bindings to the top of the file + run: printf ".include \"${{ env.register-bindings }}\"\n\n" | cat - $(grep -m 1 -E '\.(asm|S)$' changed_files.txt | xargs) > pipeline_main_assembly_source_file.asm + + - name: Compile Sketch + run: avra pipeline_main_assembly_source_file.asm From aac4434e12a358d88c0dcb4f4e8192a3045e5a71 Mon Sep 17 00:00:00 2001 From: MykolaKovalyk Date: Sat, 17 Aug 2024 03:16:12 +0300 Subject: [PATCH 2/2] Add example code for lab 7 --- .../avrstudio/lab7/.vs/lab7/v14/.atsuo | Bin 0 -> 19968 bytes .../lab7-mko/avrstudio/lab7/lab7.atsln | 22 +++ .../lab7-mko/avrstudio/lab7/lab7/lab7.asmproj | 108 +++++++++++ .../lab7/lab7/lab7.componentinfo.xml | 64 +++++++ .../lab7-mko/avrstudio/lab7/lab7/lab7.pdsprj | Bin 0 -> 22851 bytes .../lab7.pdsprj.DESKTOP-GAIO2HA.vm.workspace | 120 +++++++++++++ .../lab7-mko/avrstudio/lab7/lab7/main.asm | 168 ++++++++++++++++++ mc_labs/mc_lab_07/lab7-mko/lab7.pdsprj | Bin 0 -> 20178 bytes .../lab7.pdsprj.DESKTOP-GAIO2HA.vm.workspace | 30 ++++ 9 files changed, 512 insertions(+) create mode 100644 mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/.vs/lab7/v14/.atsuo create mode 100644 mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/lab7.atsln create mode 100644 mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/lab7/lab7.asmproj create mode 100644 mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/lab7/lab7.componentinfo.xml create mode 100644 mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/lab7/lab7.pdsprj create mode 100644 mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/lab7/lab7.pdsprj.DESKTOP-GAIO2HA.vm.workspace create mode 100644 mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/lab7/main.asm create mode 100644 mc_labs/mc_lab_07/lab7-mko/lab7.pdsprj create mode 100644 mc_labs/mc_lab_07/lab7-mko/lab7.pdsprj.DESKTOP-GAIO2HA.vm.workspace diff --git a/mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/.vs/lab7/v14/.atsuo b/mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/.vs/lab7/v14/.atsuo new file mode 100644 index 0000000000000000000000000000000000000000..723bccbf09bd5d4a4b9c8b3e57d246bc70fb325a GIT binary patch literal 19968 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 Lv@i(c + + + 2.0 + 7.0 + com.Atmel.AVRAssembler + 59B1D629-9DCC-43ed-A0FD-8AB0E4D622AB + none + ATmega2560 + $(MSBuildProjectName) + .obj + $(MSBuildProjectDirectory)\$(Configuration) + ASSEMBLY + lab7 + lab7 + lab7 + Native + $(MSBuildProjectDirectory)\main.asm + true + false + true + true + 0x20000000 + + true + exception_table + 2 + 0 + 0 + + + + + + + + + + + + + + com.atmel.avrdbg.tool.simulator + + 0x1E9801 + + + + + + + + com.atmel.avrdbg.tool.simulator + + + Simulator + + + + + + + + + + custom + + + Custom Programming Tool + + + + + + + + %24(PackRepoDir)\atmel\ATmega_DFP\1.7.374\avrasm\inc + + + m2560def.inc + + + Executable + + + + + + + %24(PackRepoDir)\atmel\ATmega_DFP\1.7.374\avrasm\inc + + + m2560def.inc + + + + + + Code + + + + + Code + + + + \ No newline at end of file diff --git a/mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/lab7/lab7.componentinfo.xml b/mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/lab7/lab7.componentinfo.xml new file mode 100644 index 0000000..9416d84 --- /dev/null +++ b/mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/lab7/lab7.componentinfo.xml @@ -0,0 +1,64 @@ + + + + + + + Device + Startup + + + Atmel + 1.7.0 + C:/Program Files (x86)\Atmel\Studio\7.0\Packs + + + + + C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.7.374\avrasm\inc + + include + AVRASM + + + avrasm/inc + + + + + C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.7.374\avrasm\inc\m2560def.inc + + header + AVRASM + WfTdCEu0AkLjvEGIJEiVXg== + + avrasm/inc/m2560def.inc + + + + + C:/Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATmega_DFP\1.7.374\avrasm\templates\main.asm + template + source + AVRASM + S4Kwzy8TT0G4DKwdWeyoAw== + + avrasm/templates/main.asm + Main file (.asm) + + + + ATmega_DFP + C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATmega_DFP/1.7.374/Atmel.ATmega_DFP.pdsc + 1.7.374 + true + ATmega2560 + + + + Resolved + Fixed + true + + + \ No newline at end of file diff --git a/mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/lab7/lab7.pdsprj b/mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/lab7/lab7.pdsprj new file mode 100644 index 0000000000000000000000000000000000000000..580e7fb12adef1bbcc411ef0b5e7c00d1caab86d GIT binary patch literal 22851 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 + + + 2c0000000200000003000000ffffffffffffffffffffffffffffffff92000000b3000000a00900007c050000 + + + + + + + + + + + + + + + + + + + + + + + + + + + 649 + No + 100 + 120 + 100 + + + + + 81 + No + Yes + 81 + Yes + No + No + Yes + 0 + 81 + 100 + 81 + 0 + + + + + + + + 2 + Yes + 2 + Yes + Yes + 00000000 + + + + + 2 + Yes + 2 + Yes + Yes + 00000000 + + + + + 2 + Yes + 2 + Yes + Yes + 00001940 + + + + + 2 + Yes + 2 + Yes + Yes + 00000000 + + + + + 2 + Yes + 2 + Yes + Yes + 00000200 + + + + + 2 + Yes + 2 + Yes + Yes + 00000020 + + + + + diff --git a/mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/lab7/main.asm b/mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/lab7/main.asm new file mode 100644 index 0000000..f87a4a4 --- /dev/null +++ b/mc_labs/mc_lab_07/lab7-mko/avrstudio/lab7/lab7/main.asm @@ -0,0 +1,168 @@ + +.def temp = r16 +.def isr_temp1 = r17 +.def isr_temp2 = r18 + + + +.cseg +.org 0x0000 ; the next instruction has to be written to + ; address 0x0000 +rjmp setup ; the reset vector: jump to "main" + + + +.org 0x0028 +jmp TIM1_OVF ; Timer1 overflow handler + + + +.org 0x0100 +setup: + ldi temp, 0xFF + out DDRF, temp ; set ports F and K to be output ports + sts DDRK, temp + + ldi temp, 0x20 + sts DDRH, temp + + ldi temp, 0b00000101 + sts PortL, temp + + + ; stack is neccessary, because when interrupt occurs, you need to save + ; the address of the instruction you were on to return back to it later + ; this instruction is stored on the stack + ldi temp, low(RAMEND) + out SPL, temp + ldi r16, high(RAMEND) + out SPH, temp + + ldi temp, 1 ; we can only load values from registers + sts TIMSK1, temp ; enable interrupts for timer 1 + sei ; enable interrupts globally + + rcall reset_timer + + ldi temp, 0x00 + sts TCCR1A, temp ; we don't use wave generation mode, so leave this at 0 + ldi temp, 0b100 + sts TCCR1B, temp ; but we do use prescaler, which is 256 in this case + + rjmp loop + + + +loop: + lds temp, PinL + andi temp, 0x01 + cpi temp, 0 + breq loop_algo1 + + lds temp, PinL + andi temp, 0x04 + cpi temp, 0 + breq loop_algo3 + + rjmp loop + +loop_algo1: + rcall run_algo1 + rjmp loop +loop_algo3: + rcall run_algo3 + rjmp loop + + ; jump back to loop + +run_algo1: + ldi temp, 0x01 + sts PortK, temp + + rcall turn_buzzer_on + + rcall reset_timer + reti + +run_algo3: + ldi temp, 0x81 + out PortF, temp + + rcall turn_buzzer_on + + rcall reset_timer + reti + +turn_buzzer_on: + lds isr_temp1, PortH + ori isr_temp1, 0b00100000 + clz + cln + clv + sts PortH, isr_temp1 + reti + +turn_buzzer_off: + lds isr_temp1, PortH + andi isr_temp1, ~0b00100000 + clz + cln + clv + sts PortH, isr_temp1 + reti + +algo1: + lds isr_temp1, PortK + cpi isr_temp1, 0x00 + breq algo1_ret + + lsl isr_temp1 + clc + sts PortK, isr_temp1 +algo1_ret: + reti + + +algo3: + in isr_temp1, PortF + cpi isr_temp1, 0x00 + breq algo3_ret + + mov isr_temp2, isr_temp1 + lsl isr_temp1 + lsr isr_temp2 + andi isr_temp1, 0x0F + andi isr_temp2, 0xF0 + or isr_temp1, isr_temp2 + clz + cln + clv + clc + out PortF, isr_temp1 +algo3_ret: + reti + + + + +reset_timer: + ; set timer initial value to be 0xC350 + ldi isr_temp1, 0xC3 + sts TCNT1L, isr_temp1 ; load the low part of timer initial value + ldi isr_temp1, 0x50 + sts TCNT1H, isr_temp1 ; load the high part of timer initial value + reti + + +TIM1_OVF: + cli ; disable all interrupts for the time of this isr + + rcall algo1 + rcall algo3 + ;cbi PortH, 5 ; switch buzzer off + + rcall reset_timer ; reset timer + rcall turn_buzzer_off + + sei ; enable back interrupts + reti ; return from the isr diff --git a/mc_labs/mc_lab_07/lab7-mko/lab7.pdsprj b/mc_labs/mc_lab_07/lab7-mko/lab7.pdsprj new file mode 100644 index 0000000000000000000000000000000000000000..6c021b754ffae0637ec51baafc01f82735c9fd67 GIT binary patch literal 20178 zcmZs?V{~oJwly3lJGO0m$F^W?$^E_RkH^A7`>{^R%@<; zoFp&^G5`<&1b|VxrOM5XUndd(006>ILH;RrjLOC)e!LU0(YX4dyxO-8{i6|$5J2b2q1O-A}P3tuNN85_eg0r(5{{OwP16hIW~ zI3UcqA(sI;y+1#7DzXzx0Xls+G90P8_9QuMB!STc19t%keRN`#1UHG_uR=>Zj#PQb z)J-bzJe;OxPsRhmKj+4;)X~)IB|2&%1fJO${p=z4*lCD>TdM#)Z_#&%GutL0w%!GAWZ8p&`)TS0UV#+Ub;mhhz>Bg<29N>B zM?wT4#e&EZSkL@D2Ot)f3J4g-H)fpxfztqqC(8GW<_~{l)blHLO%obLP>6-h;~V7* zh9D7uWfUldhm2+DhtC5EdiOkpMbEk7hYq(%61~oJgKVJk%jC3ii1v?n882v?;G=L1 za$zUu+7zAd08$F9zNbwdf)!bH%@z<_mW-N8g%=2i*JOqi2!_XEMHGmJKSBp2IA0>4 zw}p_e8HRRc3M^GU;DQcBIACx92}x`%KW-Z)wQQN~ zPpYysqS9O&|KH~Kc6*g-#cY2AT7Bb!QC8d9ZIeps07@3L9_3M#Gm0ZXawUSHw z0o44u2-U3K04=!n%g~fc?f{A=b@y3Hi$)$SmN)xJvhJoeD2LYFQ07Jz+SKf@h}Lx5 z0h)`ZAFQfA!%4O7wnY$!<>67LhxeT~)$E=G?Q!Q#3SOfC4$HayG`P2256Y=+5vs%W z`%%bGN@-X26TzOB(jO%X?Xl-!3SP^P=iE_d%;$c>Pj2PL)W6~vM?TL$R&*bi^sH>f zEly10qUqwo8n)jXdKBW~C?uCkkW++!F8Kh<{J6W{i@g>q$Aq-$}8I zqNaOZ$$rzyLK@t6*2q#ihXSNkVi1~PxHvJCKNNnSFKoEf=w^Dkex6;;^k8RyKJDFp zzQ&l)ZD)1mha|f>d~u4fCdtgFkm8&lbe<_1#`hN%IGQ({x%X2i#7H|MPN|Fx-BDk+ znT3}L2IQNTuj_JGFLcTlm0aAs4;qoj+vSvxHSo?>FbrsgT082-s(B3*b`2Z;M)hJJ zEoRy0o#H0wUX2fbVk79Htg_h^h2N?p>On8fKJP?-#bDh@GQ%sVZ>QKi{FrWq@^X51 zea#QgYq?+K!Z{o{13g{M39l^HOD^#;{9Vk2@w7(3S?9q#SK=kHt=UW&EI4>b7IDGT zGQe>Lg|&RB&cy$SZZ;ynR%};&z4vH@b=khLs>R{pJjAr4L7A-EvU*jd|B4c^rB11$ z)v~%(q(Af{Xi}=^w5+~M4vkZxzW*sxbK25>P6=05rGDB|sM~Xj@M=`DbRE*iqeH>c zZdoOh91>BbUS8k%zY{;tIFFdG2mk<90pR~m{6dN{S6)z_TB>d*IBR!;(*uQEKz{ZJ zv`qc)KOP`@ghkgVOgRVL8$Y|&VMb`@hws3(Xi?h z9|g{ujq>z6ChD!$q+5bOR_7C~J1q4!5=#UL8cx2mJg&JNoKEbH$76_-eGZr$W}dS~ zp0jQ^ceqbDcf`>agu7BxC5#S=90hX3OcdxA8XMf}>ovIB3TfyPFHmUI7atdF*dIln zc0R^f&8xnm8)mMAtG03wa2ccWz;{-zImn*u(? zd~-i#Gkt2@_>3traI;sD*)JfSjimt*30Z5%4oljJguO^Kb29=RX{&uj7FT`WZveSJ1^bH4WO0^M)zmaVN0nUG>`_W`**uEA zx-)4FBt0J{#LT&Lz&?rUI!2wNzF^(2l)+Ls`49jd{GcgPWt_TWiOI?Bx2wh8*O+Ga!$^NUbFYhJ9?@~&ZY$41zl@x!GDTD5C zSka#QVhTpw1z=Sp{A9!MCR0kf1hQJB^^bF+LXf39N4A-C%-8;;E1|a7WFbv{78a4r zZ~0E%#6>cwyALG}f}}&jk7&U&0SVb-t-+MAdKCPsjd}ym;!;lhSN$E4@~9KYF(rP7 zakiCBrR5__9wfRVwowmW2`_U>gBIs1?(qjl##>A?WZuOUr_ak$^Ue@YO?9H}sLEjm<(wair(vm|dH`|cn>uafF7GRN7H8ou^!Q0Qll@mQq-9Lj-Zm=YefNVGuDvwQX zJ+7eRe9K54La8P9or&&_N=Aft2zoGdUw2b6%5jscLlWFP#u363%qbaY{T)1=)XjRa&l!Xy% zPrKPMKEPMQn+`&J`xt3e5n(>nhl! zb*ODazGkZvQeN^E0CD`bq>v?MJ@8ZkV?W?VB9zg-M=;!j=RtB$)^s0dp~U#QogV-- zG#&DnAu+N*0(8bW!{2~vyaxuN!IVHTTLLXEZy}m z-O>W8ZDV+i_7Sj&b@z8%7M--;A$M=Fg>*_I6f#8mt&a)^qrq|xAj4N_gI?5Iv}_$&$Gcl3~E032et;%E{~f^kU-!0`yL*s zJ?=mNPcR;wBYX)o2iFm9Z_!%KJq>mF;to%EKL&=6@WUu0Xd%Z+6cfTG`C~sCpxr}+ z?M;=bldWtdd#hCV@wrE%;l3@tiheVQLV+}ctnL))#lP*gEn2pdTTY#XqiXKZh|edD zEKd|g)3#h*fh2@0vR7Zdq2K0UN`oY*QnSAr+%*;Nx3;_3K>*_$*`TK*Hd}aLO8Og)*#*3CFFSV4$1oTsi+(0c{N3H!v2Gd3Qtf}o=fuoc~wP#uohkwN*p*pm55!zmk zAFZ!!CSug(fYK@u(^w^T6&0ux>k#6+ZOPoxtxKd_H9p~vUsG>-eJMx9LC)BIdXLuxOJ9jJ+MaiqcyO$WZmJliQ425i zzskt-V9BuC2t(Ke=@Mb&M_Kc2lb=kOrb_)7)Zs^)p-PL#MkSn?j579SUi!*2_k{->)vK!uNJthT<$t)0` z@nH5`7cYLP@G0Rm54Q*LBr|u8pR~$7cHGx)%Yf^VaXYC|JQ@58g$5*He$pRw9a?95 z(1K;t*41RTtWCE$jk{$q)=g4Klc}nLcW@t%aahmLvPPBatqLtRezl^6x0py{D#N-K z?TpP>bkZfSxV)^>h4PAKzzu4Ir@6Bouer_?W$|2i@QXWps#vXp_h|}mvfC}CxXX$R z+pKv(FOBmZo5^dCWfDvS8@d*!@rqLJyZ-1;Lz5&|YH?{@4uX=@Q`XGla)Ey2O>osAJ0wPl;E|M~MyV^>-G})z_vAg>qll*-7_;?+T#;G#$z&(}~M`#Kc~m zb|P-ARf!+!3Em|V;<{qb$7gUY=p)@DYt)dnS)-xH3;SbM!bQhO*~~WoP0&q2qjKs-&_oJ+D21oWwTWg?Z-q7*a6^=NIf&Rq*)+FMRcZzFAmF z8A2?n*=3!36 zNYI2dXb+C0@xzhTPF2duT?oNDr&ld+QoKma0qVb~nXZz>q~VtyEGdTQ2EYwNmDyEO zs;G`n4)|e|{mg#8qwQ^&=1M z>J(}!Pd!X3s2-c{{j-gYYAR_|lF#4K(G|H2*3QqhjP&w4mCCBB@>Q7*T%jeTkYhLX z;Q&KIml5c~wC+GoBBWE`ZxYPVBPtZ$OH6uyU%4~3m^h@xTiMPq1$c-swvw^-S-*;3 z1f3#A-mI+)cqy9=_f?#)Twjva02WfVs@)7p1tBw~n0KWT$kP?^z~o3;jFwU&RO#j* zd;8s7!ZBlwY4F}a4oiG;`WgRqS5ceQjZJ3pzzI_YA5LPSHx3f+RMp^iba#+a8Idv*n5~TK+VR#Yb-HGf z@QYiLlzA-6KyYWw2a+iL+Ypp7f_?0~D(U1=z^DmQ(7k%zQd}2V5NoQ#vH0myL@|S7 zI`Ya=v*A6M`%K8%IGx~v#JDD5>+`~c`RW0{@JXY-<9o%)lWIw@!v%X2-206Jb8{Vz zcT0`eC7?dAsa$q(%|$AGdKKEf^+~#$d7QKx9C!OD8@7 z=yPSRxPKH+yMp`90xi)_FOtV|3yNI1Z|n1fF4uj|c*%WkS@HYA1Lo?mY5jiAhH5XL zXE%SUytUNj5PZix)7_D^h_Y1{=N(}`3fCu$F~<8jgcY%By6Z;7NCOb9^L1UfQ!Pz2 z#OHv-GbFP~y-BAL#W5SRTRv^N6t2~@fs*zd)Mk3;Q{Md`D%vEY&9X4q+pw-muru^iFt zKmA5jqf*Rt4otgV86M%@m+{{7buiAg{%O$yZv)%uB$p;C+j)(8-T8Rr^{8v!phUM`sX@06$&tg+Ap4(Vf%`t_ZG?-X!w|~)j7B)lHE%;7s-pYeBKWTW3Ev^L zj4{i+xOxB6i;u=T-+E08(b{cD#jR@PoqRmooy`TVieoHjOVYuQpOnP z&d;X*VW8VeQU0I9FtW`iVYcf|wGK@s+M1v?eWH;!YFXa%ZE3M`XJvI#0iQTD-Wg+ zF;`3{;)35V)Do#Obk)no8{m+y38X_?Tmcz0bSgI!d9A-FtpzQ9rXQ=te0HrIV0Dat z7B{yi6KSnQDk7_8^ia&mG2bAhYxua)I=^%?)JXMV%GCm(5gDz6Dxxcq|H@#Q9fjG; zEk-Re;;yo#it$;g|8QF@{y<895#G?4BUqzK#4Y)-^n7Z9QXpDG9M-+Bbn0N%H#j?O z+NCR(%fT=(BU_jcdTiX1J7)z&n7u95sm;%{IEF)UZZA5HHowM>7-E7wVov~P z4-pQ54r2_)@2Q)!I$P&HGhEo)#M>w`b2_W+JtxJU)?O59^>z~NcJUJGi@P}=+dLT^ z)2f;p+Y~wY5h{Ss{;A0vw8jNV#vdn!jkh8fI!1U%}YWOxxljSeqJ?uI2l{ z_Law|SA|>EDFe5}Nx_c+Zl30AbMJjR2i&Ltx6JtsZpnHPThJbT^XhnYFh92-XQ@nBPSq_tMM`&7wq{tO*nm}a;z*uHrg*@Vkg)0g zbyZ~v1Ob5nJ=@vb6p~Qi!FwAOeB0}NzfhBx;DP(11Vm_t_+@wIxIg=R1>ehd<+4{} zGfO{tk}(9@Qp)+bv%ocS<%Oi1wOQ^JAk*(mLW|^uSrAs=Y1yVDnLpzUAv0#ynHmY4 zI|ty~nQRVB%(zK|1E6DlV!0}7z7Eym+MN}QC>j>PUl5>{J}kVWC1GeE7JwAAh+_a8 z7PP);_8GWJHD4k5wzvh{_s|$y;>xHlh7v*Qp_!GVTUJ?pJ~FdR)jp;d`G*|SDOZ5D zRE|lhE)n>k;dMT)&QHIqxpF1>;lP4ShQ6(Wn$`f$j4K7$u2wXGu5b|W)lD*hx<=`^ zykcp6o{v5|GfI|BK^zAql^;pKu@rvBL}4MJsI1QKY+UDUC-h8ImoYQs!hfV-bg`mGOmqC0H0rl9#`I z7EF}(`Upy9kZDMXUadT{3~6$fCg73jaa#!$S-`tUrDkdgJ%(yzMJD^9he-uyYO0{L z?==WCjYDK1R!<`Qv#r&PMKP!JLcyTpxsa)C%uyglc7#bZTr2K#N=Dj)Ghql#BmB}r zDx#|tTsZjP>+Pa@RFM2rFFbmrj1pYc3!-A%^Uz0!gYZ?ZAntpvXE#N4^ZUS2Xz?Wc znH8O4I*W5DJckQm|ubFPDVZMrH0JcD_fYgvcd?4Xw zU=Zv8nIP5x`FaMB0GVLc0EGJmN&dJSpv`axL#$H{25OjlsVUh@ZEksGe>2t2jae$wdsM6B=VKegz+Z-jnY zEmEkL50(u%mNR6zOO+5NtPG}3Vzuu$dZ$VE2uSzzf2<%kC~eD04W=nuz=rQM+)b)E z&YFHPQN6t>wf}j6v}RFT ze=vSzJmsyvq8@#^KbBkuTkcLJj(vTtf4LuP?YeiGI1Uc^!`pIylymOu(}Guza7t)u zErNdGD<2^Qf#|o2vG$pCS!w5zo#)?TR#r1$JueB&%ms&eSxu$MDdZT^Eh(M_a;MJ9 z6-tZ(g#pQQx`%Ku#`5VH8Tth(wXFgD0#Ot}6%$L!pozuj86O1_e|e)KilE9$i~~jd zO8n90TL05jI5LJJmV*9q_*G`#0E!4H_unXb3JM}9;==JMR53Z>e*#PnjgQ_3o(5Gm zDf;dY^Z%3g7sb&3}M{1%4s@R_t`zauCwh9UYDB@c2Hei05ElLr&k>qcotu9T^*iyN z5x(-~Q;_v@a|sq9_kG_D3qBQ^&I7kZ5+st?&8vDgp#&ZzN|}P5_2JwtC}SqPIsA_R zbXJX(Q|ws&#*9L#P}ILUN~i6U-VVhno@NYmHVf|B{@k%sA|PC@l#2CwHpwgRvh$Aj zEuLizWX3j1qr#S$Cl^PFaxC(-kLJU-#hvh#$1w#mFXVS_ z(sLX6kLg(fMxu^C=D#BL+59f;I7G~qVDfu-`ChyngAWQ~sW`qAS> zKiz@W?wl3;V2Wq7Mn$U+zyj#87a!7s9D)fX+jV1hcU zZkX1~?rJJg1Tc8KF;4J1^li2`Zs&({9>l)^nU&| z(fs|iGla@PX7|YKK*Qgd=)&)7={8!CW6yZp#o6F$iHK;M-WWO--liR1Ci++&1{-XN z0wpL>6SIYX8p84)X@lSC)Y}g$REF+$8!%L8D1!#iui2IxQzG>a6r5X$lJitVokHEw z=>1dR%;#wV7*MqacsDh`>qwcMosEOFTV~>IM=JSB{Wy72Sl8_;Ajj!;o+fK`Sf={b zy3~J%N`s9?gKo3rZ&v|&K%+r#-SnqZ7z$AZ3Xw)5w$?P!l)oU*R4-o{3P}YDiAE!} zRwLDPuD@`p-!KA|R2VA0N+Y&WBi3@xzi`RF&;+X8e!DkSb`m+fO&|`+_t5~~G-cs( zCr&e~f|hzw<-~j}=xt$+QpBE^lH+U~E|Vc!{{C*HB-;TZY}9k;UZfQ`$()vj03`uI z65oMckFrpGTWDcmLZYoH$kmColiS*AIi(?bwV!@c#ph_YBaaSc5#+*~p*e?g?;g`j z%E#bT`qLPi#X3x~&zO&AUNMSCr^IC$t5>!$|3S?`#-6IwW1sA;V$K_K&5h&VCXIDG zpD~`;y}cQrkH<%+F}hdBzmG7XA*3I2cV%fDA${JZ}xcjLW+|5JYSHp)GCU%)$X-+niuUv@Cbc%N_|)~`F|-aoMJ|F(pD z_ueFbSKWTz>PCE}(*5|yeEb{pV|gz4!T$3k`d1r|s%sqWU(x=pW%~YK&jFv^ACA>X zkN+tD|3dr|O7xqq=c1_l@PF8M|8V-J7yqL3Zxr0eQ-tT;e|g;a{CDpEE1J#QC^=%I@0KS+_rMRAfk+Y3w*#;aDWxtE+SDP(-^tY1fbd?mD49!2eHl+rUjssIqAJF@Qd3A3f#c391UjbQcpT_iK8L`&?`3W4{U?8XZQ9<*oBl8%78 z6n?j1Bzw)M)O;#eI>;6mbKca6d|cHHOWxJ_RSQm7Zu%FA5r9H|3IU$0-}K=_0sX}k}&If!w)|KnQ1}PD(U22fGU{0z;Wwp7D@ghFHZb)Y`2f+buvFG z`n#SX8DmY(-Rg9lCOc%)zDk1M35zkT4$75Q>kR}*S)S@F0DfK z*ebcutS3BlFc``YG0og!pCiOA@D9PN_KhrmnLhDDYOGyHzp8sO7O|-aX(_>?)eI=k zDgD&aZ_(n-waQy!Mm0s{@qWIOr@L8V(C(gss-@938G>l9NR$O5`RRCS#`a|~b%C$05n0&Ou_$wAsNO_R&z zVxtvjCeenC(cAqIH}+ccfWjXSC_OH%IyQ>NLgSzm;t%`3andg#eP)yf9gB|J;{h#L zACYmi+}(m$FE(CJc7}zNMq^|xa?7jF&DIj?LvU6Lke5WfiWHLA4kF?8sCYYbN-85* z9oi55$})!}FMU$qY8k;?43ghA}DvKXl|9y2h~oCWH`Jh&yim!_ayUDhRVPO zCx+3_Xg$qxP-iHGB~VIsJ<7}pE4qTb*td<8Ln$fz4fD#c1L~j5S}0eDw_%km)@v@+ z5KnJJ{8Rj=Y=-@S&+W|8_A{_ z2sl4fA^tKRfvQxQ9T>Mchx}lVdaz}EMHlQE)&P-e>O~jJtHzZvvs?DqL=RSu9X?Y` zY9B<6VaT*_=1Gf0=c;b9!gN8MV;v6m-fo4dz3v({V_NI#^Na+e0s??A_b2CL*=gKB zgT$R$W}Myc&<5HOhdWsutAL=5yWfqm17Wt0487%*V z!vp(`Sfjn=i6dh|y}ks~{`uJ}=%6Ld3YEJPiq-fb>>enLLel=%#?bx#JW+O zi6DQ!kxj`FyCV;J2?$&{H84Wm{ACka8f7F*r0Rvcl@Tt3A_*U zYF_9|LkN0wx12hMI&Tw$npLGT{U)Z5RW~LQYr@3QNZPSrEi4#BHzwO_^(s~MUI?r{dR4UbQoldpNfz8Ka9T8V4P#6XnrzmQfGia}>E(0rbV95kLlQiLepUlCy5%VE(?9@pn8bgP;O~+GbgD!n zk?%bn*Y49ec~v%5)2X1XppFjLHF>K#Cu13M@gy8hv>Y5Yxmi3WpA9Q9YC}eYNiRSI z!vvJ!J?WD7e?>&rev25mvV@21A#g>(j+mYrSVh8|@2~RJYtdau?NpDKJF~F~1T@D6 z=TCNAr^A4kVC?vpsT+IOCuX=h>ts&Hjy@MLDB`UY#HudLM&d^oCzrx}T+ z9HPR)CBaInZmzGFoKsmGQI<}q zpJGnfH;*ioTJVWQf~OcArz0Z4gy;neIu8_wx5=Mfttapx)3L9_eSXH6YCMRf&aT8a zYwi$E!)m2R_z!~e@Av0QI?2bj;*WOIkDlQ0c5MNptUh?;cGkFrttGm(O^Tm@9Lq9Q zN#1msLPe_+Ug1KWHN$+$zgKA z;|d|~qNz{ps+U3)qCbD0IclSFx>b*S{;{FRHh>p0PXJuFHqbYV4Gb-eOzFZV-ZP zum0NlcXJ$RZv(C#_;z)&Qs5%8Qt%M|?l&lU%-6DLVXN>S_?tJ?ai`hU*VV#muMXka z{tPC{dPOK&gkX1f#arRSa0R9Coy~b%wbZpY(cit0Qt3mqj#l(VQ!jg@06nwjx~K4H ztK=bYu4jWOc)>rQT@RZ+Y_zv`COJ10<8dAIHyT`eVLhoMlC?6rA1MLGr}Yziv=5w88vQncn4>`_i~GNHW5{NC)^6nDgpu^hKS$5 zQ(vU^%&%_vwIsb?O4?I{A>)l;SIyR0B5#w%=woKY(>i%lWmos^L;O!SCF$Uv-LdIn zc({^J-5pw!C9my{!7MRIWy{q#iCN+?P`y%*FA{D?mYj64fM&?BAXO!Yz8lOy3Cb!Z z%ny)BZSIdkP4)HWFaof-B`L>XI5lw_j@;(Zm<{dL^~BW|d;9~r2%Gx9GChJo63n`x zZJtALkrx(zl^q3r))}AA`Wg{Ex7X@L;;z|T$6y*8?|0~S)x1nb{Jx5!>o46BCVD{_ zF1X@m^9jX&yhZ8fNhznw_oNqC%987D=|33iEWj!-ZqwM~E>qpq*%UTUQ&!AZW= z0^NXzRKtP#YBpEHXDbS~ysk#=aEz$h&41H%HKd z=7wv9Aj0|ZU8&bEv|oo3f5PfSx$y;za$zTCV4Zm)LwL+FPO&_LDm#2V86LlU5%=9tWx;$y_a$ zt_UqEA|JJHDDDIhZD>oZb($XsYDKa1KlqCNgQ3vA1>V>=SKE3ghoJr=_pe^o?d(LI z0Ak65qx(;YF4ozmg<~drZCnT&6qJJc+&pXD&`wJ5tJ@dlnptli)iv9UyNp$zprfQc zFnj1|mnW)%y##C$Pq$`b+d4Z`4u}nLurGJ4Oqv{|VF-zo(a^3WQ%X90{%$x5`pxbg zzW?TuSFbTdfoJy1v$<127$1T2k4SZ)D2(8Yw9(_OoKOwzRMtFHnUJ__A*4FDX1&Vz zh=m1}BsrNM65ZJO*!kJGdRC44Lipp?S)oTz<};Z&I^q$v#2RtfxTa*#;+N$ZI<_%f z)0ZnnMtWpOKEuIX_a)YsyV!#BPOh0veY3+l+m<6&g3szL8Ni;jGFt}{5exd^_|aCOHb z*s})T1Q&pikby`5Q5?C$2WD`yt8x_3y{W*ZUUWx*Y+Q*lhXaBTg&;3_Ay7ZNn_Y2G zib6ZFz>ljFyhnh-LP@!}Utv4XzJ&e~auYTmIB?{%jEF9|u$%AlaOANJjMscu-ls&k za=Cwq_xQM9!$i4r^`R+=qnLScwG**egKaUBVwlbN(0%T7xqPSc^!M>Yl0-nr>abXt z6Q@uXu-Og)93(pY1_aj}8AkjDVCl(PvCxGehuCYGe+F->H#f-)Q1T!uVFv~}KJ5To z4bveL%6eB%%pM#4S2RIX`(NF!TyW9g5Fro12Jf95_tTJDISN%Nv4Jx`pHFtUS_r=} zsav+t&XQQlVhImoL^o_kPOWeg;xE@M5wOs+#?T8C)d)r~A-QYZGGx}oU!|psob#mC zrL%J4{(I(wFu;D{5dYrMtiIJL(y~s6Wa&x)YfEz-TPhy)V*B=p?aPbYynt)J_t@<@M z!OcRv5HEGT_Zh*Jk}KtaJRaWAy7Dp5(Dr5e>?eXlBf$(1)Ts9Md=M)thd_E@lh@Sx zyox)R$`VjSxzUDKzad%zVcY$g{#>YW>rEBBlQ+xneg(#*&&zA2U{LJ2(scs}!iW{} zE7`uqh0BEij%RE2ey(u^5XOid>;T_>rsML}hZf5Y^7%&N@(sp_B{t}Eq1D)ySujks zXps-QU6f>{pGroprC>;KS%HymDE3WGgt}?L(f}BDk9)fYi&XQ~6Zew)-tv`)lABi> zPTAfAL~j5f(Z7rE+XRk*36he~$1ih1TRVun6c?8cr3y~>LkCWne>gztX2dfQB%qKs z)v+V_YsXR=KQFiI$Fjv|=}KC}KUCnQ2CEtR4*I`kBeaT7fHz2 z_%-x}QV2L^wfXf|el0V3tMWlGVgI-dpaQ-&c=#y=4B(pZv>zdd1QTEjywLwu{8bR^VH2l)pKs@z zFZu=cTO?0TcGr*#u-#Y9g%s+Jx}wtAzNk|yyBVuLR;CCR{4woLz?!g>%pU3TTgh0U zrs}lqZsV7M(`j;_ViHr!79$(4dF}U!IoaxW66l96=U1{fN4WQ*{!A*Ho!H4E!m3c? z7*ClE0sVj%Dev%mijICGIi1o?F<(^`J^6X)sbsNAc1>j?HCKYf(MUK{()j&s-n|(D zTP_NlB21Zp9;xm=h_FdS&L)frCSm za!h|+J9Aoka~WH=igxOXWK()ZQ`lsmp}Vu;q{L&_*m>5{YdDI<>5ICTVGiv`F#3kY z^@2%qGW#Pc)n9%C%bGgbnGLu%ir91X&zhT~y)d^~+@p9{63MnRhBw_Ek5a81&fmJ6 zWh)gCNhn>NwyLj}*hvF z!>k1$Q(sR6xp%oT#J_@XCkvTfp<&^H~jnlIlN7i0TR-GK3 z4*xOiVPFe?ibnKZ!|Y`S(6gr2cl2?c#fM11pJaiL{8QYPhe7S~9SVv-3ef-~1Okt> z-e>=;=$u$DePfBqI>Z_owPNlhX>mGqzJ-!8hcJEO_09a;yqoC)A}-5-T^1 z;n2_Li#F?)gBy-cw9N+r8ZccS51+M)Mec{sV0z8NZ64gIrw}|R8<#lTiYya4s)tL4 z^cEpyyf*UN^@=CVI3hW0oTh59_<`Z6@3O9WRzZ0Lsjcp3+sf}31M0~HSLPoN>|!6N zwo7zbjs9?e`PXsC{L_qC#Xp+++e(H3Lq%yod}@@!6iHjbKFC%)>tbA>dD z-3P*qnX9uaSEn`s$9jUq;}jJAjiyrXcxfr-P|x* zz65OMHBi&=fZ}$5tleBBZC@Gt*)dwa61Gz%wA>bl*^LeW?ooa?XTbEm+%(wSAy49=#(5KNl5-sUrhOdvtmQJ%rusJMC3A8DW^z z@IdM3By_!;g8#FVUGX+3;P$8_hZhDD;`miKs)Ohsd4}p+B%rQ{c*)zc4R;=y#-An5 zFUKm4qu+qJXwZ34K^`31a@QIAD6n*YRC<-ehBxAlQSWb|Uc+}878+vI6PUUzLL+6C zJQEr{Yl`>^Q-iL;3{bCs7Os)pDd5i;(RBqR!VADWZ2i&3$5NZ z39AQZqgT^VTffmM__UKSUP%6h19zX4y$oKt6%FVml>-?O;(9ck;5zEvuM>M`xG7>t zw*}(=xSjWF0X>~L1Xe_-y6KNFdBL=x#(Doh;6p6xnCo8f-^Aq=2qkX`Ne9>TNOm|g z`50VSPB=66SlnnfI5UDcT#iRpn_~ip{xgwCrG z5Lq}9PYwH$W=S}+uq@mkO`(jE3$BDF56Jbc#`-=1HihW=e4Y-c0snS?UbKX|=R|Ni z9ruwYvr@|gvL>Ta;{w^bf1ZiV1?wBZEWI-u^(&5C^Z@_bjBkt=ndCiHE&{cYxHm{5 zi89G6j9ju($`u(O#x(lIE}HL0qGDE)x#;{2vPsoT9JZwFt2sd*$8R;NC=e=cCl$)F z8-?hGb#W5mENqjZM2Q6ZOl4Kdsj<4|!B$hYf{k_H0zg9E;-7Q;c4uWx2U4@JZ9}k3 zNi^KYUsQ_%CuK*n{EJE1_TRtU&u8cEQ*w>jxa&TMAeQrzkKp+436ds0@gP(v{oXm@ zE0wUGHrWX-O{O+90(V3GEU+T%ar*46H1GBfXXn>S^07r@GrcIrW6K+!^T-9u$F^Pa zp+z}2WdhjtkoPqDOZ1L>JDPz*?G&mlZ2ZEL>$N#il$sYrp1Z+OXpK6Y8XG+QAXwkJoOT%KvL3E^6o2$4J*-R7&#*~Nc&e}8-M+(C=K#k z?IVQ5vW_ry9JE5Xdxtbk2({zE#taV%7MaYOlZT5ibsZca#Ke874GlKH1)H;79Kgkl zc3l-5(1Y_ZWjoY^gUPVEByebK;znj%U;Vi^6vd4U*;E%Iu*dQwSDM9*9PV5nB2X9g zB*)x2hZ`=!b(v?nIDj2K%r%*JS{uTS{Ky!RuX8LnX=(&3++Q`BCstU*jvUs^974!I z=Rm%11}iMWk}eoG7j-PRc=`vnsWDgsOE50ES+22&0@=ds7fcI%pvd|Le}Rti>}hQZ z1~cYg#sHCjBvVNyQ|8TaXiS)~13D6MXl~k@;V-P5E zL{qJ={s0Yi?y49R6gkUzy>GDShB_Zn!4-9GTwF8i?5M3KlqvD@G7x51bCa(Kp%qPT z+`m+ZMu0&DI;e7N&2vDIa31P>dkAz;4 z!M|G;tY?m5KHPm*f4mrQioRcooHeV;Hs)I(*qe93)W30xAN5WQ%DH^$ltW@Kn;R4mkunLr zts#(4;h9*9Q+R|T1G@Q>mAMNh)fMFR62rW@UQL~iCBDmk;B<^;Qp)imk!DaAX?;qk zgXEClnS#E#Wv;7g6ORjIH`J=AX*aec_X93nRegC+uyThS50zCyDD}yBp}zP`O;z^% z$jbTSdc4O*e_Okl{r1lZeQFrg%3~%jKwHHX9 z8vn;Id_A4MH}VGMN}j9cVmn&G$HxRtyr4uRRsR&pf6X)*%ZP(F11u{$ zD`qh4TN>y%bCd;Teivu40dGiR^X%>&ARKlZWcV#WRrj71O(EA#v}0)4kDiH!iL6l?FFCPrp*d@43gS3Jl3g9VYOC|xSV?a6Fw5`M%C2ap(#$3% zGjDpkmvAcEelvBnZqp%p9!pwRaFUtllj5#yUz!nkJS=P1(Ic)l2qv{EyfKQ!szxvj zWKn!Svx=|@W4aG?n;~jYsgW{hlYWu20;h8Mb~PpqLd!F;o^5o|0;g#TXk6UrsBOOL zc#^U1#2z?Uf8_O1&5%UFe}`Zr;n@ z-UJcARAp-qZ$Iig@t`6|pfX7!?TZtmDywg>C87?q#=*1#K zHFRO^MGq_t*!C}#8dxfl&5Lx+xg%Y(M^XE$)f-{=oC~au%6OrqdZ7G-N=kWzMFfY( z-;px$E}es$T^b1)R8#K2cvz_DtnK$Bi@JkKgd=w&9TT@V!aJLrmwpYSoRO{HgNC*V z4m8Z@=_sBI7(F15(gSQ=cFKGY8-*ke+gO{w=5un!lk6Mm>Hl8v{ylzQ&G;659~}QV z!Y*l7SJhxh!5f!CIrLX2nfgdr{?&cJx&Xdn(aGn!!x`CRu_zqM4V;!aecoR0@eFJq z;Mt$bHv6Rss?bO2BB=Yks0RrAabCozXKga#7!+m!7kWxH8M_dx&2pTT&iQz);?rkq zUc$!RTJ_HowW#iYk?Y+#x zZbyx3pi9rgXep}C;^jkNR&8KqH(BI0i6`7~TuUY0tS;tr9f)Aryvh|TFXe=S>eVz= zDmRtOGxy0bIFu_FH0J%odu2^U?k>Nb)~EE&EesLg1Hf=-YB~ZvNhkk*bzFB; zQ`z>GUL_(`x(W;+gaAqr0|Lx_ar7kp=ZPZFdfy$h0JSTDDu9y1lGsu8!6spAqt_Fmv7 zWb>ODdA?EQfmf4~T7f(-;nhlB*$H?z=;Y_7BA8`{)UWg03Uk0)y1zg)3;=^3bg1Il1-WTPC1RD^pSrK#sU>sw65hUI?j1OX;wubof)O@d7vlg~cRL@}jvmPs z0-dkt69hS_l{!HB;T?d|*`kG@t0x+aMm0|v%0uM}4gMILssCnwyB1C9S0cK#gchOy zlIu)o{}S+2cqr+Q`w095+9C|hRZ!)wwiCSmZYmA?q|j5EH|XAQfJ&EJli}DB zVXQnn7wma4s-c;J{VjzuJ=MfH@yM8KBDj*Lu4a@g_mfHR^`i(t6?Yw9lzq!V45K0l z&yO@SX&0n-&|Kr2&B=zfsFKoh_SszQ3B{um&Z8n8tSH$Ll};+Ra8iV-$&3CFjvaS1 zMV_onUm%KQdi;#Ul;~3^mvDd1n&N?@SWxrm{HMo*;`hEC!-{n!*-xY^y^pw2+|tCy z>UIIxW|lpRh*rx+80~$3&<{S=Wmowj1479`1c5k1`vOp-7Yeog5F6N{&@Srm?C9_rGzJA9u0`9E*|EN^IT7-vL|-74LcD1Gu>u!)!F& z`OM|0atPlwaucaKAh4|J`HBs(g;T%tbsRx{lP%c#$KWobh`>SpvL=F{fjd#PFNd?w zDhgTFPqs0Bw;arRN#(axiCnj6UFpUXUof=W#+yEqJ)+A$BXNO?%)Rn@sTFl_8Vr!qIiHo9s5Tin!-T3k>&tv@dzGO9J3JEE zx2#Dtxv*m=nDS&rzAod-83S5DBFdeZ5M!>e9}C!* zxzFC&Y6M`-pKeKgyTIuPl^g9k&@|p29?1@KN%U(%Z&9uFaZGy6T^U1LC^VALE)W-(%u*mxN8P?iR7^Xvd1Au0o zVa`9G?PVK4Fa?^Xt8h#{C$NBlT~@oUM3A|4wXMRP4iQcBDoLB>@1}2lAmu5y4SbFw zU!a56!@Ov}v>i^w_`8~?ckPL;LjlIiY#C)-AbeUHLkZrmj`G%>+WlxFs!APWO%;HQ zcsxwJkB{9yNIFbG&r?VY8x1-c4}$0{Dj;b=x5MI=VxSEHd8)7;W*K}-pnH>hql>poY@0L%O$)qqIIesRK(9OX3tLo@lN^}v|!TX9y!bCTjLZy z;h1rK>NA3ps%RycK_9GTt%ZZiVhRCa9oz3nZ$Gwyz#yGJ)QNXjE_ME(gL86&W}mZK zNGCTnN&G0OOnV{fTkndh0LdXa=c5>Y$Lsm#kAT7F9`Ff}27bk3{swbs?Vj<#SuWnA zm<_jq@}r2v*M8HLhBh<8S+8iD}<{;GJUWXK6@~^7d})@ zdT|;Z+oKVKB^J*WT!Tz*0W*uE)vXpEpVW|$b~JK!tQCpHYO6Vk!0gN)WF{{>^FPu$ zb97tJxhs%mUwY>T_V~LBkF!#2Q_cHidf8r{RVJ51#*pWHapU{Ke($f9?h<2DRrW?8 zh`^*1Fjq*pT<#tJ7QY75skA?U@TW#mQ$HlEshwlrpTi={yVcxoH#aDk zw3$)%t%Dff7^b3a$F({&s`Y~Vw79KzyZZwpccR~jRBALP%bXT+OOa|ebzY58t0sV+ z28u+~enHpQC>&F)(rEM%lKmB7G|HBEiR=gd<{X-TPqY!r!FU}-p0D65vvRxwj=pa( z@O5pk?r_~J!DZ$P8N-jvk$FFXcb^6uFt%l##*cPMeee%~Jk_^!(skDNa1yG=~VNDTDUU_c2vhbDb%!T;ql$9 z>D9p0_gJ;Z#lYvNz_l;jA9>1hn+w1DB@C~KJ$)AZeRR3%43#db$rz3>y@tRPCd<17 zT9$0otzo>rR3myjW_7Ik6k=Y9$vu-P*6|!a-K0oY^2Q$jQ+Or_^acT7MC9gP8Li0V zBoradN`|4(-y2kptL$R%0en(ior#{%t`l)Dq33RY+5j!BMv?0~DQ&|xe3&IxB;)H^v)HD1o^>|(VZ8rAP z7^r70TFHJM!3V%BdwQ{7g7EqB7eHUwlP3Y?j}G_)?DkP{zP42>PtqP)7nO{ghE5kt z&O&M*&^%7|-4*=p1K!G^u|z)yE44_w3(SUR+w*Kc#|-`&&Q;vZ*9g<)+ORO$_1s(< zH^mAa`nQSP#LbOP4t4QYet2u)Ip=LLr7m;gl4`lSie95dr9}6P+D2oBrt050 z8Gde!df|AbvtdIet=abD&5|+;;raqly77jnx%hQ12 z@nV(u!YfU0N1x&@nOx81L|=~Rhn{|s5I}iqntwHO{ZvYisDNR%l#^wthN}U4)7P!% zE+<}k-}b_7)W?k*S9lI8W)j54IRPznuTo3jh4v(7V_U@`#H6WOV|s z$L+Ts>NyoVB)2=xRB(H~1iieMq?yd0Uus%o>xy?QLf)A+y2jn4!g5E)52dH-_?eSU zvJXUu&6lO>Rq`1fWvT#|UsAuA+FEmP9tybqFIhKs)<-xFAOC;-H<7oWJ^ZZcb_o2J z2MD|OkHXu}sGkLa{*5x>{efc31O1Hpxj_F$&B6YoT(;IcY&S=aaI + + + 2c0000000200000003000000ffffffffffffffffffffffffffffffff00000000b10000000e0900007a050000 + + + + + + + + + + + + + + + + + + + + + + + + + +