From 82e626e67d9912b2d454a1fff41ec5d9fff91f9b Mon Sep 17 00:00:00 2001 From: Tipx-L <138244655+Tipx-L@users.noreply.github.com> Date: Wed, 27 Sep 2023 22:36:29 -0700 Subject: [PATCH] Change game.playAudio. --- character/mobile.js | 2 +- game/game.js | 143 +++++++++++++++++++++--------------- image/card/group_ye.png | Bin 0 -> 4193 bytes image/flappybird/ground.png | Bin 5619 -> 5366 bytes 4 files changed, 84 insertions(+), 61 deletions(-) create mode 100644 image/card/group_ye.png diff --git a/character/mobile.js b/character/mobile.js index 9485823e7..cb362bbee 100644 --- a/character/mobile.js +++ b/character/mobile.js @@ -6805,7 +6805,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){ update: function () { if(state.curr == state.gameOver || state.curr == state.gameSuccess) return; this.x -= dx * deltaTime; - const halfWidth = this.sprite.width / 2; + const halfWidth = this.sprite.width / 4; if(this.x <= -halfWidth) this.x += halfWidth; }, }; diff --git a/game/game.js b/game/game.js index 367ffc65b..8c99d92c0 100644 --- a/game/game.js +++ b/game/game.js @@ -274,7 +274,7 @@ if(typeof background!='string') background=''; if(!Array.isArray(lineColor)||lineColor.length!=3) lineColor=[]; else if(background.indexOf('ext:')==0){ - background=background.replace(/ext:/,'extension/'); + background=background.replace(/^ext:/,'extension/'); } if(linked) lib.linked.add(nature); if(lineColor.length) lib.lineColor.set(nature,lineColor); @@ -7974,7 +7974,7 @@ break; } } - if(extimage) src=extimage.replace(/ext:/,'extension/'); + if(extimage) src=extimage.replace(/^ext:/,'extension/'); else if(dbimage){ this.setBackgroundDB(dbimage.slice(3)); return this; @@ -10351,7 +10351,7 @@ var avatarnode=ui.create.div(node,'.avatar'); var avatarbg=lib.mode[lib.config.all.mode[i]].splash; if(avatarbg.indexOf('ext:')==0){ - avatarnode.setBackgroundImage(avatarbg.replace(/ext:/,'extension/')); + avatarnode.setBackgroundImage(avatarbg.replace(/^ext:/,'extension/')); } else{ avatarnode.setBackgroundDB(avatarbg); @@ -17523,11 +17523,10 @@ } const audio=lib.card[card.name].audio; if(typeof audio=='string'){ - const audioInfo=audio.split('::'); - if(audioInfo.length<2) audioInfo.push('mp3'); - if(audio.indexOf('db:')==0) game.playAudio(`${audioInfo[0]}${card.name}_${sex}.${audioInfo[1]}`); - else if(audio.indexOf('ext:')==0) game.playAudio('..','extension',audioInfo[0].slice(4),`${card.name}_${sex}.${audioInfo[1]}`); - else game.playAudio('card',sex,`${audioInfo[0]}.${audioInfo[1]}`); + const audioInfo=audio.split(':'); + if(audio.indexOf('db:')==0) game.playAudio(`${audioInfo[0]}:${audioInfo[1]}`,audioInfo[2],`${card.name}_${sex}.${audioInfo[3]||'mp3'}`); + else if(audio.indexOf('ext:')==0) game.playAudio(`${audioInfo[0]}:${audioInfo[1]}`,`${card.name}_${sex}.${audioInfo[2]||'mp3'}`); + else game.playAudio('card',sex,`${audioInfo[0]}.${audioInfo[1]||'mp3'}`); } else game.playAudio('card',sex,card.name); },player,card); @@ -28977,7 +28976,7 @@ this.classList.add('fullskin'); if(img){ if(img.indexOf('ext:')==0){ - this.node.image.setBackgroundImage(img.replace(/ext:/,'extension/')); + this.node.image.setBackgroundImage(img.replace(/^ext:/,'extension/')); } else{ this.node.image.setBackgroundDB(img); @@ -29012,7 +29011,7 @@ this.classList.add('fullimage'); if(img){ if(img.indexOf('ext:')==0){ - this.setBackgroundImage(img.replace(/ext:/,'extension/')); + this.setBackgroundImage(img.replace(/^ext:/,'extension/')); this.style.backgroundSize='cover'; } else{ @@ -29056,7 +29055,7 @@ } if(img){ if(img.indexOf('ext:')==0){ - this.node.avatar.setBackgroundImage(img.replace(/ext:/,'extension/')); + this.node.avatar.setBackgroundImage(img.replace(/^ext:/,'extension/')); this.node.avatar.style.backgroundSize='cover'; } else{ @@ -29088,7 +29087,7 @@ else if(typeof lib.card[bg].image=='string'&&!lib.card[bg].fullskin){ if(img){ if(img.indexOf('ext:')==0){ - this.setBackgroundImage(img.replace(/ext:/,'extension/')); + this.setBackgroundImage(img.replace(/^ext:/,'extension/')); this.style.backgroundSize='cover'; } else{ @@ -34470,15 +34469,23 @@ }, playAudio:function(){ if(_status.video&&arguments[1]!='video') return; - let path='',onError=null; + let path='',emptyPath=true,notCheckDBPath=true,onError=null; for(const argument of arguments){ if(typeof argument==='string'||typeof argument=='number'){ - if(path) path+='/'; + if(emptyPath) emptyPath=false; + else if(notCheckDBPath){ + notCheckDBPath=false; + if(/^db:extension-[^:]*$/.test(path)) path+=':'; + else path+='/'; + } + else path+='/'; path+=argument; } else if(typeof argument=='function') onError=argument; if(_status.video) break; } + if(path.indexOf('ext:')==0) path=path.replace(/^ext:/,'extension/'); + else if(path.indexOf('db:')!=0) path=`audio/${path}`; if(!lib.config.repeat_audio&&_status.skillaudio.contains(path)) return; _status.skillaudio.add(path); game.addVideo('playAudio',null,path); @@ -34500,8 +34507,8 @@ audio.oncanplay=()=>Promise.resolve(audio.play()).catch(()=>void 0); new Promise((resolve,reject)=>{ if(path.indexOf('db:')==0) game.getDB('file',path.slice(3)).then(octetStream=>resolve(get.objectURL(octetStream)),reject); - else if(lib.path.extname(path)) resolve(`${lib.assetURL}audio/${path}`); - else resolve(`${lib.assetURL}audio/${path}.mp3`); + else if(lib.path.extname(path)) resolve(`${lib.assetURL}${path}`); + else resolve(`${lib.assetURL}${path}.mp3`); }).then(resolvedPath=>{ audio.src=resolvedPath; ui.window.appendChild(audio); @@ -34518,63 +34525,73 @@ if(info.direct&&!directaudio) return; if(lib.skill.global.includes(skill)&&!lib.skill[skill].forceaudio) return; } - var audioname=skill; - var audioinfo=info.audio; - var fixednum; + var audioName=skill; + var audioInfo=info.audio; + var fixedNum; if(info.audioname2){ if(info.audioname2[player.name]){ - audioname+='_'+player.name; - audioinfo=info.audioname2[player.name]; + audioName+='_'+player.name; + audioInfo=info.audioname2[player.name]; } else if(info.audioname2[player.name1]){ - audioname+='_'+player.name1; - audioinfo=info.audioname2[player.name1]; + audioName+='_'+player.name1; + audioInfo=info.audioname2[player.name1]; } else if(info.audioname2[player.name2]){ - audioname+='_'+player.name2; - audioinfo=info.audioname2[player.name2]; + audioName+='_'+player.name2; + audioInfo=info.audioname2[player.name2]; } } var history=[]; while(true){//可以嵌套引用了 - if(history.includes(audioname)) break; - history.push(audioname); - if(typeof audioinfo=='string'&&lib.skill[audioinfo]){ - audioname=audioinfo; - audioinfo=lib.skill[audioname].audio; + if(history.includes(audioName)) break; + history.push(audioName); + if(typeof audioInfo=='string'&&lib.skill[audioInfo]){ + audioName=audioInfo; + audioInfo=lib.skill[audioName].audio; continue; } - if(Array.isArray(audioinfo)){ - audioname=audioinfo[0]; - if(!fixednum) fixednum=audioinfo[1];//数组会取第一个指定语音数 - audioinfo=lib.skill[audioname].audio; + if(Array.isArray(audioInfo)){ + audioName=audioInfo[0]; + if(!fixedNum) fixedNum=audioInfo[1];//数组会取第一个指定语音数 + audioInfo=lib.skill[audioName].audio; continue; } break; } if(Array.isArray(info.audioname)&&player){ - if(info.audioname.includes(player.name)&&(!info.audioname2||!info.audioname2[player.name])) audioname+='_'+player.name; - else if(info.audioname.includes(player.name1)&&(!info.audioname2||!info.audioname2[player.name1])) audioname+='_'+player.name1; - else if(info.audioname.includes(player.name2)&&(!info.audioname2||!info.audioname2[player.name2])) audioname+='_'+player.name2; + if(info.audioname.includes(player.name)&&(!info.audioname2||!info.audioname2[player.name])) audioName+='_'+player.name; + else if(info.audioname.includes(player.name1)&&(!info.audioname2||!info.audioname2[player.name1])) audioName+='_'+player.name1; + else if(info.audioname.includes(player.name2)&&(!info.audioname2||!info.audioname2[player.name2])) audioName+='_'+player.name2; } - if(typeof audioinfo=='string'){ - if(audioinfo.indexOf('ext:')!=0) return; - audioinfo=audioinfo.split(':'); - if(audioinfo.length!=3) return; - if(audioinfo[2]=='true') game.playAudio('..','extension',audioinfo[1],audioname); - else{ - audioinfo[2]=parseInt(audioinfo[2]); - if(fixednum) audioinfo[2]=Math.min(audioinfo[2],fixednum); - if(!audioinfo[2]) return; - game.playAudio('..','extension',audioinfo[1],audioname+Math.ceil(audioinfo[2]*Math.random())); + if(typeof audioInfo=='string'){ + if(audioInfo.indexOf('db:')==0){ + audioInfo=audioInfo.split(':'); + if(audioInfo.length<4) return; + if(audioInfo[3]=='true') game.playAudio(`${audioInfo[0]}:${audioInfo[1]}`,audioInfo[2],`${audioName}.${audioInfo[4]||'mp3'}`); + else{ + audioInfo[3]=fixedNum?Math.min(parseInt(audioInfo[3]),fixedNum):parseInt(audioInfo[3]); + if(!audioInfo[3]) return; + game.playAudio(`${audioInfo[0]}:${audioInfo[1]}`,audioInfo[2],`${audioName}${Math.floor(audioInfo[3]*Math.random())+1}.${audioInfo[4]||'mp3'}`); + } + } + else if(audioInfo.indexOf('ext:')==0){ + audioInfo=audioInfo.split(':'); + if(audioInfo.length<3) return; + if(audioInfo[2]=='true') game.playAudio(`${audioInfo[0]}:${audioInfo[1]}`,`${audioName}.${audioInfo[3]||'mp3'}`); + else{ + audioInfo[2]=fixedNum?Math.min(parseInt(audioInfo[2]),fixedNum):parseInt(audioInfo[2]); + if(!audioInfo[2]) return; + game.playAudio(`${audioInfo[0]}:${audioInfo[1]}`,`${audioName}${Math.floor(audioInfo[2]*Math.random())+1}.${audioInfo[3]||'mp3'}`); + } } } - else if(typeof audioinfo=='number'){ - if(fixednum) audioinfo=Math.min(audioinfo, fixednum); - game.playAudio('skill',audioname+Math.ceil(audioinfo*Math.random())); + else if(typeof audioInfo=='number'){ + if(fixedNum) audioInfo=Math.min(audioInfo, fixedNum); + game.playAudio('skill',`${audioName}${Math.floor(audioInfo*Math.random())+1}`); } - else if(audioinfo) game.playAudio('skill',audioname); - else if(info.audio!==false) game.playSkillAudio(audioname); + else if(audioInfo) game.playAudio('skill',audioName); + else if(info.audio!==false) game.playSkillAudio(audioName); }, playSkillAudio:function(name,index){ if(_status.video&&arguments[1]!='video') return; @@ -41037,7 +41054,7 @@ if(lib.card[cardName].fullskin){ if(img){ if(img.indexOf('ext:')==0){ - bg.setBackgroundImage(img.replace(/ext:/,'extension/')); + bg.setBackgroundImage(img.replace(/^ext:/,'extension/')); } else{ bg.setBackgroundDB(img); @@ -41060,7 +41077,7 @@ else if(lib.card[cardName].fullimage){ if(img){ if(img.indexOf('ext:')==0){ - bg.setBackgroundImage(img.replace(/ext:/,'extension/')); + bg.setBackgroundImage(img.replace(/^ext:/,'extension/')); bg.style.backgroundSize='cover'; } else{ @@ -41092,7 +41109,7 @@ else if(typeof lib.card[cardName].image=='string'&&!lib.card[cardName].fullskin){ if(img){ if(img.indexOf('ext:')==0){ - bg.setBackgroundImage(img.replace(/ext:/,'extension/')); + bg.setBackgroundImage(img.replace(/^ext:/,'extension/')); bg.style.backgroundSize='cover'; } else{ @@ -54034,7 +54051,7 @@ const image=information.image; if(!image) resolve(`${lib.assetURL}image/card/${imageName}.png`); else if(image.indexOf('db:')==0) game.getDB('file',image.slice(3)).then(resolve,reject); - else if(image.indexOf('ext:')==0) resolve(`${lib.assetURL}${image.replace(/ext:/,'extension/')}`); + else if(image.indexOf('ext:')==0) resolve(`${lib.assetURL}${image.replace(/^ext:/,'extension/')}`); else resolve(`${lib.assetURL}${image}`); }).then(source=>new Promise((resolve,reject)=>{ const image=new Image(); @@ -54049,7 +54066,7 @@ const image=information.image; if(!image) resolve(`${lib.assetURL}image/card/${imageName}.png`); else if(image.indexOf('db:')==0) game.getDB('file',image.slice(3)).then(resolve,reject); - else if(image.indexOf('ext:')==0) resolve(`${lib.assetURL}${image.replace(/ext:/,'extension/')}`); + else if(image.indexOf('ext:')==0) resolve(`${lib.assetURL}${image.replace(/^ext:/,'extension/')}`); else resolve(`${lib.assetURL}${image}`); }).then(source=>new Promise((resolve,reject)=>{ const image=new Image(); @@ -54069,7 +54086,7 @@ const image=information.image; if(!image) resolve(`${lib.assetURL}image/card/${imageName}.png`); else if(image.indexOf('db:')==0) game.getDB('file',image.slice(3)).then(resolve,reject); - else if(image.indexOf('ext:')==0) resolve(`${lib.assetURL}${image.replace(/ext:/,'extension/')}`); + else if(image.indexOf('ext:')==0) resolve(`${lib.assetURL}${image.replace(/^ext:/,'extension/')}`); else resolve(`${lib.assetURL}${image}`); }).then(source=>new Promise((resolve,reject)=>{ const image=new Image(); @@ -55412,7 +55429,10 @@ }); const testingNaturesList=naturesList.slice(0,naturesList.length-1); if(every) return testingNaturesList.every((natures,index)=>naturesList.slice(index+1).every(testingNatures=>testingNatures.length==natures.length&&testingNatures.every(nature=>natures.includes(nature)))); - return testingNaturesList.every((natures,index)=>naturesList.slice(index+1).some(testingNatures=>testingNatures.some(nature=>natures.includes(nature)))); + return testingNaturesList.every((natures,index)=>{ + const comparingNaturesList=naturesList.slice(index+1); + return natures.some(nature=>comparingNaturesList.every(testingNatures=>testingNatures.includes(nature))); + }); }, /** * 判断传入的参数的属性是否不同(参数可以为卡牌、卡牌信息、属性等) @@ -55440,7 +55460,10 @@ }); const testingNaturesList=naturesList.slice(0,naturesList.length-1); if(every) return testingNaturesList.every((natures,index)=>naturesList.slice(index+1).every(testingNatures=>testingNatures.every(nature=>!natures.includes(nature)))); - return testingNaturesList.every((natures,index)=>naturesList.slice(index+1).some(testingNatures=>testingNatures.length!=natures.length||testingNatures.some(nature=>!natures.includes(nature)))); + return testingNaturesList.every((natures,index)=>{ + const comparingNaturesList=naturesList.slice(index+1); + return natures.some(nature=>comparingNaturesList.every(testingNatures=>testingNatures.some(testingNature=>testingNature!=nature))); + }); }, //判断一张牌是否为明置手牌 shownCard:function(card){ diff --git a/image/card/group_ye.png b/image/card/group_ye.png new file mode 100644 index 0000000000000000000000000000000000000000..6d5a70997b065206a87af2c235ac3236a71b233d GIT binary patch literal 4193 zcmV-n5T5UeP)w+U+IfO#salmrkw!s4 z1cy|XEO)hc7wxc@BU zQT4-XxaWV_D08#sMzf5KVqv3L^R%NOt28y>Ev@={E48|TtF*?!>$IjJSp5INpK1+P zeZsFLXeS2XeVUeh8GmS>Z`FW!{!)B-qNYNynG{V8OxDf}O4ih%z-E)R=Amg?%hf4b z+sHIcg;_LDlw*L3NgtqMQwMlrwrCv@$y(be+_y}t4NYXj;goM9I!GH%m#lv9BD}mw zQ^PiD?boDgo=9xY8sd!$UTIf($8HJrO-dW=zrk{~|DUWw{Znlt^xG`M{I{kK@=vz% zYy93A7>fwOm`fd*KKO!oP8meN^ma#BT8MXS$`If6wqgET93%7}*oN!>jO84m-)r9s+ai3ASR=$QY!Tv@{J+Pur~2pZxI-?; zyh(q~5v}I9BE+w4VItl#TE8d#YX8khyG>fluy?fbD>|ccvGJfTL&y<&C#7jUjx-Q z?WH}(mWuZrkz$6EBZD+Un!;INIdze+(g)!M8_m~tT>-{P(b`9+4fIX0j`UCE6!|H< z%o~1g_x&=lHiPzw4&_y(sPzz4Y`a~qc1Fv;x?<#;hZl)tr4+Fd60h^60vA7}Q>*3s zmTUBTQwIBQaxei{HFcHAV&B*hla+u6Q0E#BH^7`8+Ik&QiBsa|oI1a8kC88xucr** zA-@W`uu)$to5Qppi3mo)656709=_q5*~r?$H% z(SA-X*)uZ7-j*fKSW4x{taruAk2%$nTw~-1HFjCxsiNw`ugjJ8DDfL78v<$u{+QB7 ze4?rEnNdj&)Ro>El+YJ>37~D#T1UV$mcjlTtsDhMn3~~;kaJv7>J?YCeD~zXlvnGP z<=AN9JSuUIQ3o<6QiD7n`w42#zL~OIakLr6WKNW;Yn)Wvew-?^Z`0p#MynTG z;p!>Sv5V6-HPm-490*6kq4P9rh#46p&H7vr699FRR(U0;H6_G5#;6NStF}n-gfmJ# z&%pgNd-FraM3HD$dV3kQ8ixFiPPxX=5jLdkT!tVp2WHEI92LjbTglQ?KvgYYP|eoK za-}myzRjQeUyevQ&jRY^T4NigZZQZ&>j+1&P424ry-G7f-1P^@ESic+VQNJxIikdq zTW^(%%aVjUdkX#i@M79a(!fF2hV^D8cHBjk?uk@+E<@T%R7b`H%HQ=9%Ht@sHtnPO z>{}>}(`=oC9mB@_g=zX_XN3GMr|!d`bT~0R)HgAi31(AgWK0&j0QjLk5e)zvp|y|H z@3wQXaxtJ=OX!r5>r3f~r$TiceS@kGE~M%Jg#zIF9-}jRd374ug%3_E->&Jq zC+VcWi42-$c5A7zQ-iOL@9nH7($AlHqg>0Zwsglm`ky$}X6HZQpW`_#b{$_PW*|e@ zkfFS;h(8Pbb6*G>tcEJJU!(t!EA10($YPF0Rq*DT3(3FxKB^C<*?^JMJ*()zEGo~q zmJWGqlwW<-#cwfrP#WJ3yk4a(o?d1^gO-l}xj z7BJddOa6`u@&;9V1Am?hDzb#@_u2=k$=uvsA{L+Re-Dj3aC2waQkuf=d03-H3pgrln|8KpHh4q~`5+^8KvI*pS!Y zL`#_X8St@L^F*g}%AbwK`9)-(S)GOeSnvebkjJ=!C%DJUwT*kJE|5Bsl@X^v`}QAF z3j@C^?R<4gjIMg=HAp0++e1b8e|)wqM>(Ok?LVrqI% z>RO- z6D#D2fRSIkLN@MO5>UVFqx3t0SEvk#*IqVRsOrW2(Qj;K37y6Y6zwPjem-=SBUXH# zJ6-PO2(}}m5x~v0LG+9W zM@cYS?Q_Mc4Q$Bryhr8AqJ?55Iz=|%MHZYdvk|X3Vnm`VMy-K}WWyT+@2^g$Lay+y z1E1C~{l_rG#0M1cg_W-%-4Q-mkBDHh!A0@j;skw(=QQ^i>{ZrN-lqN3czhXE<~&3d z1<%Nao)ldA9+flQx?HhpJ#RP>X<|rz$c{)k%N`}4=BT{DM!v!815$_j*(BJhp|S9N4ac8quO9_*OHANqM+w)iM#x_>?f2uJ@yY0U+6np@VY ziqEK~?HE_%plB4opsLsiG*}rs?-A*3$ElX}*ym;>#7sxDc*GUKhD6Fg0C&9M|E}Lb z)!kIX0ePBxlQ)=XoXX5(LqB6NnjbGzHbzy(c%H*EKf*Y<_&z{ zilHqicIE4+KFE_gx3i^Llc?~-2XtI-RX+b2YB}^r26&{J&Euh8VLZeRnd=6<#>f?U zGboGoRJW*BrBgAd)}JsU;z7iZPzo@$G4)k12MxFxvm`JVDyakG%ppF*80Pf{T>yTx zT*7Nz<|NAYRG%$y^*f{|e)88>uS z3q*M{MJjN`j(Zd(0BMdI68|;kTSin&1zdhbk}<#K0UV|#T$C^g#DI;zZzz-jauU(l|%s1RMF01MC(q{tbf;6vKB| zD4LV{uRYUM{eTyFq8=VK@Un-vy@QmX~{>dol1>&(htT1FJs&&_GV>oU*@V%y(OdTSC0! z5EXl*dYnDFi1WYwoJMeiRPe0W!)oADW~k+S?^4FZQcO+Qm<^dXP)1WBHTSGP&|7;S zCp$-D35ua(IPjrjG1>1e(9dfS^cTQ}uF;sw0xOa7_s5qDd(YHhfcv>^-G_?pij!+H z;?##2RG^A8n{CYbIqhOS)k^1>O*9>#I%ll-n5+6rwlH73gTD*x2}j0Xg!!*AX#@c< zn+=EVfo$NYJeDzDzTB9viUCj<#C>?f?rE&AIR9B=eZmyHiXT@yxiGSxN-26?76@;5 zh6=t;eJYDN8t=N95Ny}z|GFi#byAvoq_-Fs4Y9E ziNxF)a&_h;V|w^EOhnu<>Lb$#`58}LY)4+FLp-eZeI=&+By;1%Mt79@qdnX=6Xzz7 z?#P61npQocqAmk-0C*UiLWg1Y#A)^j#y3o_3ow^5_&-+iuuU%Ko_=FXkP=$xt}Y3CDU`Wzk%BPXHZdp@zC_ zD&?uX0|RWv*lT=@@T@V63p(KGRd0SV4t>ya!ecPTI6q`ILuBkcx&dyOedaJ$UgWy* zD%0;lL`J54>QA`tYgmHHIe#tM>7<1U&Jk+Q$yb+vh*hlMk zcOGy;BtC`ygDds3Sndcl7e@!ixgr~29FDSLz_1+JZY3XW&+Gl5`r;i=1B^XSc5Qqx zis&F!Fg&o164RW5Tv_%=#XoQpo4;fdWC#;!$d<~2f^uT$eW&)nx3Mr zh?1@-(m;BmApKB!{ZIz|Fb0D#22U85=SQS*dwt|C*fA>DHG21G#`D!`^EGMAu(50kk#{B+&13>Z`R{g2sjJ;SW3h@I(<0y zCtSdL2FSb)G0z_n=F$A9 z`@|A@zTPsMm+5&QfMqLr-%Um$9ohih_1ysb^Y{`Oy3_>joH^Lqz|PwEVIRtd-&9fI z#~HID0w>NA973b^i$W$z%OR`d(>i#ocanx#`|lHONVh^veynXUJSDpc+?Fh*I2%9w zasb^@e9{;qo2(nsl-^|3G%xUVTzmZNV4lHGNlIed3ev1AnUd1fbgcP60}BZX ziJo-3xIQ6$_zymhK^zlV7M^*x9 za)lx8F9^?~6H+FxSb*1qwm}nK&EJo6U#?=3ltjB~+}NDTP!r`gPY#b6+C&Qsanf3H zT_0v{(yxQX(&Fp32gK%C&Q33m!F0e8Hc3O&CGy?2vXTiez0wAkk9Bz zs$12;MT;~I9(?n4sF?ZW?!jwXSj_x3MI(&L+Mg%`|B zn>ll& ztt9$j&r53Xxa8qLjMr0)`4!rH_-_uwuUU}Mfm;iCRb;&VK%yGBRL2OoLIBnrZF1-n zu}u#c^MG`WDgmpU`xP-37NBZ|Z3ml*_f3vx^#(rKyV}@9J`&k}-CC*M#>CgfY7FKR zIa)YXR0y1zy@2k+47J;^wLP!AC`>Jd2~k~=h)=O$-0eyqpzpM-tXyc{zISx}TRQ+> zv9Hb>{pxHT^$VQ2%?B5nZ(jxi>G*vTokM{1`u#HKQ)O=9d$Upq!b&-)xmujWm0&E)YgH&P@mB*)5}tXe zeI&0N&;FNR?P53o^=JO-wQp!mCxzGwW*Lkx+~mf6>;}n}HXjIR!}@n41{#%o;BhlKeFi2Mx%cYuY|z1>YueiAmv`X+RRitfe#$JiRsy*Af)5E``NS z;OMUBb__-E!FY?s(;sX~@&mtpc$%7e=9gU%6c#)@JYz*});ZihJUv$@RKy#kED#)? zxO1lE0KDVnGwz@M{vk_4XL=D@;(wG?w3dIMte ze8+97cLRz;8&~^c&Fu-k)^ld!mV#TYy2&vRY{AK%dFc2T<@#Nw_|u#20%&k>@`bzh zWZKg3o$Ad%R^NCOzw^cmAd#`=Dlw&U?tDKTHt}|B7wpiEIXl1(Z*#IWu+WpK%ZDR1 z4t{L_VRHK{@}3-V9$1Y$5?p>@d1d;*^$L;A?Q$HtS=4!V0sGnA*SG3&f*snsO0<0Y z`~J6q4b<{!ZRd6&*2ehp$+OVDhCQ~KJNJTwhaR0(Y&_Cv_SFa2$ENd6M)=bBN;W_n z*<5a*F1>pdYAopT(?r4M*eH>SKRG-rx@nzy)_12Ns?|StAdtb;FIQZ3jGNm&Iqug? zD`Zm-E+y7`cF+gzJQq(z)gPS|U#`F3n(F>tPBcH>&H)c!?a!KHa7p;P z_?GBI@JP5qY(98VFXK$e63sLH&BS;99Gw3{nt@MPcfP|5$J?lj4E_a~r8b;S^>B_E zp$B6FldEzek(Lcbp!#EWWe3zd$cjOQBGxr|!1IR?xTD}08b%Z`kCiNkCoIf||6UC^ zT9WF<=go%N&7Q9RRrqT{zC#0f#o9qmlEq>w*u=|lcRtcDsfMel&_j^%XT7k!kiNcr zWrh1_>GS~3kuweDk@p1M9=s+2dS$gI)A`t%Q4rn5b+B#mFNOUNJEX@IASQK!(RP-( zNnJ`(OcjmvNewY7A{VYy^d?vLk(p zGEy;XzZ+zZbs?xU2`BUrLQ}Rv#m?+*3t;@tu4;Rk`&D2V(VFU(F>O3&S{J6S;|r2vfR@WoRVL0gSxg6O;9bHd#^Zmoy zPCxx5H`ol4J8KTi3s&UNUQS2-@nA=kokr?(Zz=mP%bDt=0b}vD*Q0<>CfMboX;by3 z)V~509OMM@vXH$#mFlM7ONbAzREz=k`JwTTm8G*V5cTb~$XobEwSL0WN3LQ764kb> z=Cf~4^KY&c^TY%cNQ`uZ76Fb&f ztu&VIEkCrHfkt*EfCiIqI}|`i6lJb2Z&bz%QMPXm1X4f3-na$m2BUIon#=Zx4B%9Uy`x9t;wJY!l=GeVByOmDCO|p=~0m&K~v{` z#%?1v$26!e&Y6p*!-Zh~2*adH@UCb&`}HE8C9%R;$76CSh?3!+LQuL@`i$%;g9sf% zGL7rCXhlnF8ehgeF~@&0qYA;d;{yde^miT(69t_|TptMT+L8h|Rq7WbP;zmWIUak? z9wb`dQz;0i=Fg*`R+X`ChAPE856CX!OeL~x*p)9Y8e>3~Bo(9C900P@Qry5g=tmqx zt;YJZHt8&af-m)XYT;KPpE3>xZ-HXsVBN`Ya0jhSBi0m&(0t9R1# zTDTwo@EXn-hek~qbr%5RH1-bynIKK`P3 zS2 zQXLtbjO6FZUcoMj8{Am8DlnG%xE8gEnM7yGsPN(*CbCz)oocrvhrBe^?SNbow?u2V z`LQu?a>iq@BB`|feORD{9~-Yd3fnO_HnoiGkBn3iV1r$LOHb+Ax8Kk#M7uOS(nsF4R?p7nwCi*=J^yz&SMQ&k%r)=$btdWE*w zPXJMuTTEVHGigk~Ji-(gk9Rq8ewIcCRz)bzjJNY(02R2EzTHN?t@2SB6;16fw_J^$ z16qaU$l1&WMOT6`*b00vY1v}r2HNYoBr0J{nq}XoNiT1z8I^}>Dl|pT$g4?vBFIyV zA|M$IG5%KlrEaIt9##y_ZCo2H(dML3zxElXm@?Bh&;Bn>4x;W-+4y3U(Xt!T!!>@5 zv^))KQp)bQN#oaDT%)4y#KhM|;?xWj?NnQSbaFYIqJ<&S_sO|=j&07RVt{i|xCbt3 zara^SKZsT5s90)KcLJb)-4{eB?Fet{0v8|7Rt-&f@*2JV+Zq+3JbK_G%61?7enuXU zj4Jzci4QOfdQKIF)pjHzD!6N*(pt!TLnG4(?MNp1>}m#x^5nUEt1g=qr~(^xFKj^n z8C;l*^!5o!M}uW?(GwlAdS2ijKCZpYB5*22cj*@(c`S!|IXPcn(a{_F^-LeV`sr!J zX8SSoi(#4I6rgvxYIEtrq0xu7yN-Wk6z}ce^u7Ipx+2ZC)=4i=xH*VnA(&ahIkYao zQq~bAn?!o#l^6-p1ObtO>2t=jSM9#>wwLLC3qZEQ$t2IsLD+}q;DXl-GkM{!9*3jv ziv9)9^lKDS;*W=Dmi4^e^!^O4WdQ!7+(;MU=MgV2LdpdSali^QL>b=R7}4=fwM|(o zCrCBuT3L}~Ni@s8c`&I|?QxPjceuUuMiMg9v7?q@T`5*Q)-IPSVXBHe`0XQf;{!Sy z(kV_jEY;TKmR3e8v^=M*8b8t5j|{zS@6O@$x1II73k4E2iU@0uA4dnVV{MK6nd3$= z(TebZvrMj4edU*TR2p$(-uN=CBxFkD=|@nZL8onSm`NrQ7oHO}))#L5GFXYZugVbo0HDAom~t{<6HukBP?Ud5uKC9p)YX6n zs=zf7uc4{v&8$oJC`t*EiaS2%8+cC~!89GlQ20zy#8^}_5uMVpoC*gpkIO5R{HpnO z4Ay>geDqw_xwhJ;DkI{py_LW{3zF`tf$G_37&WcQ@}}hI`UlQSJ->=m%S}Z*bA!Tz z@}Jg7V&Ec2b8GtbBR+t=sr$v&Trzvi^N~vM#=hPmtO;7HM@N@vCMT3(j{Gc=ZvBfc z=h#A9cX?fNNk`C4a*p82>`Y~rwo_x^$}=&Oe+(7(tbd;GquI$;kGPIGMm!&y;2e#2 z1nD5Uj~A754e*f`k*rX04eYQX6)ZqNQ=P+*ykvt2AFl66&7c_Cl8OF_rQIq=lGVDyaLn zMTJ&fvDj=F;ohar_QG$1=Tz8`d?v_9l`j=}gt*!ZpQx;tDnS^xL%DwG={P+k?AY(g zXO_{gcR=GC_>X%~FeBmnuc54j3CSauUIuTSnf5zhH`Y%=ykB$*PC-D~lvwPrR?>w@ z*@2pupQj_HJ{Xr4mQ19PC-J5D)Kw){{C?~=G=QN})O}l?SC}12wReEZ43yv{ZE4L< zXfvOPaHNmRK3Zc;jx{S}daODfq#O39vj{n!a66@%ML!j=& z_dWcAU<%>0vp_s-UP^wf83WC}Nc=wYM0h_TI5-)gHC?h@!Q(YQ+|mD79+u z_tEeByRQ36oj*092mz&}E2N|sz@!)OMDN2B{SQyvzHqs90`=Uz^LgfmK_=QD>#huur4VEp zWah5a7LoA98K6>@W>VHJqt>pXe%)2{eBzlU1_q^(vYfOoY;N6T-eRHrVUa`9?}bcw zsN4DNtr(s?F*Uy2srQrF+21pG6Gm7v10P~}B>m5p8Tzh{IuGhQ_d8b{&vKK#TD82m z+<_qj&JH-h6Dg4akfgRK?W$Z!KSN1>2?BzEfZbN)a%t~L`(mU~M&+*FI79oB?QDkj z)l89l5*@!nAVfiClIdo4AW3CZ$*a@;YQ4Pl{b)ve`KeK}&$e2~+!Z8p-;T@UIyR$p z!c27flhQ!F?V~DWl3MtSV+-;}F=k$LsqEF-ZHQ4?p51kpT%T$^%d3UU^_&qR#A4#v8&aoy~ zFi5A3ei|GrQXf5KQtMaW9u zx#?-n#kR729r5%0t7Ne86$Fkg^Mr9oxxr6iBPjn!6;M@2++D3771SD(023dh-9LCzy75?J1V4jz0ViYhS2FUjE*cyv&_nG+Q2XUzxh<-SIDpN3R{Y z=kW)u*PjnxuKTo`#FeZ?zER%w7rvC~K%M&^Q!ZRvw~3sOe=*37mm5Fbmp$LS@aZ&l zd}Y=;?k!<=zs65`Hp_& z02U{2hG;7}bTYd~>Cw@T=+qF@kQ#V@u`_&vpEk_$>yU;#Y5phmMdnsiBQB#{HtR1k zfxnVo<NzOlvgEE-ed7r8T0$Y+VlM@AH1zg*hO6R7UBl8xe7+i^D56 zFmn?hsIT!M+*Ojk;E#txA3EVcX3Kcm(dVRbxy+hg*6S!kEMcnrA{4LlK1&CNN2aP$ z!7~}(PMk{SJ`RsqDJl;*lswneRRWCLoq1_=B%HpQo_SQ1UnRK3ik;;X>(q*#5FBg9 zHqaEr5XFgoe|SisXt^19{u#<&_9Hq1xjiKG_-!sts|bCy?&eOzNxu0acP42^Xztpa zi{JMY{^+_|>d=rG4dpbq5M?kTRD)ZXi98sk#@MC0P};p*z%CXx?H%98-2~$eg_EeX zC224ZzPwO#Bc3(-cWb&qAekWi#t@=;g&DH>juXFf6GEHi&6_gP=bumyNe_v z%l$&rrmK%YBVbbZxQ!Ec=H)1bKT=eaF3dQx(sFt);BXj$!XKKzkg)B*K3;K;JWzNJ z*#&J1IU9IX>3DcagZpUh_z8T;3@>h7*dNsGOX!m$$c>urD@n_Wi}$tjHNis;}n@?oo+TkPc?cwVwUbwy10_kXik zzp)@f9K6y9Ptyx8^`6)kmJ09|uGloq3G&yy(2=6z0`q*?L+ zU46T!fq?m5)83pX-yj^Dmu?VWIzow$(8pXu9bY4$9RHaBi|wjULko8?vi9bZNwO>VeW&+5z5IJ#G-RMiK19>K_eE~=iUd=baPpOs0W zr5ZX*dv0pU<)rm(f905~?yLzcw|k@T$w`?d(#MHd{pGru;Io?zU2<9u;(%s|lbt+t z)(IN9U5S)b15|XL4yfpl_SI9tnww4&^A5|}!Pl2-sXOD${U4+1!sIN51KA>sEC$P! zkBzDW1qKt}`es1GsQ%|f?H5v&(@8EoEho_t^)-n||WW z^8YR7)^MvRT1dfkx>!h>AB0d0zf~1oemP^u=>Tk;J>wCElRn?u)4ZlFHcz`NF#%5< z`gn;@qRJTTtPaz*Wzu<ig4Cx*V9zWdh9}0S@(e zeO0c2lj-pC+*|rXV9>`w97oyGJ)#%PC70lYS238}#)4E}^2`>YkuYF`M3K#xCOhEPsyXc+t^gdSz z8K^w)y)5&}f9Rj-(^-v=#Ty9=A2(Fou%4Nw)+blh{WkD943J6(3t2&W9xDA~$>Dyk zC2gZNqeOep`6+VIO{up0YLed<7h4oGl(zBEk5i5CFiQN(qaCszB zX@uP7KCfboP$5(2S3s$Wk)->@QIg0NnoUs(-dBjn3^KezQL9=5b@j2ljN0K(lEUro zT9Z43C{VEC+QJA{LMr;s)QPJH9s2H9R%rF5qi6V9qx=iAF?P~R)mYg$fkk5=F@b`AAc)2DtWE36Kx{Zm z-r8XvWq>-^>0|nvDWlT;_k3V?)PvKSOj4Y^znoi`i(uPNzx&p;>^VEwv|mqF_T+8% z34LJ!AOoY^Gc0=~-?=u8ASCCMvP$x)4cO)MUdtEo{nYx@+nORLW|5g%nSTcg6FC+t z_W1^sXxLz)-o1$?{b0{6BEOo_RNOVngsjGSRH8I3D*^DZu-tCx-@C7J($=G;#6Qg| zwAh-d2j{QlgYw^e1DOCsHO$cbAXxsmK=r8EL#*wGk+B9?f}~a)Ir(gugD}X4=jj(# za-;p?9mwP_LXQSoV@mU%QuR9pah7h~@4DHBIB4@;%nwZrjX;P#2sVDHEP_=TK8sRh zi&Z4!d?Xbe0)38qH}S zC5na~^Yd-5#j@B?{)bqQpc>Yj=qHJBiB&6A!S6bhCaJe!ksJ) z&T7g~Xrs>x%TZtZ(5T}O&ld8@h5@ih8o(l}Wr^uA7c7#9J^Pg`Mb?e5>kEyT(#t$1 znbgU=HhF=)y#ZpPpvgMzZWGtHml0lE)M*vMAqba`J5(|TI&?N1#H6kfD$M`1{eX|Y zl5nLb^8N8Z-t$?O(65dVwzO`nEM?=r4l}~XaTze9cZl~uNc<;^DW7Rg$jpS?_n7TZ zw_+n)e&))wd`{j8LpZ9-$@n0cPTA{F1C>d^Gb**Jk2l_lI2cv^S>0RF;EjP6jp1&T+tR8OSYB4=Sw_U>E`Y zvYIU9^8n`~`B|SmgP^Cm*oOyx&q>ZU*hO*2oOBno3fT+WuQm27gI6 z*;(m1&0JV!EbG^w-ML?5NBlT`5Pho)RJduojA;zq%j5yl>QlE3ib4<`UVbAJ8Oa6w z1!I)f##O`pLJjv*hlWz0q5LjD{|We9u===`rWzw0IDZTlM|N$Xeql}bU&q))@$_a{ zCamGui_10=%zxc4tc%uvK>cBHgZXGB2XQp}53Fswo!sGX6PlSztEKHE(;@5kaDwfU zy#UH6-&uH%BEc>XGy3v=8`j$?#bn~PZ<5l}oL9+B{wFNfZ)I>yjav8%vv+WcdYQRI zQ=~nK3xZ3BX73V20=_tGs;4o2c=0eqdpLrKpv?`ZkWgrnAU=5cSxRp9k2qKSgTkC& zR}lBEQ;jOmsGLx;az920@(kMGi=sbCT16YcKgZ!d1zeB>@$R@r(Z$*LlYz9Yh?Qld z9Jgtx`+KGtlSL(8hg0{14Vh%8-X1)d4)~3#0|lwdyVoGEGl?i!zu9kjANM}hRLtW} zORin3ewNt>r9Z-QGKvEU$%`mbvk(w=+uA^?!8HT5)25IJb)v&do;+Nq3;zy_pqfe^ zg|>$s^>mB*d~%lN{^%RY!&IkHYzhgL;pIBx8Xmh^eMvscMlWN$A1^OAwXsqZ@uQClLI6FR3P;FjSQW(K0>sD6hfTzkC6h!x}YilAm* z?>#ss_N&~pt|u#dTX)Tg#P7g@)#o-jl+I>#75_LHw`D|>Ea7j7M`@5|Jlq{U|HX#{ zcIF8J$n^W})ak=C^Y3L_{tX~Sz6Aw1h%!0At@?E%6#bojTIH{B6T)d`rPIWfv{--xv_!=sMwL3N>z2uBrvGsw~=AYF^=K+3W-=LLoHgUvMwO z@mXN?{PQl2o!D2?gGJhH%@x)t8csrVyTSu( zjQCyv;Y=ZpjIH~#NgNN58 zmDPtr==~a%JB+#Q)0WubHcjX`0`zsH#{j4GcD+Do)miasxpi5t0Dz;lB@olRdlDEy z4zrTg6xX8_m&qhhPJ6ScW=iEM1lJ?WoE}-ajdtLT_;>(%*Eo4_S7o)ZG#vzy-1K<# z8={J=7e7mPc*n`p!)^aRNy5IxX;sBxmV~_!Z=9VLS?>`#8Py(5kfSnw_HyDAAL)v1 z;=#X!h=(9;Q{RA=akGm^| zm28|C@;9h@TVK!t4&nzX?WUDrolC@==Y6C9(Z3iCZM9{yS6h)eS{Sq}-*1|kR#qxV zs^`taadKVToMX;_isZbUyl6rR^wvPV2<=|KjBvBv|t#k(~Fu^H2%HlDz}CW zFAD%UQXZKp*@;JPvo7B~OJJb^ux5l&zf%pE~ArQo2CHb3;qBi18^2DX4Rl`}>ANp6_pr5TpnLYo$ zXpa1sP?%A(LMk19nkDf0Oe%GbNp?|>PdZ44bfWiX2P|f$sbet5aOO$}{-`w52&VW5HDE zhmLUeVJ{VnFRVB5l^)ri5+1<5DIioxh_}wMtojM16K>jD>jfPu`>T1esj8zv`}#z$%JdIxo|ah25az^>{Jr16`BM}uB+IJteN|^vj_Z{!#{wB}i;JNwuP#?5V;=N>bq?&+