From ef2d9870d5afacdd477255a2bfed1398908d9656 Mon Sep 17 00:00:00 2001 From: Philip Smart Date: Mon, 8 Jun 2020 11:01:13 +0100 Subject: [PATCH] Memory map changes for Sharp MZ700 mode --- software/MZF/MZ700BAS.MZF | Bin 27680 -> 27680 bytes software/src/tools/flashmmcfg | Bin 21808 -> 21776 bytes software/src/tools/flashmmcfg.c | 259 +++++++++++++++++++++++++++++++- software/tools/flashmmcfg | Bin 21808 -> 21776 bytes 4 files changed, 251 insertions(+), 8 deletions(-) diff --git a/software/MZF/MZ700BAS.MZF b/software/MZF/MZ700BAS.MZF index 34dc5bfedf2b0badd794edd0e63636a8da3e1d91..780dedec095440c3e4e6ed820fd5f930041aea07 100644 GIT binary patch delta 24 ccmZ2*gK@zPMkYqbjZ7jrTnukF9A*Fm0BIEl)Bpeg delta 24 bcmZ2*gK@zPMkYpujZ7jrTyHlVW`F6q>g!F4p* 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 z

D0Q{E4rZOEIDtB?zk744f!2kg&B&O%N{PC@R4-frYgs9T_Wc^FUik+*~*kvimj zT7^f3#U z`SoYe2J#~0bmT5vbDNNfPI)=%`N-+WJ&>cmD%v-d+rYO4c@y$_WNNbtc{%a|wEO$F zBa!i@{Bsj*rvHC{e*zo51K4@{0C=+dW@O7HiPu$OZySm{eQzZ4BFeoe-$Qu>}u@mka7ThkZVE?S+^ z#BLaO-Idp5P9QYN+mU;~hucEYMEE<99q89Rgk5Y+OSsLNLUk|Ngl#=%r)pJ zx+w93L4DB<1i`$Ic8o(8_Lq9xfo6`VeyA|&*SY?8`cbstqQp}P1L!Y-%BP@z^P7=K zHpZ9w|0C+Z(SG#5Wf0fD)Y_er_@rfsHGf{8Zs=q$jn(I*59^xFSp(~Hki847h4t2a z_y=w^x`dBA&D&1sA+x?q-+ACW4}9l=?>z9G2fp*b|DFfb?+MlK2USbBr1PXoI%`te zjK_VH)NjwGPZcm;qvJ{aUhxtMt1}#a`N@;|-6EX@DJl9F7a|^lH_3~?I?F9jBCPmr zHI?m>uHx%`ghZmV2&HsUu+g$q1)e*IRH*S%oiX-HG@TbI$?h>c0O6@~kSGcV{wlwgV zEYHYtkaW<+vb;i;Gi5nnmbb`qr5u-)<_09Jey?gKS4o8W-Kz4Z;&aQ2`u(bzt_Df{ zj#bI2vO!jEoHwsP%d)#xxl3!cnK{?w{8m=iFW$z~J`~TN#tP;B6ptSs z{a!*megx~i#)uL1L^d+|J8UC05mAfU&*Jf;S!j-CMDcneyBObx=np@JsozfaM}+oY%Hsi_Q-7+ zU-l6ACW&v7Qn?&Ij%m8aF^YcLUG!*ZYp+R^X{!b$yiVY$xaMJ0Aw>*CEb7f;F0Ug;N~gx4+a* zfBwM_nvh2JnQwGY$I{Qd8qGV{*Ul`C?>qmm<9hnex9qu=wrNC?4ruaWU z;QaA8f_^*z{z>4|Ft3=d5nD9B~O<~oUADe>yw)I8v|sC2ACA2{jnyBrn3 z4^Qa34|t{i_N#;rmsAyy_(FN`;`f$78;t&@@%5e+YZSGIB)|H;k5tFnfG2*YYjOOK zN`AFJ^LtC+_=UuG$#u%_-2wj;$H%GQz<&U*^+mH+2jD+A0RB_p$v;ew*LEKGc#LRl z3=W7BL^ba355PYHr%QG2jS^#z$#TjV2k_htj~{h<{74@paf(My-kjTJ0?NdFs8+ zQhy^W^U&i`dhR)M*0t06XQHp5xSgf-^`&c^Erpzu$w0EI92IEx%oo5Q}CId3evd9GgK zym|ioB}Ge}OZB-WMbrZSP)nKD&&~eE&$Ngy#S|7AzqmpliHXNJUFD^|QYJnX6HlU{ zsV$Gk;Q`{p(mLZOW#Z}L12pkC@z9UN`g~_5p3%Fyv<_oXj?*I}9|@7TkIjfL+r*1u z?7bdmRcUQG|2R$5L!<(;h#q_kO{=_K@zol}zj5QIhq~e;Iwpnve9?wJxD(GMKBW_n zb2{;*95oy06FU8V11J9LJMkJ=j(1IsuXGhke8h*BRjP(Z*sl6ImV-yIt{i=CakdZ3 zL_n3b{+v~QH@+a{E@wFeRp9|O%PC(|3w@&W)e8z9c6;%dHx6)uR`04VB>`EhtM;)R z?!z2Zb1FRmeXd6Qr4<7v51%}|GT7kpk$PZg z8s=b#SPqtL4VGeb7x|kjbfUx7jWdc!`Ld!)6<$Yib{Pk%ac^)v~q@}B@3N@cH7V}>6$$*XgVDtFQXF(lQl zLOqF!v3(VPs#4t#QvBxrKP~0e_^CKml_jRQ*lhm`CVBIB0IOBQvNX59!z8cbURADD zhDmvI`!54eu_CP@O6tC!`aYnUU%{&U3uJ7_N?yg$-4sY6DLw(kV1+*f0{LIbtGF@r zKgcV6$55fUtK?N&uD;*cP0Eqf{8sI%d9VpIWBV$8@4A7Dv0PC^|0;P^iufNQ6XMR#?my!I6YVA1?!gc|5AW-OGfpZ_99BOzM{5sjQEpQEXr$4MAfch V9gd2Lg_Gu$2o8#?jmZSE{{~g04qX5M literal 21808 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 0x0000 && Z80_ADDR < 0x1000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; + flashRAM[set].tranche[inSignals].A16 = 0; + flashRAM[set].tranche[inSignals].A17 = 1; + flashRAM[set].tranche[inSignals].A18 = 1; + } + else if((Z80_ADDR >= 0x1000 && Z80_ADDR < 0xD000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; + flashRAM[set].tranche[inSignals].A16 = 0; + flashRAM[set].tranche[inSignals].A17 = 0; + flashRAM[set].tranche[inSignals].A18 = 0; + } + else if((Z80_ADDR >= 0xD000 && Z80_ADDR < 0x10000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 1; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 0; + } + break; + // Set 11 - MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 0, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the tranZPUter in block 6. + case 11: + if((Z80_ADDR >= 0x0000 && Z80_ADDR < 0x1000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; + flashRAM[set].tranche[inSignals].A16 = 0; + flashRAM[set].tranche[inSignals].A17 = 0; + flashRAM[set].tranche[inSignals].A18 = 0; + } + else if((Z80_ADDR >= 0x1000 && Z80_ADDR < 0xD000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; + flashRAM[set].tranche[inSignals].A16 = 0; + flashRAM[set].tranche[inSignals].A17 = 0; + flashRAM[set].tranche[inSignals].A18 = 0; + } + else if((Z80_ADDR >= 0xD000 && Z80_ADDR < 0x10000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; + flashRAM[set].tranche[inSignals].A16 = 0; + flashRAM[set].tranche[inSignals].A17 = 1; + flashRAM[set].tranche[inSignals].A18 = 1; + } + break; + + // Set 12 - MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the tranZPUter in block 6. + case 12: + if((Z80_ADDR >= 0x0000 && Z80_ADDR < 0x1000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; + flashRAM[set].tranche[inSignals].A16 = 0; + flashRAM[set].tranche[inSignals].A17 = 1; + flashRAM[set].tranche[inSignals].A18 = 1; + } + else if((Z80_ADDR >= 0x1000 && Z80_ADDR < 0xD000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; + flashRAM[set].tranche[inSignals].A16 = 0; + flashRAM[set].tranche[inSignals].A17 = 0; + flashRAM[set].tranche[inSignals].A18 = 0; + } + else if((Z80_ADDR >= 0xD000 && Z80_ADDR < 0x10000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; + flashRAM[set].tranche[inSignals].A16 = 0; + flashRAM[set].tranche[inSignals].A17 = 1; + flashRAM[set].tranche[inSignals].A18 = 1; + } + break; + + // Set 13 - MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 0, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is inaccessible. + case 13: + if((Z80_ADDR >= 0x0000 && Z80_ADDR < 0x1000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; + flashRAM[set].tranche[inSignals].A16 = 0; + flashRAM[set].tranche[inSignals].A17 = 0; + flashRAM[set].tranche[inSignals].A18 = 0; + } + else if((Z80_ADDR >= 0x1000 && Z80_ADDR < 0xD000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; + flashRAM[set].tranche[inSignals].A16 = 0; + flashRAM[set].tranche[inSignals].A17 = 0; + flashRAM[set].tranche[inSignals].A18 = 0; + } + else if((Z80_ADDR >= 0xD000 && Z80_ADDR < 0x10000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 1; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; + } + break; + + // Set 14 - MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is inaccessible. + case 14: + if((Z80_ADDR >= 0x0000 && Z80_ADDR < 0x1000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; + flashRAM[set].tranche[inSignals].A16 = 0; + flashRAM[set].tranche[inSignals].A17 = 1; + flashRAM[set].tranche[inSignals].A18 = 1; + } + else if((Z80_ADDR >= 0x1000 && Z80_ADDR < 0xD000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; + flashRAM[set].tranche[inSignals].A16 = 0; + flashRAM[set].tranche[inSignals].A17 = 0; + flashRAM[set].tranche[inSignals].A18 = 0; + } + else if((Z80_ADDR >= 0xD000 && Z80_ADDR < 0x10000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 1; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; + } + break; // Set 24 - All memory and IO are on the tranZPUter board, 64K block 0 selected. case 24: @@ -499,9 +634,18 @@ void setMap(uint8_t set, uint32_t inSignals) // If the address is within configured IO control register range, activate the IODECODE signal. if(Z80_IO_ADDR == ioAddr) { - flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; - flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; - flashRAM[set].tranche[inSignals].IODECODE = 0; + if(set >= 10 && set < 15) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 1; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; + flashRAM[set].tranche[inSignals].IODECODE = 0; + } + else + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].ENABLE_BUS = 1; + flashRAM[set].tranche[inSignals].IODECODE = 0; + } } else { flashRAM[set].tranche[inSignals].ENABLE_BUS = 0; @@ -597,6 +741,56 @@ void setMap(uint8_t set, uint32_t inSignals) } break; + // Set 10 - MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the mainboard. + case 10: + if( (Z80_ADDR >= 0x0000 && Z80_ADDR < 0x1000) || (Z80_ADDR >= 0x1000 && Z80_ADDR < 0xD000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].RAM_WE = 0; + flashRAM[set].tranche[inSignals].RAM_OE = 1; + } + break; + + // Set 11 - MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 0, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the tranZPUter in block 6. + case 11: + if( (Z80_ADDR >= 0x0000 && Z80_ADDR < 0x1000) || (Z80_ADDR >= 0x1000 && Z80_ADDR < 0xD000) || (Z80_ADDR >= 0xD000 && Z80_ADDR < 0x10000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].RAM_WE = 0; + flashRAM[set].tranche[inSignals].RAM_OE = 1; + } + break; + + // Set 12 - MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the tranZPUter in block 6. + case 12: + if( (Z80_ADDR >= 0x0000 && Z80_ADDR < 0x1000) || (Z80_ADDR >= 0x1000 && Z80_ADDR < 0xD000) || (Z80_ADDR >= 0xD000 && Z80_ADDR < 0x10000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].RAM_WE = 0; + flashRAM[set].tranche[inSignals].RAM_OE = 1; + } + break; + + // Set 13 - MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 0, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is inaccessible. + case 13: + if( (Z80_ADDR >= 0x0000 && Z80_ADDR < 0x1000) || (Z80_ADDR >= 0x1000 && Z80_ADDR < 0xD000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].RAM_WE = 0; + flashRAM[set].tranche[inSignals].RAM_OE = 1; + } + break; + + // Set 14 - MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is inaccessible. + case 14: + if( (Z80_ADDR >= 0x0000 && Z80_ADDR < 0x1000) || (Z80_ADDR >= 0x1000 && Z80_ADDR < 0xD000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].RAM_WE = 0; + flashRAM[set].tranche[inSignals].RAM_OE = 1; + } + break; + // Set 24 - All memory and IO are on the tranZPUter board, 64K block 0 selected. case 24: flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; @@ -731,6 +925,56 @@ void setMap(uint8_t set, uint32_t inSignals) } break; + // Set 10 - MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the mainboard. + case 10: + if( (Z80_ADDR >= 0x0000 && Z80_ADDR < 0x1000) || (Z80_ADDR >= 0x1000 && Z80_ADDR < 0xD000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].RAM_WE = 1; + flashRAM[set].tranche[inSignals].RAM_OE = 0; + } + break; + + // Set 11 - MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 0, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the tranZPUter in block 6. + case 11: + if( (Z80_ADDR >= 0x0000 && Z80_ADDR < 0x1000) || (Z80_ADDR >= 0x1000 && Z80_ADDR < 0xD000) || (Z80_ADDR >= 0xD000 && Z80_ADDR < 0x10000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].RAM_WE = 1; + flashRAM[set].tranche[inSignals].RAM_OE = 0; + } + break; + + // Set 12 - MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is on the tranZPUter in block 6. + case 12: + if( (Z80_ADDR >= 0x0000 && Z80_ADDR < 0x1000) || (Z80_ADDR >= 0x1000 && Z80_ADDR < 0xD000) || (Z80_ADDR >= 0xD000 && Z80_ADDR < 0x10000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].RAM_WE = 1; + flashRAM[set].tranche[inSignals].RAM_OE = 0; + } + break; + + // Set 13 - MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 0, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is inaccessible. + case 13: + if( (Z80_ADDR >= 0x0000 && Z80_ADDR < 0x1000) || (Z80_ADDR >= 0x1000 && Z80_ADDR < 0xD000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].RAM_WE = 1; + flashRAM[set].tranche[inSignals].RAM_OE = 0; + } + break; + + // Set 14 - MZ700 Mode - 0000:0FFF is on the tranZPUter board in block 6, 1000:CFFF is on the tranZPUter board in block 0, D000:FFFF is inaccessible. + case 14: + if( (Z80_ADDR >= 0x0000 && Z80_ADDR < 0x1000) || (Z80_ADDR >= 0x1000 && Z80_ADDR < 0xD000)) + { + flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; + flashRAM[set].tranche[inSignals].RAM_WE = 1; + flashRAM[set].tranche[inSignals].RAM_OE = 0; + } + break; + // Set 24 - All memory and IO are on the tranZPUter board, 64K block 0 selected. case 24: flashRAM[set].tranche[inSignals].DISABLE_BUS = 0; @@ -865,13 +1109,12 @@ int main(int argc, char *argv[]) {"help", no_argument, 0, 'h'}, {"ioaddr", required_argument, 0, 'i'}, {"output", required_argument, 0, 'o'}, - {"verbose", no_argument, 0, 'v'}, - {0, 0, 0, 0} + {"verbose", no_argument, 0, 'v'} }; // Parse the command line options. // - while((opt = getopt_long(argc, argv, ":hvo;", long_options, &option_index)) != -1) + while((opt = getopt_long(argc, argv, ":hi:vo:", long_options, &option_index)) != -1) { switch(opt) { @@ -880,11 +1123,11 @@ int main(int argc, char *argv[]) break; case 'i': - ioAddr = atoi(argv[optind]); + ioAddr = atoi(argv[optind-1]); break; case 'o': - strcpy(outputFile, argv[optind]); + strcpy(outputFile, argv[optind-1]); break; case 'v': diff --git a/software/tools/flashmmcfg b/software/tools/flashmmcfg index 0aac63942ca7d5bd6ef117f4c1d4995c58d4e13c..319f3c0d3b9fb62389aa6a6e6d9390c0afb09bb5 100755 GIT binary patch literal 21776 zcmeHPdw5humaonO5`^yXl7Of;5F{vx2?B-)nhPE5ut6Cf%Ba|cq?5EJ>6q>g!F4p* zhJ;?s4CAa0&gd+T&MwY4KK652<^>6`7Pxc&b_zq14SkC6D$^{QX;#a5wv-Tz!XZtqJ^@8qLAgYRQ$c1UB(6h zPUbj4FBAo+BK1nus!WmiM3hO$`3VAHF2_qgRVoXqr1l0%_stX(RWhb=1j&)D`{!^F zrN%3&%p!x3suGoj8i&a|lIxLjJyK4U-O?~sDrxE)<)yNJ=F$!tB~=nHrA0@5d;s|A{=QptS}a%AUUo6;oXV%gq+ev$TP$x?QgU0v;7HFNsa)#cgM?pl9ic4Pj` z?3vSZyq=tCyx*jscyGLE8E;AXQ3FIak3uGw6TM=}xx#2f$xH0Dj5<_>}|Te+ayWY)-jA z^k?Uo0q~CluOXWg>F7_-f&uU^0IwmN)AxXwU`7JI6nQus$C$36CdQUmFh9y@I?QBV zUwv8K8s=(r`&fmi&Q;4ibv}1(Iji&gysWO?UF)kLCZDI8Rg_hGye?Mh@`1-$?WwI~ z6|3vrJ{NO3%Nk3a74F*7YWKYaQUgw}ue9FhtSNQZGH3D9h0bzUy{ppg^||VoE}RE( z*V58e)x=#{tcV+n?TjMwA; z5|@Sl6LXkg|2TIlalJ|alG=CFezBP*CQ`TDUle|&#IG#WI6aD&aFYrDq(R z4L!&;guYI=vs|cYy`}ceye^t}rY|jNn{)xRWlJ1w*~6~H4idcJ z2%dH{pUgt*jy8LyR?=3TIsPSkCO-u10fIS#_RJJV+vv`Tj4cd?N`i+R!T0UKFGJJO zR-iXxTl*NA34{s)y|Y*EbClWFF^44->3%8sYM4b{IMLxKOCAKkvEe?b+Th#O8+z$N zBy!?u;6H&qzo+5KI|DK(=RpZ3-vIQ9puU64H-m2v5RSGvt0%!w(va64+6B(=Dp&#X zzY6jY7^%ol5qTcSdLUx4t$ht`G~I^|+1AqG%Ylw+jAH zux^;~$C(;yzOWf}+rvAXFZA$A``Vp8Yp^HKy(7@8+19NEvZO89jn?zpcc86E#YRV2 zPu`o3j$_sm%O08^!8ZasEzMuCLdFW$&$jwc1==kT_U{W#!)3w|{2=s?m>X2Sc|H=^ zko+~;#k?De-a27i=ow%g&AVxc^4f1-q2Hme(C^fpyFvkUBQFvr3yF?kkE0`WgTu1N@x}#TI+VR2 zl?@fjguGc_)11elhxsQv0&`j+0F}X`aOZ|O9|8&;{5lc|Inad_dy;)%w4Cm1k3J3d z1a4sdi^6x(n2LUGNS-3w50lDB*NSi_X#9im*O|=g>Q?ICz9xkoTrN_$lU#qim<6qZ`^owyo1sf<3`6+e3p3+fNM&9JkoE zws#yK)X_aSwKw=BU@AaLMz!O3vV;;ilq8`<4kdD^>k}|11&&#Ovz+NTo{-v`+M};e z8s)%}as>lF5A3n%%@?Te zwso^<>;k(rwWKf&n!wG1pJK-hex~2j5l*B{bD7@pQNoh8@&C?=J$kV7jZjhW4L$gQ zo{E*OXLRVz$J-;co4%?Cx-CV)u0q?^Q+8X?D|+fKJ)=ht9J1(v!yvo`HbaC)w z;4$Mi5c-38 z@$>{vr|S>sdNT@4sMa!g1jgR+!o;Yt(awhH`XbjC`2P$1E$6W7VxdjFXCl*^N=CE9 z@I7E6e~tZg0#^$*K3uC`#DG!9MZ*h7S9Jd@YI~0LL?RITFc+Gd&qsDhv4)q!jl7S1 zUPtX*BJ6ze`3e2l`3ZJ+X=m`D-h8zE942=2#|)Q0sNR87i>+k{3@2?^5Vn@{ID?T1 zDOg@;8m45BbkZs0HT)iK_b%7}9u8nmwW?7;bK_t>tbQ ziE)Wp{VXzUFf&FPd^|F|AdarLwYHCmMCLpI zYZ@lYo;6$sG`VvQIkO>6Z$8C(MZeMV>QUIHUi_`bY+I9t2fDWhI-Axf4ObTeoUQ0O z2?Y_-dtnR|q)NT3-+|=4*%|SYCw9|5@Hg1;Ahb>W*kni83#Z5W57V1Ya?>B6)z`WV zR2;UxsMc6hX4>{}5nyhw9Me`hm_zU0XC}s58NP({Zd7C63hxl#Gu39k(^wj@_Q4XI zYG&!;tB3C^pu0~_Fg5jjj2><8G2p;F`x!HHAg(E8E*5b3E(y;P@PR8O zJOwZ-Dp6_)G4zsC~hYq&)|) z6X5zEK@io3$tW)SyMctq{y5ff*~fZ7f4}!@E_Z+U39!V@`^mHJlK3DOO`dY4gx3go z>_^=G`@?Plr;7gGAO608&$=bOSis>a5}pM(IwDg!aoC@qR+IPoKxZM=d3YoUvH2b4 z{~Fs0`tg|C%zrp;zX8jdDQ1>-u*mZx=-&^kDXyB_9HU3udr-7D^=UJ+H?Fc%6VJ9hYms519PZe7GG4tiY?!B6b$JPJqv= zkVob4_%Dq3vH#Maz9m8*?Poae(s>34U0ds);U(xg`m5NnJ9bpQoXhb3fv4kW^ti#} zA94OV_nETuiAk|`DLxYPccb)XSAXQ_a<{Wx9Y%wLqz8GJqPp{2-H^iuFEd+O`eI?^{9Wed}zk>~do(zp-?B-|~E7lXxXAkpuZ~DbW!7uFS*E!&h0%r_s!7Q#{_SDWT7XKJ~#sP|N zZN+UvN7=So0^RooIuEV46s|pETXzUYjiR-0+Scvo6)d2i!U$>4bX+VQ8{j4Eg8N~Q zqb#YJhqkeK?0&MZJu}Y-x0TTn0fg zFNoI|c6^S|4G}93pF*e;-55UY1rGN7_KE14HiSS`c{n`K17(caR zjE^W@g$^EWWl1}Xc2c})wv7qfhCdteyQ z6}N*BOACWnr(;`m|3V#qwu?}jpI`3FJVJL`eG};pGhK|rkK!=05plt+_xX8!d$VNm z9|ZktOA{_(7VNZN^JgphU^ay0(fu6qXIJpE()JTS7jZ`TQVDMm@PWq#%x`~*F4$VD zF&$v*pB`7oZE0(G3Ewywx)?qFO_u$>+}Q6C#(vvc#|wQm2h~AU>67;rjiTekM$}+Z zaR9>%ldgQ+tfCzRb^U5v7YjFss?PkgknFj`EZG8r*bn=as}yqE#+&7CGRVco|F7}G zD528zo@ow*&&hq_W4e9Od|uqWI0hs}@Y*}%-HW#Y3wu@9c5{wlqaRZ-mh$Uwq&~5i zwmv5KKEB<|7Z7}K>>HPuX_cJTgsp?_RKM`9c`n>&q$mIQb}>)Gxg0I_16aT25{XX- z95e3OAGP#!nWzSw{V`KA}s10TWcoH5wVRfCtS{t!i5wkPkC3&SAGsti^8^! z0&BwxkoyLXC1(+TFGKt-Pbd$8Pn}S<;woi0q1dUP$uIwm>%Tu-MVxKPzq?Js%LV-O zI0-uh{OCKpKlg|81swdDgtG*^<~9kZ3)nqQ!YP2&ILdH(;m_0@;)<-yZ^6^_` zG~FWLef#8$j@^$J@iZO(DW<+7^K(Q2zQrPpUT+B}tN0dyfIpSOg0%(EC6?H_tA*Mo zsCBemx&{Sq9jD>(+*!oJJfa>Mo`=bg{zBrbq}9Vkp_pZ90mjpj5 z37)Y-LuAx@j=(O9W7a|cNAz^xu-6-&=bzq%J)HE(w~+F3a@qV6eTie?!g=#=)EXvv zhp-_xzRi$um)HCDtb?lF-^;^((co;vx!TK zOG~TVUX7!DF0U^K%!1#|`Q4su(x}a*zt@xC+)}SgBgp0TY89S(%~$2pif`8Dd1`(2 zo@!0KG3X^#XxGE_2#d7YWHVQz$xe_oe_c^qg_joV*J$pV(n^=+^KiYD?gm#a?`V$3 z4ds1?!FBbX%KFlp8dtf77b6Ape7vJrr7hMM=1{v0yj|%6GF&FvZjGnjrPZJhXpNgH z`&~gwYHG?VD&Z|@wcS~uTYzabRdZL?dhj-BWd>NJGq_i4JwDA_=PGkoxLxH_HB3jc z)Q=o>gcv>y>^zUZy1dp0y%-)ELg^_|R4~b#BU;A;i@x(Bega`A-PP5u%F^nBNx9P- zVI7R9BJJ8LXst!A;O?7>zcX{`ug?F@&!t8-9gaj6eHe*kq1<#R64{S>FUlsAX#^h= zxw|_OS&zI8xe7TSS<$|!Ob1`@2jE5CgxrX{4S6|o_xm_Eq22T&(1)@ec_Z?cqmjr; z

D0Q{E4rZOEIDtB?zk744f!2kg&B&O%N{PC@R4-frYgs9T_Wc^FUik+*~*kvimj zT7^f3#U z`SoYe2J#~0bmT5vbDNNfPI)=%`N-+WJ&>cmD%v-d+rYO4c@y$_WNNbtc{%a|wEO$F zBa!i@{Bsj*rvHC{e*zo51K4@{0C=+dW@O7HiPu$OZySm{eQzZ4BFeoe-$Qu>}u@mka7ThkZVE?S+^ z#BLaO-Idp5P9QYN+mU;~hucEYMEE<99q89Rgk5Y+OSsLNLUk|Ngl#=%r)pJ zx+w93L4DB<1i`$Ic8o(8_Lq9xfo6`VeyA|&*SY?8`cbstqQp}P1L!Y-%BP@z^P7=K zHpZ9w|0C+Z(SG#5Wf0fD)Y_er_@rfsHGf{8Zs=q$jn(I*59^xFSp(~Hki847h4t2a z_y=w^x`dBA&D&1sA+x?q-+ACW4}9l=?>z9G2fp*b|DFfb?+MlK2USbBr1PXoI%`te zjK_VH)NjwGPZcm;qvJ{aUhxtMt1}#a`N@;|-6EX@DJl9F7a|^lH_3~?I?F9jBCPmr zHI?m>uHx%`ghZmV2&HsUu+g$q1)e*IRH*S%oiX-HG@TbI$?h>c0O6@~kSGcV{wlwgV zEYHYtkaW<+vb;i;Gi5nnmbb`qr5u-)<_09Jey?gKS4o8W-Kz4Z;&aQ2`u(bzt_Df{ zj#bI2vO!jEoHwsP%d)#xxl3!cnK{?w{8m=iFW$z~J`~TN#tP;B6ptSs z{a!*megx~i#)uL1L^d+|J8UC05mAfU&*Jf;S!j-CMDcneyBObx=np@JsozfaM}+oY%Hsi_Q-7+ zU-l6ACW&v7Qn?&Ij%m8aF^YcLUG!*ZYp+R^X{!b$yiVY$xaMJ0Aw>*CEb7f;F0Ug;N~gx4+a* zfBwM_nvh2JnQwGY$I{Qd8qGV{*Ul`C?>qmm<9hnex9qu=wrNC?4ruaWU z;QaA8f_^*z{z>4|Ft3=d5nD9B~O<~oUADe>yw)I8v|sC2ACA2{jnyBrn3 z4^Qa34|t{i_N#;rmsAyy_(FN`;`f$78;t&@@%5e+YZSGIB)|H;k5tFnfG2*YYjOOK zN`AFJ^LtC+_=UuG$#u%_-2wj;$H%GQz<&U*^+mH+2jD+A0RB_p$v;ew*LEKGc#LRl z3=W7BL^ba355PYHr%QG2jS^#z$#TjV2k_htj~{h<{74@paf(My-kjTJ0?NdFs8+ zQhy^W^U&i`dhR)M*0t06XQHp5xSgf-^`&c^Erpzu$w0EI92IEx%oo5Q}CId3evd9GgK zym|ioB}Ge}OZB-WMbrZSP)nKD&&~eE&$Ngy#S|7AzqmpliHXNJUFD^|QYJnX6HlU{ zsV$Gk;Q`{p(mLZOW#Z}L12pkC@z9UN`g~_5p3%Fyv<_oXj?*I}9|@7TkIjfL+r*1u z?7bdmRcUQG|2R$5L!<(;h#q_kO{=_K@zol}zj5QIhq~e;Iwpnve9?wJxD(GMKBW_n zb2{;*95oy06FU8V11J9LJMkJ=j(1IsuXGhke8h*BRjP(Z*sl6ImV-yIt{i=CakdZ3 zL_n3b{+v~QH@+a{E@wFeRp9|O%PC(|3w@&W)e8z9c6;%dHx6)uR`04VB>`EhtM;)R z?!z2Zb1FRmeXd6Qr4<7v51%}|GT7kpk$PZg z8s=b#SPqtL4VGeb7x|kjbfUx7jWdc!`Ld!)6<$Yib{Pk%ac^)v~q@}B@3N@cH7V}>6$$*XgVDtFQXF(lQl zLOqF!v3(VPs#4t#QvBxrKP~0e_^CKml_jRQ*lhm`CVBIB0IOBQvNX59!z8cbURADD zhDmvI`!54eu_CP@O6tC!`aYnUU%{&U3uJ7_N?yg$-4sY6DLw(kV1+*f0{LIbtGF@r zKgcV6$55fUtK?N&uD;*cP0Eqf{8sI%d9VpIWBV$8@4A7Dv0PC^|0;P^iufNQ6XMR#?my!I6YVA1?!gc|5AW-OGfpZ_99BOzM{5sjQEpQEXr$4MAfch V9gd2Lg_Gu$2o8#?jmZSE{{~g04qX5M literal 21808 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