Files
Sprinter-SDCC/applications/PoP/poc/res/sound/s7.bin
T
snark13 8ea4c32e51 Звуковые эффекты PoP: оцифровка оригинала через CBL
Набор digisnd1..3.dat приведён упаковщиком к 10 937,5 Гц (частота
железа), склеен в 8 EMM-страниц с выравниванием каждого звука на 128 —
размер блока запроса CBL, поэтому ни один блок не пересекает границу
страницы и проигрыватель не знает слова «стык».

Насос (pop_sfx.c) резидентный: его зовут из прерывания CBL, из горячих
мест физики и из play_seq.  Тишину льём свою (первый блок набора), а не
через CBL_UNDERRUN_SILENCE с его malloc — куча в резиденте W2 тесная.
Открытие CBL разведено с загрузкой (pop_sfx_start отдельно от
pop_sfx_init): пока ESTEX читает файлы, насос не успевает долить блок и
железо крутит хвост буфера — на слух скрежет.

Разведены все места play_sound() SDLPoP, у которых есть оцифровка
(id 0..23, 44..49): посадки, падение, удары о стену, зацеп, тряска и
провал плит, ворота, дверь уровня, пики, чомпер, кнопки, боёвка, меч,
зеркало, скелет, зелье.  Таблица соответствий — docs/sound_plan.md §8.
Музыкальные id остаются с нулевой длиной до фазы музыки.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 15:16:43 +03:00

1 line
16 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
i鯨kj成窯n坿蒜[u嫌x忽p^l€|℡pfcs苑vfq循skz㎜p}徐lTR挑Ot撃o|q|xtwkс}tp{㌍kn~y}mfsブt}昼垂|wr」{т|{svnr€度o℡月x|麹Oqワ決~€wuo割yw|€㈲倹紙с渚≠⊥桁|q€穀項x~氏э塔~t~訣演т活拒争~£党y∮準z♀|沃t嚆z私s″~rrパsヨ{kd}}cポvwp鰹r`o褐mi恕’l♂ペzx}zno|褐rs~巡t≦xuоvsчpf殻s|倹|~ywu}v}z~€|rw梶uuмy給~voj€{xz{|€{wyyvv|€}|~|~zz}wu|叶€~}a㊥c>桁р|ロъ着fv~㈹~ロ㊥~~}訣|w{潔Xx怨~xрн}z~{ue+謁f|uョ潤越ヂ_cz湯v^y拠xt駁携e歯rbix号w}月{k~ytzl`p鯨hi♂жrs~ホ|€{w€€♂究сヤс麹∞劫z{武「¢mz笈vw|ミx∴yr_x砿lw|~spzuzxxuxz~xv|w{}|€xuvyy|{÷w|€{鰍|d括{z}hk奄g恰ц掩モメ≠}|фxz沿{{y}~€€}€}{}~|{{}|vyzz€}x|{ux€vsx№n{€zsw€Wx{y~m笈kf鷲ブヴhglv函㍑g汚扶o撓i^応w`yik㈲pzяK警n昼ヒ笠度ムzp㊤|≦~}}{z~|x~』z€{xv|~|~zリzoyz||}}ュ{ャ}㊤€園∴~~фムсf€п{>~|€xс|z~y{ヤxw|}z~~z||}}~|~}~|{}|||~~}||{~}{||}~{||マxy}ポxz~}~||{~}~€}}{x|~}€}}||÷}~~}~~€€}}z~€ャャ€~≦р÷a=€хZ㍻}c∞モ~€項樫×|ヤヤ€ャa€≦b=dム~≠a~~≠ム=a÷€≠€€€a≠ャ€<€€€~€€~€€€÷~÷~÷€a~ム~}~~~€÷€€÷€~~}≠÷~~€€€€~÷~€€€€€€€€~~ム}~׀€€<€€=€€€€€a€€€€~€<€≠×≠€a÷~=€€€€€€a×~€==€~=€~~у}c€÷=€~~€€÷~=€÷~≠~<€€€€=÷~€÷≦м~€~}€€db==>€bо=€÷€€~€~~~~zz|}±|€=€€~|}}~~÷€~€€€~~~~~}}~~€€~€+|}z€€÷|}~€÷~~}|}~~}}€€~}}~~€€€€€=÷€€€€≠=€€€=€==<=÷€€€€€€=€~€€€~b~~~~~€€~~€€€~~~~~~~€€€€€€€€÷€€€€€€~~€÷~~€€~€€~~€€~}€€==÷€=€€=÷€€€€€€€€€€}}€€~}}€~~}~€}~~~~~€~~}€~~€€€€€€€€€€€€€€~≠~€€€€€€€€€€€€€€€€€€=€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€€€€€€€€€€€€€€€€€€÷€€~~~~€€€€€€€€€€€€€=€€€€€€€€€€€€€€€=~~~€==€€€€€€€€€€€€€€€=€€€€€€€=€~~~~~€=a=€~~~~~€€€€€€|}}}~~~€€€€€€€€€€€€€€€€€÷€€€€€€€€€€€€€€€}~€~~~€ba÷~~~~~~€€€€€€€=€€€€€€€€€€€€€÷€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~|{{{{{|}€}|~€€€=€~||<тモa}{|~==€€~|{{}~~}||zvsrsuxz}€€€€÷<㊧炎援xwxz|zyyz|||{zxyzzyxvtssrqpnmlmooosx}€e㊦焔轟穴焔嵩迄蘭蘭吏悃撓俣脂yvvtqmd[VW[_dgkljgffeimopsyz{{{}>с崇湯錘告註潔㊤a~xuvwvwupnqtrrrpmjjlooqrsstvz~ヨ訣結牛詩喝÷€ュモa€~}}~€~zurruy{yursx}~}~€ュ級㊤€~||~g渇|~€|z€草結oux}}}}vtnkghinw}ユ|}~zsvrsy}~|~÷€}}{}ラ㊦|リ隙【x|}モ~yxtsonppssptxz~ф€~}|}ヮ伯ボ{挙椶嚮】uqrwzz|ャ~y|чWpptz|}~~}~}ラ宴yldflpv}楓伯ホz}€~ユ㊧с€~{snikptxyyz~€€{xwkig`adl}事欠€ywg諸桝潔国拍≦炎焔葛笈o`W[hqrty~}zxyn_Zblsz€瀦抹繭撥槙vqsy|wssv′瑞諮湯cL=>JYq°灯糸ykdfkotzytx€倦屐早sianx}享ッエョ詠aWY`o|сュtrnv|iZ[p於寰怨€vk\[w懸ヲケー桃i\[cnt{活苑悒・攪疫qoeclkp}ш髄wljw€€q[Waz峇キォ頼〟{ePSg♂》imx|€d掩}ne_]\[j|酷柾メ€救toqu|㍼抽訣合фxjlqy東延焔WbKFMn夢エ忿jgrポuwr|持・・沛pm}ヤ岔ィ盆xtxyurvw{€ヤ宴tikgdemmu}∞|vrmpiehdl~趨嵐ペqot}ポtqnpyx{zywtpopx汚囃煙圓」寶Zqnljmrx~ョ〝xvrjhmmrwtxь盗znkt~>克試ヘrz}×{℃璃槙{idu建椢塘yt{rv≧{upwsaYSJi∫(eqxt¥草x劭梅pw獅xhc]]m曹m_VMOk速コク檜T<7Ik竃昼月額px初~spon€」ケー養`VVXav薗侭槙zmf_^[[_gw雛「詩メ藻桃モ|€ミ~{rooww♂zrknns~шsu}|xiekm{居当純ュ㊧緒堰決wswy}ョ括€snx縁肢×wofai符tpqtsv}薗水{nefiw於翌rlf__t畠ァ俊hnpd`z剱〕p泄陸「タN_|宴n馳[Sct~】}ベ`Vi{ル舶諏^RYjtzヲェ汕y~「iv酷桝》sx鋼b\m巡wzyw€筒^Ycxm[ey今カケ毳aTZlg_o鹸チッ囃鋼Z=An擱檮€㈲€}nkx≧|jai|й~活€wsorvs{wю部〝∴zi_ipttocajkmv~町ァ軽hZOWeunqyv┘ェ恪rqbZcあョ恂rhX]kmj、液kq燕泣w搗}her€ю}「里結rkv痴tnovu泊ヲ爐「市b甑bfn畝叶n」蓄GOax~}}zt≡剱リル悍ьョラzuqno}恁sY]|ェキ噬_T┗沂kBJetp{yefYWdcmiebyゥサオォ碗э`R^|劑cm字。vXBUsxyポzholyxg{≦pq則ョッイ止e甑島dR潔権tz€_J+Np遡タ_O儀|硲ェオ氛alqKrv}草剏k総€ェ、燥|m㍽漁ェ、ャイ阻_M5Hs≧qS_acqv券」ッゥrZV_vx±lo襖シキ倍aSZtlei封ェ穫{n_jwhsх岼ァ毯~xk墨ag結孱?3<[渥ゥョ赫O83[eJgr武罫mッ沸エゥpGhYNw|Htqn擲ェ揆ヲ」キヲロ・ェ洽ィ嚥y~梼{恕€庶{sa=44>=Qmv|≒享ウキ剌剌wU;.<_bn物ア丹 +V体モュyp{fhywy甥満ッ搓撃wzri]UYTJSY\|屹エ・ハw≡灸№gZ}磁ツヨカッ」尸xi|mj煤}€欠ovMICUcj[[苅倹n{OtdTkuw巡浴w~窮香nkp{渇本untロ搏|mnw{q萱・悛ウ嚏艶。刳騒圜ヲ撩㎡vibox」阜y葬Yq|薯v`ix€湯悸劒洶譜н{h[]SNE+2=" &1Halnw€ィコメア倒npァタクヲ「燥mxttjkia_DF7B;38WQc|т曝劬棧薯枢沍「ャァ掫YOdix雌摎怏奄zwмtTUv穴克ホuoy{モ|shcYcry|>糸淘劫X{鴛洽、ヲヲウツニスエ・囮荘復梺掛汲uhRB@BHJEK\y勳ウュヲ「漕}ngjVQ\__m級㎡jefloulfe^ZSSfmosqwbgolmjnlnoヲ立ウ擯洟搭㈲囈ッウェコッアウュ泊学\Lfuqr~褐㊧塔~j\UYfrzリ隙激崇ャ克q_eiuリPfopw}}unkg\Z^eq€a∮泯抑gabehkjmpy辨尅克穀恬~㍽尓㊥書ユYs~srvtgljt捲剏ozx{s~zot€次椒泯wuyUHOfn|>郊|я€momd\^pnsv^qs^LLWeeiouкn~結祷囮這ヨ㈱且劍樫zhlnkjrz~似屎囑圓ァ・撫穴uj_epqu{♀国сwmpx括園y|≧宴||€€d}uxk裏。泝恙勁」「ヲ秤【}€=Ty}rmkcackpicljnokhuytzqqcjjleq~yrxzz堅究€㊧畠ァqjldefhkqqx÷|rlt<Uio{}告剛}ywyrt{ロ兼㊥ユ券武荘合qsskfkpt}淘棟qq{㊥随履処㊧刹€}~″梼wogWOR[ejhosruj曙ヌpriakpnwx}酷剥去錐国許tzyonoimukfa`]dirpu€剣撼仲|y€猿【yzsy{urysjjifmppqmhdcgnpx|~′穴葛鎗尢濠枢又虫書虫煙倹東|÷~€{txxy~~<ペvtvz~~~g沿㈹橿h血隙z|wu≠|zwtvzxтч延d随結級㊨怨{p}{}≠|件助随援ホyspllmnyxvzчa~uligeiiimopqv|{vvy}€㈲草訣njggjmptyyyyzz{{y|€a}}ユ滑克書瑞豪旧轟<ヤ∞轟渇=a}wyy}}~}zwx}x|{xwvtuww|{♀薯侭柾詞濠沿且рcтпzwtrpnmpqsusolmkkkiffhjmruwwvvx|≠ヤdс㍾書剩脂|xwxwyvsqqnkklosyyvvwy}}|{wwae㊨去涛樗駐糟且莫。。沮俣肢}rjdaainqpsvvuxyxy{a≠~|{yyz~{yzyz~ュтャ>т€|wtqtz|yzxz~€р燕誌髄渚決モャ≠モメd€}zvtssqpopokjnrtw|€~z{ytxz{€㊦沿zrnklnruxу÷|wstux{≦㊨嵩剴拷|х件湯緒書曙€~zvsohdbaeipu}≦演㊨炎℡~{z{z|€ユ且錐b÷€€}|yututpmkjkmoopppppqsuxz|zxyy{~ч酷鋳遂€€~|{yxvxywtqnmoqssuvvvvvvvuvvy|{xvx{e㈹麹潔㊤ヤтту㊧葛月瑞渚結℡ャ㈱轄試試濠℡€<℡×|{{zzxvuuwyxwvvuvx{|{{|}}|}€ヤсヤモ÷~€≠ヤ沿㊦~~}||zxvtstuvx{~€€€€€<уモ÷€<ф㊦р==ュс=<÷~{xssssuvuuvvvvvuvuuttvw||≠ヤр÷€}}~}}~~{ywvwz|}€e血麹糾€~|{z{}≠ヤрcacャр=e㊦㊤a~zwtrrsux{{z{|}÷=€~|{zyyxwwxxy{~<メ€}zzz{|~≠у㈱麹壕~|yyxy|~€=dモa}}}}}}||zyyyyxyz|||||{z|||~≠ヤтстモ=€=cтモヤモ÷}|}€≠b€~}~~~~~}~€dтфモ==€~}}|{zyyzzyyz{{|||||}~~}}~€==≠a=€€}}|||||||}~€~~~~~~~~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€÷€€=bba€≠a~}|z{}~|yxy{~≠ム}zwwy|€ヤywx|€ヤс€}zy{}<т|yy|==}{{}€b€~|zxxz}}|zwutux|~~}}|{z{~ョ㊥р€|zz|~ywtsrsw{€~|||zyz}≦㊤€}{zyyz~h援メ~~≧旧怨×yutv||vrqonorx}{spsvwz}zvx|}€exsswy|хzusv{€緒灸}yz}€х滑{ussstuwxxurnmnmmnqvz}~{yyxvvx|ш庶括}}€蒼処€xtrty究~tlhioyj拷кtomqy綜〝wnjjp{決ホqjgkt€煙怨wpknv€恰€yqlnu~拷лsmmr|㍼錐vpnr|ulgiq|фミxod_akxラ恰】rnqz剥иrrx°蒼私zogekv€轄鰍xogdis拠昼』okmu€拠柏㍻wpnryレ草umjls{h恰~ulghox㈹壕~tmlqzi嵩私{tqsyч濠」mggmv}i割{qkjpyリ書戟vnkox∞件激wmhir}㍾渚mfgmx駐香sgcgq健柏jejtn利阜€qiiq{錘潟xmglwk視xlb`ixsg`bn雌順tjeit枕€xvurqy∑剿祉ulow}h漠楯nhhhhp|桃|g\cott{懸搶~oecix÷鋸刪skjihlw€♂壕€|~{vv~且{≧йtv€㊦】tpwgн~ц€qfjxц演yqlgis€拷|pkr~п~zspruyyvvyywvvwvw}~}wsv€㊥ュ炎y}ュ€z}㍼高{{|ysquvts|уzppuwqjlw€レ糸ztvzzwy~{€т{}渚濠иppw~|wsvyvtuyysruzxohlyух恰{tsvvpmswsy€wt{ф~x{c>葛{ehsy|ワ亦upjip€署xmo{㊥{|xnny滑球vf^amy⊿ヲヲ摩ri`Z_q嵐隙{pkr€沿|||}∴諮劫}ukb^brnecflt|ヨ怨|qhejs|у】sppryロ衰』rkkv紙ュ{|€♀酔qlmpwヱ柾€tkeck{漉阜Vf\at虫潟yj`cmw¥悛峻\V`p%「ヲ凭jdhkmv拳恚|z{seey走}{o^Xh囑撫|bU_w椛樗悼{pmkhgo{】slkv吹vrqkb^dqン「ァ汢qb_hu巨争zppv~ブebn€焔級z~ycQZ|洒、賦qimz€禦嚥tebk{鰹潟c€wmfgoz究}rhfp{モ€~}~{x|ョzuppy{qfcm}叶粕遵xhVQ^u燕掩炎зoqz>×ytlegw持刔rmssh]b擣ヲ蝿~seam∵攝YoaVXl示ュ」秩o[MPl筏オ汞yrbL@Ot舒アァ鍍VGQm劈嚮vaTS`tWTao~即ュ斈ikuqiq辞ッ凭ttqf`kヵ符smlgXQ`€濫€suzq_Wf¥壕徐度\Xi|岑、指nprrz畝ヲzsj^^t劉・旨ri\R]{丐買uhXLTo時SQh・ォッヲ吃T[n寺。e\fnnnz轄|f_gpqpx㏄mu≦ユ牛u€~sr炎€tq|ystrdTVo艶xwjUQg剥割sZQf唖附急fVdz。沾嚠lZay拠装落wcaozzx去ピmt{yst}㊨ь劇plqx{}ь氏rjoutqw楽hciot~造」掃nkllr頚ne]\m而ゥ怖meXKKe苅搆vaOSp剣渚薄^guyu}分ゥ靭rtl_`y里羅≠sYKYy署㏍ペ`PWr艶月葡}hev縁兼、ォ桷w|掩yuヲ淳rw€}lajpqz|m\[m{zrr~men{|us}去лk榎qtk恰券塘uu♀究虚腐ocgqtruレノ^]flotヴ芙wqsrnp~服売||ypio℃uy{sik~聡【toz刻『|tx遠xルr}給y€月ピpvwpkqvlnohagy穀閲vundh{櫨「曹zpc[cy帳椏ePIUnヲュャ凛[OYm~辧翼ladpx}⊥囃ブnhaZ]m€葛|scY`t禦「、「翼ngn兼粕帥pdeoz~€c|k]]iuz{€券死w}ypsm劫忠{syц~nhp′喝hgr{xrvш~lhs~{lfpzwjdo||k_g{ホqw㈹~moq朽%。怏€懸ヰ」、塔ы疫ks遠㎎kpn]MObuvliu}ta]j|『ovメsktщ「x㍼宴塩囃拒剛ы翠}zjёov≠yrxqddpy{zp落|qtywomwrdcovsou∴€rnxモysz€事争nku~wrv~ysy剛€c~tpu~{v{х~rnt||yy}rlr|фф葛∞窮€zxyvrpty~}}||zz{}€ュп}zz}~}€xwy|xpmt}メ~♂所~ssz|yz~€{rjkpttuy~€{yvtsw~т€}~~~yrpvuqsutpow≦€zuuxyxvx×||ヨ掩燈順ф渇x|}yqljmqsrpppmga][^dinrw}≠|zz}~}}€=㍾緒著擒沮剽柱㊤xttvunhdee`[VYbjmmmoqnf_^fs~ュwpot~㈲穀辨恍鋳詩諸又所㊤yx||xtsz€viabhnmjehq{yohgknnigiotw|}誌資理「尨圉泅相㊤€yssx}~ztmhfghec``chovzxsoosxxtpkknv~ユ~~~|xutxム}{{♀漠乱怨』qpt|≠aャ】spokc\Y^gqvuqqyйqprtsrrxヰ劈尨悼|phhnv}ヨ杉。「寳sh`bn|ypjhhgdbelsyzl`[^hz嫌對誌葺早peemwх兼蘭注tifhlqsu{亦宴|vla_ht~g叙剿急nd_blw∞延|vwr恙閣aSORZes€€ヨ誌隙ymdadm{漁」ィォォ・wlgimomknw撼槙zoiiigddhox′丕。zmeceijhhmu€虚尹槍ui`[Y[ahnt~去漫「嚶€vsv|ヮ鋼pnrz酎拷цペrooljhhjq{}|€unmortqjedkt{°万尓脂с】offmw{wsu$棕恆|tnnsyxqhekx∮劔泊号zngfgfcabjuyz|юnglstqtz|{~演女尹卵uoiiuы鰍|ywuuvz戟uqrstwz|~zsot}bヨ穀桃rlosqmjhfglt{又劫×}ymc^ZWZdsヤ許「椁涛又劇rg^WST_q∵ェカシサキョ閣d]XRKGLYgopsz~wokijknrw|€€}|}}|zy|ь繭惧囮脂㊤tnlotyzvrswyvsx}}}€喝}yyytleaafr~с€<ボpd[X\cijlpu|э劵ャョァ剏㊤】qhdcfkpw炎国封遵|yz}|sf``aaeoy}yussx♀書駐醇|vuyメ~}~|unlnu|㍼窓рту㊤-wsswywros|合€ywvtsx€ホssz€~wpnpqqrw~urstsqrtwyzyxzm粕至}tt}剣鮪м}zngfjoruy給鎗剏wd_fqvrkghp}叶戟vomptx{~€€i丁雷{okq{㈹球}uopv{~~~>ミ|€履枕ポxvtqlgefjpwу€yrnlnrtvy||yusv{ч括ムzussuxy}≦㊦ミ{{灯衰メc】smhddhov|eо€ш庶{yyxwy{{xsooutqw}|ukegoy~ル苧囑鯨sos喧剩汲|yzxpifinrsrv}署視件撃sga`ciry~÷|xxz{xsposy}€燈衷轟奄wja\]agox€崇初о}{|∞|xwywsnmr~椛綜給渇〟wneaaeoz~yuw|<€yrmklptvx|ル答椦矧ミzvssvzц€{vsruwwxz|}||}€}vnkmrvy}€ュ~|zxuqkefq惧尹阜tpoliec`bkw≧мvstx∞活т㈹荘号€|}€|wsru|ョxttuvwxyxwxy}€{usuy|yrljq|~~}{yy{}~≦焔給€€€|xuuxzxtppt{|vsuz}}|{|{yxxyywtqquz|}|~㊨渇炎活ム~}|~€a|{{zwspqtxz{}≠€~~~}zxxyzzyy{~€==ャメ~zwuuvxyyyy{}~{yy}g渇кursvz}~{yy|d×}|z}>т~{yyz{{{{|||{zywvwwvspnosyョ葛括メ~}~<a~~€ч血穴㏍{yxvurpnnooooqsvy{||||}~€=÷€ョ葛括€~|zyywuttvxz|~€≠a}|{zyyyzzzz{{{||}~~}}|}~㊦℡€|yxwwxxwvuuvxz{{{yvuvwy}≠a÷cс~~~€ba~}||{{{{{||{zywvuuvwxyxwvvvwxyz{|~€cтт€€€cメ}{z{{}~~|zwwxz{|}}||zzyyxwvvvvwwxxyyz}~~~€€==ャттメ=÷~}|zzz{||}}||{zzzyyyz{{{|}~€€€€~~~}|||||||||€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€